Недавно у «Важных историй» совместно с «Медузой» вышло расследование о том, кто помогает полицейским фальсифицировать дела за наркотики. Помогают им в этом так называемые штатные понятые. Люди, которые, как правило, знакомы с полицейскими или находятся от них в зависимости, потому что они уже сами судимы или накануне задержаны, и над ними висит угроза нового срока. Вместо честных показаний, такие понятые могут просто подтверждать все, что скажут сотрудники полиции. И не по одному разу. 

Как найти таких понятых? Они обычно выступают в суде или там оглашаются их показания. Поэтому можно поискать в приговорах судов. Мы скачали с сайта Мосгорсуда вообще все документы по всем наркотическим статьям. Дальше нам нужно было извлечь их текстов все имена и найти те, что встречаются не только в одном деле, а в двух и более. 

И сегодня я и расскажу, как раз о той части работы, где мы извлекали имена из текста. Для этого мы использовали отличную библиотеку, которая называется Natasha, над ней работала Лаборатория анализа данных Александра Кукушкина.

Видео: Глеб Лиманский

Библиотека решает все базовые задачи обработки естественного русского языка: сегментация на токены и предложения, морфологический и синтаксический анализ, лемматизация, извлечение именованных сущностей. 

Давайте на примере одного приговора посмотрим, как это работает. Текст приговора можно скачать вот тут.

Для начала экспортируем библиотеку и пропишем все необходимы строки для дальнейшей обработки текста.

И загрузим наш текст приговора.

В этом приговоре как раз есть довольно много разных имен, на которых можно проверить, как справляется библиотека. Для начала передадим текст нашей библиотеке. Назовем этот объект переменной doc. И совершим с этой переменной все возможные действия, на которые способна библиотека.

А дальше можем проверить, как библиотека справляет с сегментацией. Для этого давайте проверим, как текст бьется на токены. И попросим распечатать первые пять.

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

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

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

Эта библиотека умеет и нормализовывать слова — приводить их к правильной форме. И не только слова, но и целые словосочетания, которые мы обычно воспринимаем как цельную сущность. Давайте посмотрим на небольшую выборку.

Как видите, библиотека воспринимает, например, «Российской Федерации» не как два отдельных слова «Российская» и «Федерация», а ка кна цельную сущность. А также умеет привести это к правильной форме — «Российская Федерация». И также происходит с именами. Библиотека может распознавать их род и приводить к начальной форме.

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

Еще библиотека Natasha умеет извлекать даты.

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

Ну и имена! Библиотека может извлекать имена в разных написаниях из текстов. В приговорах чаще — это фамилия и инициалы.

Как видите, каждая часть имени распознана отдельно: есть фамилия, имя и отчество. Или можно взять распознанную сущность целиком. В нашем случае так и нужно было. Поэтому с помощью команды keys() мы можем получить все ключи словаря. А дальше сделать из него список.

Да, попутно распознаются и лишние элементы. Но это все легко вычистится на этапе очистки данных. Главное, что ничего не теряется при этом.

На этом этап извлечения имен из текстов приговоров и был закончен. Дальше оставалось только проверять встречаются ли эти имена и в других делах.

Тетрадку с этим уроком вы можете найти здесь. А если возникли вопросы, то задать их здесь.