Ошибка при использовании NamesExtractor() и библиотеки natasha
Использую Jupyter Notebook и Python.
Нужно извлечь из текста романа именованные сущности, но при использовании NamesExtractor() возникает ошибка:
TypeError Traceback (most recent call last)
<ipython-input-38-d6905d7d8064> in <module>
5
6 names_counts = defaultdict(int)
----> 7 extract_names = NamesExtractor()
8 # извлекаем из каждого предложения имена и обновляем счётчик имён
9 for sentence in sentences:
TypeError: __init__() missing 1 required positional argument: 'morph'
Участок кода перед ошибкой:
# Извелечение именованных сущностей (имён персонажей)
from collections import defaultdict
from natasha import NamesExtractor
from nltk.tokenize import sent_tokenize
# функция извлекает из предложения имена и обновляет
# словарь с счётчиком
def update_names_counts(sentence, names_counts):
matches = extract_names(sentence)
if matches.matches:
for match in matches:
name = get_full_name(match.fact)
names_counts[name] += 1
# пока что не будем использовать контексты
# names_contexts[name].add(sentence)
# функция для конкатенации частей имён в единую строку ФИО
def get_full_name(match_object):
name_parts = []
if match_object.first is not None:
name_parts.append(match_object.first)
if match_object.middle is not None:
name_parts.append(match_object.middle)
if match_object.last is not None:
name_parts.append(match_object.last)
full_name = ' '.join(name_parts)
return full_name
Сам участок кода с ошибкой:
chapter1 = part1_chapter[1]
# извлекаем предложения (т.е. разбиваем исходный текст на предложения)
sentences = sent_tokenize(chapter1)
extract_names = NamesExtractor()
names_counts = defaultdict(int)
# извлекаем из каждого предложения имена и обновляем счётчик имён
for sentence in sentences:
update_names_counts(sentence, names_counts)
print('Количество найденных имён в тексте:', len(names_counts))
names_top_10 = sorted(names_counts.items(),
key=lambda name_and_count: name_and_count[1],
reverse=True)[:10]
Пробывал устанавливать и так pip install natashs,
и так пытался pip install git+https://github.com/natasha/natasha.git#egg=natasha
В чём всё таки проблема с NamesExtractor()?
Ответы (1 шт):
Автор решения: fer0m
→ Ссылка
Согласно документации https://github.com/natasha/natasha вы сперва должны объявить объект класса morph
morph_vocab = MorphVocab()
extractor = NamesExtractor(morph_vocab)