{"id":14291,"url":"\/distributions\/14291\/click?bit=1&hash=257d5375fbb462be671b713a7a4184bd5d4f9c6ce46e0d204104db0e88eadadd","hash":"257d5375fbb462be671b713a7a4184bd5d4f9c6ce46e0d204104db0e88eadadd","title":"\u0420\u0435\u043a\u043b\u0430\u043c\u0430 \u043d\u0430 Ozon \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u0442\u0430\u043c \u043d\u0435 \u043f\u0440\u043e\u0434\u0430\u0451\u0442","buttonText":"","imageUuid":""}

Stanza и решение задач NER

Stanza построена на основе библиотеки глубокого обучения PyTorch. Так же проект включает предварительно обученные модели, соответствующие 66 естественным языкам (английский, испанский, русский и т.д.)

Для решения задачи для текста на русском языке можно в коде программы применить метод download(‘ru’), который загрузит указанную языковую модель.

import stanza stanza.download(‘ru’)

Далее инициируем нейронный конвейер (Pipeline) с указанием языка (‘ru’)

nlp = stanza.Pipeline('ru')

Теперь решим задачу извлечения ФИО клиента, а также локации, указанной в тексте первого предложения сообщения. Для этого передаём на конвейер текст, после чего он возвращает обработанный документ. Документ в свою очередь состоит из предложений (sentences), в которых можно выбрать сущности (entities). У каждой выделенной сущности будет ряд свойств — text, type (в нашем случае это значения PER и LOC), start_char (позиция первого символа текста сущности в исходном тексте), end_char (позиция последнего символа в исходном тексте).

import stanza nlp = stanza.Pipeline('ru') txt = 'Иван Иванович Иванов из г. Иваново оставил положительный отзыв. Офис продаж на пер. Кузнечный 123' doc = nlp(txt) for ent in doc.sentences[0].entities: if (ent.type in ('PER', 'LOC')): print (ent.text,' ',ent.type)

Результат будет следующим:

Иван Иванович Иванов PER Иваново LOC

Попробуем выделить сущности из англоязычного текста — предложения, содержащего информацию об авиарейсе. Для этого применим метод download(‘en’), который загрузит модель для английского языка.

import stanza stanza.download('en') nlp = stanza.Pipeline('en') txt = 'flight Moscow London January 1, 2020.' doc = nlp(txt) for sent in doc.sentences: for ent in sent.entities: print (ent.text,' ',ent.type)

Результат будет следующим:

Moscow GPE London GPE January 1, 2020 DATE

В результате мы видим две сущности с типами GPE – Moscow и London, а также сущность с типом DATE, соответствующая дате.

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

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