{"id":14284,"url":"\/distributions\/14284\/click?bit=1&hash=82a231c769d1e10ea56c30ae286f090fbb4a445600cfa9e05037db7a74b1dda9","title":"\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0444\u0438\u043d\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u0430\u043d\u0446\u044b \u0441 \u0441\u043e\u0431\u0430\u043a\u0430\u043c\u0438","buttonText":"","imageUuid":""}

Natasha: инструмент для извлечения именованных сущностей из русских текстов

Как извлечь структурированную информацию из текста на русском языке? Знакомы ли вы с Natasha?

Одной из самых сложных, неоднозначных проблем, которая может встретиться во время работы с данными, является извлечение именованных сущностей (Named‑entity recognition, NER) – слов, обозначающих предмет или явление определенной категории.

На вход программному модулю подаётся текст, а на выходе получаются структурированные объекты. Например, имеется новостной текст, и необходимо выделить в нем сущности (локации, персоны, организации, даты и так далее). Решая задачу NER, мы сможем понять, что «ООН» – это организация, «8 апреля 1938 года» это дата, а «Kumasi» – локация.

Задача NER традиционна и хорошо изучена, особенно для английского языка. Существует большое количество как коммерческих так и открытых решений, например, NLTK, Spacy, Stanford NER, OpenNLP и другие. Для русского языка тоже существует довольно много инструментов, но почти все они являются коммерческими (DaData, Pullenti, Abbyy Infoextractor, Dictum).

Из открытых инструментов отметим Natasha ­– открытая библиотека для языка программирования Python, которая позволяет извлекать структурированную информацию из текстов на русском языке. Natasha отличается лаконичным интерфейсом и включает экстракторы для имён, адресов, сумм денег, дат и некоторых других сущностей.

Однажды мне нужно было решить следующую задачу: был дан набор строк, в каждой строке была дата договора. Эта дата могла быть в произвольных форматах и стоять в любом месте строки. Я потратил достаточное количество времени, чтобы написать регулярное выражение, которое находит эти даты. Применив же инструмент, решающий задачу NER, время на решение задачи составило не более 2 минут, как на рисунке 1.

На Рисунках 1 и 2 показаны примеры использования библиотеки Natasha для извлечения дат (рисунок 1) и ФИО (рисунок 2).

Рисунок 1 – Пример с датами​

Рисунок 2 – Пример с именами

Сначала создаётся объект нужного нам экстрактора, в который передаётся текст. Экстрактор определит положения объектов, которые мы ищем (например, объект NamesExtractor будет искать ФИО в тексте и найдёт их в следующем виде ([105, 136), [139, 166), [297, 323), [354, 369)]). Также можно вывести данные в формате JSON с помощью функции format_json.

Таким образом, всего лишь в 5 строчек кода можно извлечь необходимую информацию (имена, даты, локации, валюты и т. д.) и сэкономить много времени.

0
Комментарии
-3 комментариев
Раскрывать всегда