pyrusmorph: морфология русского текста в 30 раз быстрее
Библиотеки PyMorphy тормозят NLP-пайплайны из-за интерпретатора и аллокаций памяти. Расширение на нативном C++ ядре libmorph/rus, выросшем из словаря Зализняка, ускоряет лемматизацию примерно в тридцать раз.
Автор разобрал, почему библиотеки семейства PyMorphy2 и PyMorphy3, ставшие фактическим стандартом морфологического анализа русского текста в Python, работают крайне медленно. Причина — выполнение кода интерпретатором и множественные аллокации памяти при разборе каждого слова, из-за чего лемматизация превращается в узкое место всего NLP-пайплайна. Решение — Python-расширение на нативном C++ ядре libmorph/rus, которое ускоряет лемматизацию примерно в тридцать раз. Библиотека появилась в конце 1990-х на базе словаря А. А. Зализняка для проверки орфографии в пакете «Пропись», работала с Microsoft Word, а затем около 30 лет развивалась в составе «Апорта», «Рамблера» и украинской «Меты». В основе быстродействия — компактный словарь в виде непрерывного блока объёмом около 2 мегабайт (структуры DAWG и сжатые радиксные деревья) и отказ от динамического выделения памяти при операциях. Нагрузка немаленькая: на каждый мегабайт плоского текста приходится почти 150 тысяч актов лемматизации, что делает такой подход востребованным в высоконагруженных системах.