Алгоритм поиска фамилий в тексте

1,040 views
Skip to first unread message

fl00r

unread,
Apr 5, 2011, 8:26:54 AM4/5/11
to RubyOnRails to russian
Есть у меня текст. Существуют ли алгоритмы поиска фамилий в тексте?

a.ognevsky

unread,
Apr 5, 2011, 8:31:29 AM4/5/11
to ror...@googlegroups.com
А что такое фамилия?

--
Andrey Ognevsky

On Tuesday, April 5, 2011 at 2:26 PM, fl00r wrote:

Есть у меня текст. Существуют ли алгоритмы поиска фамилий в тексте?

--
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы "RubyOnRails to russian" на группах Google.
FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ

Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
ror...@googlegroups.com
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу: ror2ru-un...@googlegroups.com
Дополнительные варианты находятся на странице группы http://groups.google.com/group/ror2ru?hl=ru

fl00r

unread,
Apr 5, 2011, 8:33:50 AM4/5/11
to RubyOnRails to russian
Издеваешься? :) Вот у тебя фамилия - Огневский.

У меня есть текст и я хочу знать кто в нем упоминается, например

Timothy N. Tsvetkov

unread,
Apr 5, 2011, 8:35:21 AM4/5/11
to ror...@googlegroups.com, fl00r
Как определить, что Питерский это фамилия?

2011/4/5 fl00r <pedro.ya...@gmail.com>:

a.ognevsky

unread,
Apr 5, 2011, 8:37:29 AM4/5/11
to ror...@googlegroups.com
Ну тут как раз просто. Если это не фамилия, то писаться должно с маленькой буквы :) С другой стороны, колбаса Питерская — с большой, и тут уж точно никак не определишь. 

--
Andrey Ognevsky

fl00r

unread,
Apr 5, 2011, 8:38:16 AM4/5/11
to RubyOnRails to russian
Это я спрашиваю :)

Конечно, мне не нужно 100% результат.

Определить, что Питерский это не фамилия можно по несовпадению с
правилами. Например, то что в тексте, скорее всего, будет "Питерский"
писаться также и не в начале строки - а значит будет с прописной.
Соответственно мы создаем правило, что 90% случаев (для избежания
опечаток) слово должно писаться с большой буквы. Ну и в таком духе -
собственно ищется алгоритмика такого поиска. Она у меня есть в голове,
но думаю, что не самая изящная.

On 5 апр, 16:35, "Timothy N. Tsvetkov" <timothy.tsvet...@gmail.com>
wrote:


> Как определить, что Питерский это фамилия?
>

> 2011/4/5 fl00r <pedro.yanovic...@gmail.com>:

Sergey Avseyev

unread,
Apr 5, 2011, 8:35:57 AM4/5/11
to ror...@googlegroups.com
Предполагался ответ типа "Фамилия это как минимум -- имя собственное. Именя собственные в русском языке пишутся с большой буквы"

Какие еще признаки фамилий выделяют их среди остальных имён собственных в вашем тексте?

On Apr 5, 2011, at 15:33 , fl00r wrote:

> Издеваешься? :) Вот у тебя фамилия - Огневский.

– Sergey Avseyev


a.ognevsky

unread,
Apr 5, 2011, 8:38:45 AM4/5/11
to ror...@googlegroups.com
Ну какие тут издевки. Ты просто определись, что такое фамилия, и регулярные выражения же. Я бы начал со всех слов, которые начинаются с большой буквы. Впрочем, этим бы и закончил, потому что в остальном (без четкого стандарта) сделать ничего не получится.

--
Andrey Ognevsky

fl00r

unread,
Apr 5, 2011, 8:40:38 AM4/5/11
to RubyOnRails to russian
Да это я все понимаю. Просто не хотел изобретать велосипед. Вдруг уже
есть теория рядов и фамилий. Взять интеграл о текста и
проэкспонировать по 20% серого. Ну что-то машинное

fl00r

unread,
Apr 5, 2011, 8:43:13 AM4/5/11
to RubyOnRails to russian
Ну и регэкспы это как будто очень медленно для текста в, например,
100-500 страниц

Michael Bykov

unread,
Apr 5, 2011, 8:48:19 AM4/5/11
to ror...@googlegroups.com
5 апреля 2011 г. 16:40 пользователь fl00r <pedro.ya...@gmail.com> написал:
 
Да это я все понимаю. Просто не хотел изобретать велосипед. Вдруг уже
есть теория рядов и фамилий. Взять интеграл о текста и
проэкспонировать по 20% серого. Ну что-то машинное
 
  

 
пока нету. Вот в следующих поколениях людей будут стандартные идентификаторы вместо фамилий, тогда да.

А пока фамилия  - это название семьи. Нужно определить, что речь идет о персонаже (человеке). Вычислить историю его рода. Составить генеалогическое дерево - уже есть службы онлайн с хорошим api - gini.org(?)

ну вроде как мы трек mp3 определяем в musbrainz
 

 

 



--
М.

http://diglossa.ru
xmpp://m.b...@jabber.ru


Sergey Avseyev

unread,
Apr 5, 2011, 8:49:26 AM4/5/11
to RubyOnRails to russian
В интернете есть много словарей фамилий, я думаю будет проще и
надёжнее составить из них индекс. Правда тогда может быть
противоположное срабатывание, когда в качестве фамилии используется
простое слово (Мельник например)

fl00r

unread,
Apr 5, 2011, 8:57:03 AM4/5/11
to RubyOnRails to russian
Сергей, использовать индекс с фамилиями неплохая идея. От обратного,
так сказать

fl00r

