Просклонять русские ФИО из дательного в именительный падеж python. Лемматизатор

Нужно просклонять ФИО из дательного в именительный. Например, 'Иванову Ивану Ивановичу' -> 'Иванов Иван Иванович'

Как можно осуществить это? Pytrovich, насколько я понимаю, склоняет из именительного в остальные

Можно ли сделать это, например, в pymorphy2? Не нашел в документации информации о самостоятельном изменении тегов, насколько понял, он сам определяет форму, я могу задать характеристики формы слова на выходе, но не могу указать ему, что это дательный падеж, или я ошибаюсь?

В общем, мб кто-то знает решение/функционал для него?


Ответы (1 шт):

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

Метод parse дает несколько вариантов разбора (например для "Иванову" там будет и дательный мужской род, и винительный женский род), из них нужно выбрать вариант разбора с дательным падежом (или какой вам нужен), потом просклонять в именительный:

import pymorphy2

morph = pymorphy2.MorphAnalyzer()

text = 'Иванову Ивану Ивановичу'
result = []

for word in text.split():
    # Фильтруем только разборы с формой дательного падежа и единственным числом,
    # с помощью next берем первый попавшийся
    # (будет исключение StopIteration, если такого варианта разбора нет)
    p = next(filter(lambda x: {'datv', 'sing'} in x.tag, morph.parse(word)))

    # Просклонять в именительный падеж, слово в этой форме добавить в список
    result.append(p.inflect({'nomn'}).word)

    # Также можно брать нормальную форму (для существительных это как раз именительный падеж):
    # result.append(p.normal_form)

print(' '.join(result).title())  # Иванов Иван Иванович
→ Ссылка