Зачастую приходится работать с большими объемами документов, к примеру, исполнительными листами, заявлениями, договорами, из текстов которых нам необходимо извлечь весьма конкретную информацию: ФИО, даты рождения, наименования должности, паспортные данные, адрес, ИНН и наименование компаний, даты подписания документов и так далее. Всё это относится к задаче распознавания именованных сущностей (NER). Какие инструменты могут помочь нам в решении данной задачи для русского языка? Пожалуй, первое что приходит в голову Data Scientist’у, когда речь идет о NLP или конкретно NER-задачах — это проекты DeepPavlov. Немного углубимся в данную тему, разберем все по порядку. DeepPavlov — это фреймворк (open source), который помогает в разработке различных голосовых ботов, соответственно, решая различные NLP задачи. На вход подается непредобработанный (регистры, знаки и т.д. сохранены) текст, а на выходе мы хотим увидеть, так называемые, спаны — фрагменты текста, с которыми уже можно работать (например, отнести к определенной категории). Всю работу осуществляем в Colab. Установим Natasha (поддерживает Python версии 3.5 и выше):   Если говорить вкратце, то она умеет решать базовые (и не только базовые, но сегодня поговорим только о них) задачи NLP для русского языка, такие как: токенизация, лемматизация/нормализация фраз (или имен), определение частей речи и многое другое.  Импортируем нужные нам модули: Есть мнение, что данного рода фреймворки хорошо работают с новостными статьями (что логично, ведь там очень часто встречаются именованные сущности). Давайте возьмем какую-нибудь хорошую новость из топа новостей Яндекса:   Передадим текст с данной новостью в Doc(). Далее сегментируем наш текст (Natasha использует для этого еще одну свою разработку именуемую «Раздел», посмотрим на первые и последние 5 токенов:   Первый токен — цельная дата проведения матча, не разбитая на мелкие токены, соответственно, даты, скорее всего, будут распознаваться корректно. Перейдем к морфологии и разберем последнее предложение: С помощью этого метода мы имеем возможность определять часть речи, пол и многое другое в зависимости от текста. С лемматизацией (процессом приведения слова к нормальной форме) проблем также не обнаружено. Эта задача решается с помощью известной многим разработкой Яндекса Pymorphy: Вполне неплохой результат, двигаемся дальше. Давайте научимся добывать именованные сущности из текста: Natasha для удобства подчеркивает именованную сущность для быстрого анализа текста глазами, для любителей работать в Jupyter Notebook есть возможность даже настроить «подсветку» сущностей. Natasha определила футбольные клубы к организациям, фамилии игроков к личностям, а город к локации. Результат положительный. Вдогонку к лемматизации — можно нормализовать слова, которые не нормализованы в тексте: На самом деле этот небольшой разбор лишь вершина айсберга возможностей, которые предоставляют нам разработчики DeepPavlov. Фреймворк покрывает значительную часть ad-hoc задач Data Scientist’а, многое отлично работает, как говорят, «из коробки». Проблемы могут возникнуть при обработке неструктурированных данных (ПДФ файлы), которые не сохраняют регистр, пунктуацию, пробелы, но это уже совсем другая история… Еще одним интересным инструментом для решения задачи NER является библиотека SpaCy. SpaCy распознает различные типы именованных сущностей с помощью прогноза предобученных языковых моделей. Итак, импортируем библиотеку и посмотрим на что она способна. Для использования языковой модели, необходимо ее подгрузить.   Передав наши приятные футбольные новости в созданный объект, на выходе мы получим обработанный документ, который будет содержать всю информацию исходного текста. Токенизация – это первое, что делает SpaCy с полученным текстом. При этом применяются правила, специфичные для языка текста. Проведем токенизацию первого предложения нашего текста. Отлично, дата целостная, как и в результате работы Natasha. Также выводится количество вхождений токена в текст. Посмотрим, как обстоят дела с лемматизацией и приведем новости в нормальную форму: Выведем из приятных новостей только те слова, которые изменились:   Получилось довольно неплохо, за исключением футбольного клуба Легии. Именованные сущности извлекаются очень просто. Так же есть возможность подсветить их прямо в тексте с указанием типа, для этого воспользуемся модулем displacy, который входит в пакет spaCy. Отлично, результат совпадает с Natasha. Проведем морфологический анализ текста.   В теги выводятся характеристики слова в зависимости от части речи. Мы рассмотрели базовые возможности библиотек, которые быстро и просто помогут решить NLP задачи. Их можно использовать и в процессе предобработки данных, и для простого извлечения именованных сущностей. Профессиональное сообщество