Проблема с распознаванием рода. Библиотека 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 шт):

Автор решения: insolor

Нужно убирать переносы строк перед разбором слова:

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

→ Ссылка