Подсчет числа упоминаний организаций в тексте
Возник вопрос по функционалу библиотеки Natasha.
Допустим, требуется извлечь именованные сущности (named entities) из текста, а затем подсчитать частоту упоминания каждой в этом тексте. Путем сегментирования текста и NER можно увидеть подобные сущности в тексте:
from natasha import (
Segmenter,
NewsNERTagger,
NewsEmbedding,
Doc,
ORG
)
segmenter = Segmenter()
emb = NewsEmbedding()
ner_tagger = NewsNERTagger(emb)
text = "Газпром планирует приобрести компанию Апекс Банк за 1 миллиард рублей. Газпром обозначил, что переговоры уже начаты."
doc = Doc(text)
doc.segment(segmenter)
doc.tag_ner(ner_tagger)
doc.ner.print()
Как результат будет такая визуализация:
Газпром планирует приобрести компанию Апекс Банк за 1 миллиард рублей.
ORG──── ORG───────
Газпром обозначил, что переговоры уже начаты.
ORG────
Однако, мне требуется получить лист с частотой упоминаемости, вроде такого:
2 Газпром
1 Апекс Банк
В документации natasha есть предзаготовленные экстракторы дат, персон и денежных единиц, но по организациям нет; указано обращаться к библиотеке yargy и писать свой экстрактор. Но yargy ищет только предзаданные конструкции (на сколько понимаю), я же не знаю, какие организации могут быть упомянуты в тексте (в примере дал короткий, но на практике они больше). Каков может алгоритм решения проблемы, что я упускаю?
Ответы (1 шт):
Попробуйте так:
from collections import Counter
counter = Counter([org.text for org in doc.spans if org.type =='ORG'])
print(counter.most_common())
Суть в том, что размеченный текст находится в doc.spans, можно перебрать его элементы и взять из них нужные. Ну и посчитать их.