Как принять участие в разработке

Общая информация

Исходный код pymorphy2 распространяется по лицензии MIT и доступен на github и bitbucket:

Баг-трекер - на гитхабе. Для общения можно использовать гугл-группу (есть какие-то идеи, предложения, замечания - пишите).

Если вы хотите улучшить код pymorphy2 - может быть полезным ознакомиться с разделом Внутреннее устройство.

pymorphy2 работает под Python 2.x и 3.x без использования утилиты 2to3; написание такого кода, по опыту, оказывается не сложнее написания кода просто под 2.х, но поначалу требует некоторой внимательности и осторожности. Пожалуйста, пишите и запускайте тесты, если что-то меняете.

Улучшать можно не только код - улучшения в документации, идеи и сообщения об ошибках тоже очень ценны.

pymorphy2 основывается на словарях из OpenCorpora и использует наборы текстов оттуда для автоматического тестирования и замеров скорости; в будущем планируется также использовать размеченный корпус для снятия неоднозначности разбора, ну и вцелом это классный проект. Любая помощь OpenCorpora - это вклад и в pymorphy2.

Тестирование

Запуск

Тесты лежат в папке tests. При написании тестов используется pytest. Для их запуска используется утилита tox, которая позволяет выполнять тесты для нескольких интерпретаторов питона.

Для запуска тестов установите tox через pip:

pip install tox

и выполните

tox

из папки с исходным кодом.

Замеры скорости работы

Чтобы улучшать скорость работы pymorphy2 (оптимизируя структуры данных, алгоритмы или реализацию), нужны какие-то надежные средства для замеров производительность.

На каких данных измерять?

Самый очевидный способ - выполнить интересующую операцию pymorphy2 для всех слов из какого-то большого текста или корпуса. Это полезная метрика, которая позволяет оценить среднюю скорость разбора. Минусы - зависимость от конкретного корпуса, необходимость этот корпус распространять.

В pymorphy2 для замеров этого типа вместо корпуса целиком используются частотные списки униграмм из OpenCorpora: для каждого слова разбор можно выполняеть столько раз, сколько оно встречалось в корпусе.

Для того, чтоб бороться с “эффектом хоббита”, выполняется еще одна проверка производительности - разбор прогоняется по 1 разу для каждого слова из top-100k униграмм.

Для оценки производительности поддержки буквы “ё” во всех словах “ё” заменяется на “е” и после этого опять прогоняется бенчмарк.

Организация замеров производительности в pymorphy2

Код для бенчмарков лежит в папке benchmarks. Для запуска тестов производительности выполните

tox -c bench.ini

из папки с исходным кодом pymorphy2.

Замеры потребления памяти

Чтобы оптимизировать структуру словаря, нужно отслеживать потребление памяти. Для этого у утилиты командной строки pymorphy есть специальная команда:

pymorphy dict mem_usage <FILE> [--verbose]

Для ее работы нужно предварительно установить psutil:

pip install psutil

<FILE> - это папка со словарем; если указана опция --verbose, будет напечатан более детальный отчет о том, объекты каких типов занимают сколько памяти.

Примечание

Для работы --verbose требуется установить пакет guppy, который на данный момент недоступен для python 3 (+ для работы под 2.7 трубеутся устанавливать последнюю версию guppy из svn).