Как найти фамилию в тексте

  • nowfine

Какие существуют методы извлечения Фамилии Имени Отчества из текста?

Какие существуют методы извлечения Фамилии Имени Отчества из текста?
Сложно конечно предположить наличиие какого-либо универсального алгоритма, скорее интересуют практические наработки и статьи, дающее представление о направлениях в каких можно двигаться.
Интересуют возможности выделения ФИО в формате «Путин В.В./Путин Владминир Владимирович/Владминир Владимирович» (в разных падежах) и т.д.


  • Вопрос задан

    более трёх лет назад

  • 8260 просмотров

ну вот сходу шаблон для написания regexp:
1. два или три слова (разделитель: не буква или цифра (или несколько))
2. все 1-е буквы — заглавные,
3. минимум одно слово — состоит НЕ из 1 буквы.
4. если слово из 1-й буквы — следующий символ обязательно: «.» (точка)
5 расстояние Левенштейна по словарю имен, фамилий и отчеств (через их сочетания).

Отбой. Если кому интересно Яндекс некоторое время назад опубликовал исходные тексты tomita парсера (github.com/yandex/tomita-parser). Надо признать кода очень много и изучить его работы изнутри будет достаточно интересно, но касательно заданного вопроса вывод такой: используются данные из mystem и достаточно большое кол-во правил (код на C++).

Пригласить эксперта

Попробуйте томита-парсер от Яндекса.

Гугл работает над семантическим поиском, там каждому имени и фимилии присвоен отдельный крякозябр (/m/05qt0″ — Politics, Путин есть на русском и даже Мизулина ) с чёрточками (ну и остальным словам, уже поиск работает, у меня тодже по нескольким выражениям), по английскому запросто а по русски там мало слов. v3 это типо там надо искать. Лет через 10 такой проблемы наверное не возникнет.

Должны существовать корпуса со списком всех имён/фамилий/отчеств. Как минимум, можно автоматически выбрать из википедии или dbpedia (структурированные данные из википедии).

1. Находим корпуса или формируем свой.
2. Делаем поиск на совпадение хотя бы с одним словом (лучше, на частичное совпадени — на случай опечаток и всяких склонений).
3. Когда находим, выделяем окрестность слова (пара слов влево-вправо) и анализируем его эвристиками.

Если задача серьёзная (не хобби), то раз упомянули томиту, упомяну и такую молотилку текстов: ABBYY Tagger. Словари и правила в комплекте. Но вариант не бюджетный.

Это называется задача распознавания именованных сущностей (named entity recognition). В вашем случае имен персон. Наш продукт Textocat API умеет это делать: убедитесь в этом сами на странице демо для русского языка или получите бесплатный ключ к API после регистрации на нашем сайте.


  • Показать ещё
    Загружается…

28 мая 2023, в 19:46

500 руб./за проект

28 мая 2023, в 18:23

10000 руб./за проект

28 мая 2023, в 18:23

2500 руб./за проект

Минуточку внимания

Время прочтения: 3 мин.

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

Нашей группе разработчиков поступила задача выявить в большом количестве документов персональные данные вида «ФИО + номер телефона». Но если номер телефона легко найти в тексте при помощи простейшего regex’а, то как быть с именами клиентов?

И тут к нам на помощь приходит Наташа! Ну, то есть, Natasha. Та, которая извлекает структурированную информацию – в нашем случае фамилию, имя и отчество – из текста на русском языке.

Для всех следующих примеров текста будем использовать базовый код для поиска ФИО:

from natasha import (
    Segmenter,
    MorphVocab,  
    PER,
    NamesExtractor,
    NewsNERTagger,   
    NewsEmbedding,
    Doc
)
 
emb = NewsEmbedding()
segmenter = Segmenter()
morph_vocab = MorphVocab()
ner_tagger = NewsNERTagger(emb)
names_extractor = NamesExtractor(morph_vocab)
 
text =  ''  #текст добавляем сюда

doc = Doc(text)
 
doc.segment(segmenter)
 
doc.tag_ner(ner_tagger)
 
for span in doc.spans:
    span.normalize(morph_vocab)
{_.text: _.normal for _ in doc.spans}
 
