Python. Библиотека Natasha
Извлекаем с помощью программирования имена и фамилии из текстов на русском языке
Недавно у «Важных историй» совместно с «Медузой» вышло расследование о том, кто помогает полицейским фальсифицировать дела за наркотики. Помогают им в этом так называемые штатные понятые. Люди, которые, как правило, знакомы с полицейскими или находятся от них в зависимости, потому что они уже сами судимы или накануне задержаны, и над ними висит угроза нового срока. Вместо честных показаний, такие понятые могут просто подтверждать все, что скажут сотрудники полиции. И не по одному разу.
Как найти таких понятых? Они обычно выступают в суде или там оглашаются их показания. Поэтому можно поискать в приговорах судов. Мы скачали с сайта Мосгорсуда вообще все документы по всем наркотическим статьям. Дальше нам нужно было извлечь их текстов все имена и найти те, что встречаются не только в одном деле, а в двух и более.
И сегодня я и расскажу, как раз о той части работы, где мы извлекали имена из текста. Для этого мы использовали отличную библиотеку, которая называется Natasha, над ней работала Лаборатория анализа данных Александра Кукушкина.
Библиотека решает все базовые задачи обработки естественного русского языка: сегментация на токены и предложения, морфологический и синтаксический анализ, лемматизация, извлечение именованных сущностей.
Давайте на примере одного приговора посмотрим, как это работает. Текст приговора можно скачать вот тут.
Для начала экспортируем библиотеку и пропишем все необходимы строки для дальнейшей обработки текста.
И загрузим наш текст приговора.
В этом приговоре как раз есть довольно много разных имен, на которых можно проверить, как справляется библиотека. Для начала передадим текст нашей библиотеке. Назовем этот объект переменной doc. И совершим с этой переменной все возможные действия, на которые способна библиотека.
А дальше можем проверить, как библиотека справляет с сегментацией. Для этого давайте проверим, как текст бьется на токены. И попросим распечатать первые пять.
И давайте посмотрим, как библиотека разбивает текст на предложения. Проверим первые пять.
Также эта библиотека умеет делать морфологически разбор слов. Это может пригодиться, если для какой-то задачи вам поднабиться вычленять и работать только, например, с прилагательными или существительными. Давайте опять же посмотрим на разбор первых пяти слов.
Как видите, библиотека дает полный разбор. У каждого слова мы видим часть речи, а также, например, в каком числе, роде и тд это слово употребляется.
Эта библиотека умеет и нормализовывать слова — приводить их к правильной форме. И не только слова, но и целые словосочетания, которые мы обычно воспринимаем как цельную сущность. Давайте посмотрим на небольшую выборку.
Как видите, библиотека воспринимает, например, «Российской Федерации» не как два отдельных слова «Российская» и «Федерация», а ка кна цельную сущность. А также умеет привести это к правильной форме — «Российская Федерация». И также происходит с именами. Библиотека может распознавать их род и приводить к начальной форме.
Но если вам нужно привести каждое слово к начальной форме, то есть лемматизировать его, то вы можете использовать команду lemmatize.
Еще библиотека Natasha умеет извлекать даты.
Вот так , например, достаются даты из приговора. Но можно привести это к более удобной форме с помощью f-строк.
Ну и имена! Библиотека может извлекать имена в разных написаниях из текстов. В приговорах чаще — это фамилия и инициалы.
Как видите, каждая часть имени распознана отдельно: есть фамилия, имя и отчество. Или можно взять распознанную сущность целиком. В нашем случае так и нужно было. Поэтому с помощью команды keys() мы можем получить все ключи словаря. А дальше сделать из него список.
Да, попутно распознаются и лишние элементы. Но это все легко вычистится на этапе очистки данных. Главное, что ничего не теряется при этом.
На этом этап извлечения имен из текстов приговоров и был закончен. Дальше оставалось только проверять встречаются ли эти имена и в других делах.
Тетрадку с этим уроком вы можете найти здесь. А если возникли вопросы, то задать их здесь.