Предупреждение
В pymorphy больше не будут исправляться ошибки или добавляться новые возможности - разработка остановлена. Используйте https://github.com/kmike/pymorphy2.
Чтобы использовать морфологический анализатор, нужно сначала создать объект класса pymorphy.Morph:
from pymorphy import get_morph
morph = get_morph('dicts/ru')
Аргументы pymorphy.get_morph:
Можно также передавать любые дополнительные аргументы, которые принимает конструктор класса pymorphy.Morph.
Примечание
Обратите внимание, все методы Morph ожидают, что строковые аргументы (в.т.ч. пустые или латинские, если используется pymorphy-speedups) - это unicode-строки. Кроме того, слова для обработки должны быть в верхнем регистре.
Предупреждение
Всегда старайтесь использовать единственный экземпляр анализатора.
Объекты класса pymorphy.Morph требуют довольно много ресурсов для создания, не уничтожаются сборщиком мусора и не закрывают за собой файловые дескрипторы, поэтому постоянное создание анализаторов будет приводить к утечке ресурсов.
>>> word = u'Вася'.upper()
>>> info = morph.get_graminfo(word)[0]
>>> print info['norm']
ВАСЯ
>>> print info['class']
С
>>> print info['info']
мр,имя,ед,им
>>> print info['method']
lemma(ВАС).suffix(Я)
Morph.get_graminfo() возвращает list всех возможных вариантов разбора слова. Каждый вариант разбора - dict, в котором есть нормальная форма, часть речи, грамматическая информация и служебные данные для отладки. См. также Обозначения для грамматической информации в pymorphy.
>>> morph.normalize(u'БУТЯВКАМ')
set(u'БУТЯВКА')
Morph.normalize() возвращает множество (set) всех возможных нормальных форм слова.
>>> morph.inflect_ru(u'БУТЯВКА', u'дт,мн')
БУТЯВКАМ
Morph.inflect_ru() возвращает слово в форме, которая соответствует переданной и меньше всего отличается от исходной. В случае, если такую форму найти не удается, возвращается исходное слово.
Примечание
Этот метод на данный момент не работает с фамилиями. См. Склонение имен и фамилий.
См. также: Обозначения для грамматической информации в pymorphy
Простое:
>>> morph.pluralize_ru(u'БУТЯВКЕ')
БУТЯВКАМ
Согласованное с цифрой:
>>> morph.pluralize_inflected_ru(u'ПОПУГАЙ', 1)
ПОПУГАЙ
>>> morph.pluralize_inflected_ru(u'ПОПУГАЙ', 2)
ПОПУГАЯ
>>> morph.pluralize_inflected_ru(u'ПОПУГАЙ', 38)
ПОПУГАЕВ