for span in doc.spans:
    if span.type == PER:
        span.extract_fact(names_extractor)
   
{_.normal: _.fact.as_dict for _ in doc.spans if _.fact}

Для проверки работы используем простой текст, содержащий несколько ФИО:

text = 'Добрый день, Галина Петровна! Прошу выполнить заявку Прокина Николая Владимировича от 31.05.2020 и предоставить необходимые доступы следующим сотрудникам: Бирякову Алексею Александровичу, Носовой Анне Сергеевне. Спасибо.'

Незамедлительно получаем следующий результат:

{'Галина Петровна': {'first': 'Галина',
  'middle': 'Петровна'},
'Бирякову Алексею Александровичу': {'first': 'Алексею',
  'last': 'Бирякову',
  'middle': 'Александровичу'},
'Носовой Анне Сергеевне': {'first': 'Анне',
  'last': 'Носовой',
  'middle': 'Сергеевне'}}

Отличный результат, не правда ли? Таким образом из большого текста за секунды можно получить все упоминаемые имена, фамилии и отчества. И, объединив этот метод с поиском номеров телефонов, мы легко и просто находим все персональные данные клиентов, чтобы в дальнейшем их скрыть или удалить из документов.

Но, к сожалению, и в этой бочке меда нашлось место ложке дегтя.

Если мы попробуем использовать другой текст:

text = 'Любимая Галина Петровна! Давно хочу рассказать вам о своих чувствах! Ваш Сындыкмаа Шожул.'

То получим следующий результат:

{'Любимая Галина Петровна': {'first': 'Галина',
  'last': 'Любимая',
  'middle': 'Петровна'}}

И вот, сердечное обращение «Любимая» с легкой руки Natasha превращается в фамилию Галины Петровны, а вполне обычное тувинское имя вообще перестает быть именем и фамилией.

Но это все частные случаи, и в общем объеме данных такие примеры могут даже и не встретиться. Тем не менее, стоит помнить, что даже Natasha может пропустить что-то важное, несмотря на то, что она является самой используемой библиотекой для задач NER на русском языке и весьма качественной —  на habr даже приводилось исследование, в котором выяснилось, что для новостных статей качество на всех задачах у Natasha сравнимо или превосходит существующие решения.

Конечно, нельзя ожидать от модели машинного обучения 100% точности, поэтому мы считаем, что для нашей задачи Natasha сработала отлично, и результатами мы остались удовлетворены.

Есть распознанный (разные источники, документы-чеки, на русском) текст, нужно в этом тексте находить ФИО и даты.
Использование меток а-ля фио идет после слова «фио:» не всегда работает, ибо иногда искомое фио непредсказуемом месте (в комментариях к платежу, например).
Поиск именованных сущностей вроде из пушки по воробьям, да еще и текст по сути набор несвязанных слов.

Тупое решение: регулярные выражения, но для имен они зло по своей сути. :)

Вообще хотелось бы использовать машинное обучение, дабы сдать как курсовик по соответствующему предмету, но как подступиться — я не понимаю. Если есть решение без машинки — тоже пригодится, задачу в любом случае надо решить.
Даты по наличию года находить получается, но с ними наверное ML проще чем с ФИО применить.

задан 22 мар 2021 в 14:17

Cactus566's user avatar

2

Скорее всего с регулярками будет проще сделать. Либо с NER, например из библиотеки Natasha. Когда вы осознаете все сложности, с которыми вам придётся столкнуться при попытке решения этой задачи методами машинного обучения, вы поймёте, что это как-раз машинное обучение тут «из пушки по воробьям», а не наоборот.

Если машинное обучение использовать нужно принципиально, то вам придётся:

  • придумать какие-то фичи, которые позволили бы алгоритму ML отделить ФИО от других сущностей; придумывание фич — это отдельное искусство, там может быть что угодно — длина слова, длина предыдущего слова, наличие большой первой буквы в слове, ну там полно всего придётся придумать
  • разметить данные !!!! т.е. вручную прописать, что тут — фио, а тут — не фио, это очень нудная и кропотливая работа
  • гонять получившиеся данные разными алгоритмами ML, допридумывать фичи, доразмечать данные…