unread,
Apr 5, 2011, 8:57:29 AM4/5/11
to RubyOnRails to russian
Другое дело, что такое использование упустит довольно много фамилий в
любом случае

Sergey Avseyev

unread,
Apr 5, 2011, 8:59:00 AM4/5/11
to RubyOnRails to russian
Ещё важно не испортить текст. Люди используют любые слова как фамилии

fl00r

unread,
Apr 5, 2011, 9:00:57 AM4/5/11
to RubyOnRails to russian
что значит не испортить текст? текст я никак не изменяю. Просто мне
нужно найти персоналии в нем

Sergey Avseyev

unread,
Apr 5, 2011, 9:04:32 AM4/5/11
to RubyOnRails to russian
Пусть персоналии лучше авторы текста указывают, потому что там может
встречаться фамилия, но не относиться к тексту.

fl00r

unread,
Apr 5, 2011, 9:07:27 AM4/5/11
to RubyOnRails to russian
Это да. Но если идет оцифровка библиотеки документов госдепа, то с
авторов спрос невелик

Konstantin Rudenkov

unread,
Apr 5, 2011, 9:11:17 AM4/5/11
to ror...@googlegroups.com
Я работаю в компании, которая занимается DLP(защита от утечек данных) и поговорил с нашими программистами-лингвистами, морфологических алгоритмов для ФИО нет, только тупо сверять по словарю - это их мнение. 

______________________
best regards,
Konstantin Rudenkov

fl00r

unread,
Apr 5, 2011, 9:12:33 AM4/5/11
to RubyOnRails to russian
Спасибо. Тогда отбой

Nash Bridges

unread,
Apr 5, 2011, 10:16:08 AM4/5/11
to RubyOnRails to russian
С большой долей вероятности можно считать фамилией имя собственное с
инициалом(-ами) или именем рядом. Но и это не гарантирует 100%
результата: например, <<...он останавливался в Б. Бурлуке с 13 по 12 мая
1875 г. ...>>, здесь -- Большой Бурлук. Словарь имен будет поменьше и даст
больший охват фамилий. К сожалению, не все фамилии в тексте идут с
инициалами или именами.

Maxim Penzin

unread,
Apr 5, 2011, 12:24:14 PM4/5/11
to ror...@googlegroups.com
2011/4/5 fl00r <pedro.ya...@gmail.com>:

> Да это я все понимаю. Просто не хотел изобретать велосипед.
> Вдруг уже есть теория рядов и фамилий.

Лучше поискать по паспортным базам, наиболее встречающиеся там хорошо видны.

А вот пример редко встречающихся, но реальных имен-фамилий:

Василий Безотечественный
Галина Сухопар-александрова
Татьяна Орешко-вербицкая

...барабанная дробь... внимание!!!

Марина "Рыжакова де пизарро"

Занавес :)

--
-- mpe...@gmail.com -- www.penzin.ru --

Tsvetkov Timothy

unread,
Apr 5, 2011, 1:52:28 PM4/5/11
to ror...@googlegroups.com, ror...@googlegroups.com
Я тоже считаю, что для достаточной точности и для того чтобы отделять названия от фамилий нужно искать по словарю. Иначе даже какой-то разбор предложения на что угодно, хоть икс-икс штрих деревья будет сложен и толком ничего не даст.

Sent from my iPhone

Alex L. Demidov

unread,
Apr 6, 2011, 2:08:29 AM4/6/11
to ror...@googlegroups.com

Напомнило. У меня был случай когда пришел регистрироваться абонент
откуда-то из Латинской Америки с именем типа вроде Хуан Мария Лопес
Педро .. (еще штук пять имен) .. де Какой-то-там. А в биллинге три
поля - фамилия, имя и отчество по двадцать символов и пробелы в этих
полях front-end кодер счел недопустимыми.

Заменили три поля на одно, но большое - вылезли другие грабли -
девицы операторши стали при вводе еще чаще лепить ФИО в каком попало
порядке, то ФИО напишут, то ИОФ. В результате и в выводе перлы
вроде "Василий И.П." вместо "Пупкин В.И." и поиск по имени/фамилии
пришлось хачить чтобы искало и Василий Пупкин и Пупкин Василий.

Еще одни распространенные грабли - это тюркские отчества вида
Буль-буль оглы, где есть и пробел и дефис, возможность наличия
которых в отчестве для русскоязычных совсем не очевидна.

--
Alex L. Demidov (ALD9-RIPE).
http://alexeydemidov.com/
Freelance Consulting.

Max Lapshin

unread,
Apr 6, 2011, 2:24:36 AM4/6/11
to ror...@googlegroups.com, Alex L. Demidov
> Напомнило. У меня был случай когда пришел регистрироваться абонент
> откуда-то из Латинской Америки с именем типа вроде Хуан Мария Лопес
> Педро .. (еще штук пять имен) .. де Какой-то-там. А в биллинге три
> поля - фамилия, имя и отчество по двадцать символов и пробелы в этих
> полях front-end кодер счел недопустимыми.

Другой классический вариант — реально существующая фамилия «И» с
которой ходит народу больше,
чем в России населения. А validate_length_of стоит почти везде.

fl00r

unread,
Apr 6, 2011, 4:28:01 AM4/6/11
to RubyOnRails to russian
есть такая штука Stanford Named Entity Recognizer (NER)

http://www-nlp.stanford.edu/software/CRF-NER.shtml

правда я еще не смотрел что там к чему.

ну и вообще действительно имеется база в 400 тысяч фамилий. В принципе
этого будет достаточно, мне кажется.

Reply all
Reply to author
Forward
0 new messages