Просклонять русские ФИО из дательного в именительный падеж python. Лемматизатор
Нужно просклонять ФИО из дательного в именительный. Например, 'Иванову Ивану Ивановичу' -> 'Иванов Иван Иванович'
Как можно осуществить это? Pytrovich, насколько я понимаю, склоняет из именительного в остальные
Можно ли сделать это, например, в pymorphy2? Не нашел в документации информации о самостоятельном изменении тегов, насколько понял, он сам определяет форму, я могу задать характеристики формы слова на выходе, но не могу указать ему, что это дательный падеж, или я ошибаюсь?
В общем, мб кто-то знает решение/функционал для него?
Ответы (1 шт):
Метод 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()) # Иванов Иван Иванович