Проблема с распознаванием рода. Библиотека pymorphy2
У меня есть такой код:
with open('russian_nouns.txt', encoding='utf-8') as F:
nouns_lines = F.readlines()
random_noun = random.choice(nouns_lines)
parsed = morph.parse(random_noun)[0]
print(parsed.tag.gender)
Я беру случайное слово из файла и хочу узнать его род и напечатать его. Но когда я запускаю код:
вывод: None
Вот, к слову, переменная parsed:
Parse(word='жирянка\n', tag=OpencorporaTag('UNKN'), normal_form='жирянка\n', score=1.0, methods_stack=((UnknAnalyzer(), 'жирянка\n'),))
Я пытался обратится только к самому слову, но получал ошибку:
AttributeError: 'str' object has no attribute 'tag'
Этот код работает исправно:
parsed = morph.parse('шкаф')[0]
print(parsed.tag.gender)
вывод:
masc
Если что просите дополнительной информации. Надеюсь вы проясните меня в этой проблеме. Заранее спасибо.
Ответы (1 шт):
Нужно убирать переносы строк перед разбором слова:
import pymorphy2
morph = pymorphy2.MorphAnalyzer()
word = 'жирянка\n'
p = morph.parse(word)
print(p)
word = word.strip() # Убрать пробельные символы в начале и конце строки
p = morph.parse(word)
print(p)
print(p[0].tag.gender)
Вывод:
[Parse(word='жирянка\n', tag=OpencorporaTag('UNKN'), normal_form='жирянка\n', score=1.0, methods_stack=((UnknAnalyzer(), 'жирянка\n'),))]
[Parse(word='жирянка', tag=OpencorporaTag('NOUN,inan,femn sing,nomn'), normal_form='жирянка', score=1.0, methods_stack=((DictionaryAnalyzer(), 'жирянка', 8, 0),))]
femn
Видно, что после обрезки лишних символов слово вполне успешно разбирается.
Аналогичная проблема может возникнуть при попытке разбора не одного слова, а словосочетания или предложения. Pymorphy2 не предназначен для этого, нужно сначала разбить на отдельные слова (в том числе убрать знаки препинания), потом уже каждое слово отдельно разбирать.