NewTechAudit
291

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 строчек кода можно извлечь необходимую информацию (имена, даты, локации, валюты и т. д.) и сэкономить много времени.

{ "author_name": "NewTechAudit", "author_type": "editor", "tags": [], "comments": 0, "likes": 1, "favorites": 1, "is_advertisement": false, "subsite_label": "newtechaudit", "id": 109109, "is_wide": false, "is_ugc": false, "date": "Wed, 26 Feb 2020 10:30:23 +0300", "is_special": false }
0
Комментариев нет
Популярные
По порядку

Прямой эфир