Использование

Warning

В pymorphy больше не будут исправляться ошибки или добавляться новые возможности - разработка остановлена. Используйте https://github.com/kmike/pymorphy2.

Подготовка

Чтобы использовать морфологический анализатор, нужно сначала создать объект класса pymorphy.Morph:

from pymorphy import get_morph
morph = get_morph('dicts/ru')

Аргументы pymorphy.get_morph:

  • path - обязательный параметр, путь до папки с файлами;
  • backend - используемое key-value хранилище (‘sqlite’ по умолчанию);
  • cached - использовать ли кэш (True по умолчанию).

Можно также передавать любые дополнительные аргументы, которые принимает конструктор класса pymorphy.Morph.

Note

Обратите внимание, все методы Morph ожидают, что строковые аргументы (в.т.ч. пустые или латинские, если используется pymorphy-speedups) - это unicode-строки. Кроме того, слова для обработки должны быть в верхнем регистре.

Warning

Всегда старайтесь использовать единственный экземпляр анализатора.

Объекты класса 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() возвращает слово в форме, которая соответствует переданной и меньше всего отличается от исходной. В случае, если такую форму найти не удается, возвращается исходное слово.

Note

Этот метод на данный момент не работает с фамилиями. См. Склонение имен и фамилий.

См. также: Обозначения для грамматической информации в pymorphy

Постановка во множественное число

Простое:

>>> morph.pluralize_ru(u'БУТЯВКЕ')
БУТЯВКАМ

Согласованное с цифрой:

>>> morph.pluralize_inflected_ru(u'ПОПУГАЙ', 1)
ПОПУГАЙ
>>> morph.pluralize_inflected_ru(u'ПОПУГАЙ', 2)
ПОПУГАЯ
>>> morph.pluralize_inflected_ru(u'ПОПУГАЙ', 38)
ПОПУГАЕВ

См. Morph.pluralize_ru(), Morph.pluralize_inflected_ru().