Это долгий и сложный процесс. Но интересный, конечно.

ответ дан 22 мар 2021 в 14:29

CrazyElf's user avatar

CrazyElfCrazyElf

65.4k5 золотых знаков19 серебряных знаков50 бронзовых знаков

4

Перед вами максимально простая в использовании утилита. Вы можете вытащить ФИО из любого файла: будь то текстовый документ, HTML, электронная почта. Программа распознает как русские, так и иностранные имена.

Как использовать инструмент

Скопируйте текст, который вы хотите изменить, и вставьте его в поле. Заполните настройки и нажмите кнопку «Выполнить». Большой текст можно загрузить файлом. Далее скопируйте из соседнего окна получившийся текст или выгрузите файл.

Почему инструмент полезен

Чтобы вычленить ФИО из большого объема данных, вам не нужно искать специальные настройки, тратить много времени, чтобы сделать это вручную, пользоваться сложными программами или кодами. Чтобы упорядочить клиентские базы, перечни сотрудников или учащихся, телефонные книги — начните работу с нашим инструментом и быстро получите список имен.

Преимущества работы с сервисом

Texter не требует платы или регистрации. Избавьтесь от большого объема рутинной работы благодаря быстрому форматированию текстов любых видов и размеров. На главной странице доступны бесплатные онлайн-инструменты, которые позволяют улучшить текст за несколько кликов мышью.

Возможности

Если при работе с большими объемами текста вам требуется найти и заменить слово или фразу, а также удалить или найти вхождение элемента, то используйте встроенные функции программы:

  1. Найти и заменить — находит и заменяет элемент.
  2. Найти и удалить — находит и удаляет нужный элемент.
  3. Найти и подсветить — находит искомое значение и подсвечивает контрастным цветом.

Незаменимый помощник для редактора, копирайтера, маркетолога и специалиста по контекстной рекламе. Скрипт производит массовые операции во всем тексте с символами (пробелы, иконки, знаки), а также буквами, словами, выражениями, словосочетаниями и фразами.

Подстановочные символы (скоро)

Подстановочные знаки можно использовать при поиске и замене содержимого, когда искомое значение может удовлетворять множеству значений.

? (вопросительный знак) — используется в качестве фильтра для одного любого символа. Например, условие «дро?а» будет соответствовать словам «дрова» , «дрофа» или «дрона» .
* (звездочка) — используется чтобы найти выражение с любым количеством символов. Для примера, условие «красн*» соответствует словам «красная» , красного» , «краснуха» , «красненького» и т.д.

Инструмент заменяет привычный Word и Excel и позволяет искать, заменять или удалять элементы онлайн, когда привычные пакетные офисные программы отсутствуют под рукой.

Инструкция

Найти и заменить

  1. Выберите функцию Найти и заменить (доступа по умолчанию);
  2. Вставьте исходный текст для изменения;
  3. В строке Найти укажите искомое слово или фразу;
  4. В поле Заменить введите новое значение;
  5. Нажмите на кнопку Выполнить. Алгоритм найдет все вхождения и заменит.

Найти и удалить

  1. Выберите функцию Найти и удалить;
  2. Вставьте исходный текст в текстовое окно;
  3. В строке Найти укажите слово или фразу для удаления;
  4. Нажмите на Выполнить. Алгоритм удалит все найденные значения.

Найти и выделить

  1. Чтобы подсветить буквы или слово, выберите нужную функцию;
  2. Укажите ключ-значение в поле Найти;
  3. Далее кнопка Выполнить для определения всех значений.

Примечание. В нижней части формы программа укажет сколько было найдено и изменено вхождений в тексте.

С лёгкостью можно отправить полученный результат в буфер обмена — просто нажмите на кнопку Скопировать в самом низу.

Что важного в диджитал на этой неделе?

Каждую субботу я отправляю письмо с новостями, ссылками на исследования и статьи, чтобы вы не пропустили ничего важного в интернет-маркетинге за неделю.

Узнать подробнее →

Понравилась статья? Поделить с друзьями:
  • Как найти всего начислено в эксель
  • Найти как делают уколы детям
  • Как найти длл библиотеку
  • Как найти тангенс угла aob по клеткам
  • Как найти площадь камня