Скорость

Скорость разбора

С pymorphy можно ожидать разбор нескольких сотен русских слов в секунду “из коробки”. После дополнительной настройки можно получить производительность в несколько тысяч слов в секунду.

Этой скорости достаточно для многих задач (например, для различных экспериментов и задач, связанных с web), но pymorphy в нынешнем виде, думаю, не подойдет, если нужно быстро обрабатывать очень большие объемы данных. В этом случае лучше использовать lemmatizer или mystem.

У pymorphy нет цели быть быстрым, приоритет отдается качеству разбора и легкости сопровождения. С учетом того, что это хобби-opensource-проект, код и алгоритмы должны быть максимально простыми и понятными, чтобы облегчить внесение изменений и доработку под конкретные задачи.

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

  • перейти на более быстрое хранилище (sqlite → cdb → pickle);

  • отключить ненужные предсказатели;

  • установить simplejson (для упрощения установки pymorphy его не требует и использует по умолчанию встроенный медленный модуль):

    $ pip install simplejson
    
  • поставить пакет pymorphy-speedups, который содержит авто-подключаемое Cython-расширение:

    $ pip install pymorphy-speedups
    

Примечание

Для установки pymorphy-speedups и simplejson потребуются заголовочные файлы питона и среда с компилятором (как и для сборки любых других расширений).

Выбор хранилища для словарей

pymorphy поддерживает разные форматы для хранения словарей. Формат по умолчанию - sqlite. Этот формат поддерживается везде, не требует настройки, но, одновременно, является самым медленным.

Более быстрые альтернативы - cdb, bsddb, tcb, tch - имеют свои плюсы и минусы, отличаются друг от друга способом установки, скоростью и потреблением памяти.

Самый быстрый вариант - это загрузка словарей целиком в память (через pickle backend). В этом случае нет задержек на чтение данных с диска и преобразование их в нужный формат (все читается сразу), но расходуется 200-300Мб оперативной памяти. В этот формат словари можно преобразовать с помощью скрипта encode_dicts.py (лежит в репозитории с исходным кодом).

Более подробно обо всем этом можно узнать тут: Поддерживаемые типы хранилищ.

Оглавление

Предыдущий раздел

Интеграция с django

Следующий раздел

Дополнительные возможности

На этой странице