Исходный код pymorphy2 распространяется по лицензии MIT и доступен на github и bitbucket:
Баг-трекер - на гитхабе. Для общения можно использовать гугл-группу (есть какие-то идеи, предложения, замечания - пишите).
Если вы хотите улучшить код pymorphy2 - может быть полезным ознакомиться с разделом Внутреннее устройство.
pymorphy2 работает под Python 2.x и 3.x без использования утилиты 2to3; написание такого кода, по опыту, оказывается не сложнее написания кода просто под 2.х, но поначалу требует некоторой внимательности и осторожности. Пожалуйста, пишите и запускайте тесты, если что-то меняете.
Улучшать можно не только код - улучшения в документации, идеи и сообщения об ошибках тоже очень ценны.
pymorphy2 основывается на словарях из OpenCorpora и использует наборы текстов оттуда для автоматического тестирования и замеров скорости; в будущем планируется также использовать размеченный корпус для снятия неоднозначности разбора, ну и вцелом это классный проект. Любая помощь OpenCorpora - это вклад и в pymorphy2.
Чтобы улучшать скорость работы pymorphy2 (оптимизируя структуры данных, алгоритмы или реализацию), нужны какие-то надежные средства для замеров производительность.
Самый очевидный способ - выполнить интересующую операцию pymorphy2 для всех слов из какого-то большого текста или корпуса. Это полезная метрика, которая позволяет оценить среднюю скорость разбора. Минусы - зависимость от конкретного корпуса, необходимость этот корпус распространять.
В pymorphy2 для замеров этого типа вместо корпуса целиком используются частотные списки униграмм из OpenCorpora: для каждого слова разбор можно выполняеть столько раз, сколько оно встречалось в корпусе.
Для того, чтоб бороться с “эффектом хоббита”, выполняется еще одна проверка производительности - разбор прогоняется по 1 разу для каждого слова из top-100k униграмм.
Для оценки производительности поддержки буквы “ё” во всех словах “ё” заменяется на “е” и после этого опять прогоняется бенчмарк.
Код для бенчмарков лежит в папке 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).