libmorph :: Сравнение производительности

Сравнение производительности

Сравнительное тестирование производительности двух морфологических анализаторов русского языка, pymorphy3(популярная Python-библиотека) и libmorph/pyrusmorph, проводилось на реальном текстовом файле объёмом 311 775 слов.

Исходный код написанных deepseek под кальку программ измерения производительности: pymorphy3-speed.py и pyrusmorph-speed.py.

В коде умышленно не принимаются во внимание однобуквенные слова, так как в русском языке их, как известно, девять – а, б, в, и, к, о, с, у и я, но они очень высокочастотные, и производительность pymoprhy3 сильно проседает, почти вдвое. На производительность libmorph/pyrusmorph же они практически не влияют (10%).

pymorphy3

24 273 слов/сек
Затраченное время
12.85 сек
Опознано слов
278 519 (89.3%)

pyrusmorph

570 418 слов/сек
Затраченное время
0.55 сек
Опознано слов
278 221 (89.2%)
🚀 23.5x* быстрее
* если не выкидывать однобуквенные слова, то pyrusmorph в 30+ раз быстрее

📋 Методика тестирования

Тестирование проводилось на идентичном текстовом файле смешанной тематики, содержащем 311 775 слов, из который большинство – русские, однако встречаются также англицизмы, цифры и аббревиатура.

Условия проведения теста:

  • Однопоточный режим
  • Слова обрабатываются последовательно
  • На слова текст разбивается предварительно
  • Оба анализатора используют свои словари по умолчанию

Команды для запуска тестов:

pymorphy3:

$ python ./pymorphy3-speed.py
--- Старт обработки 311775 слов...
------------------------------
Затраченное время: 12.8445сек
Общее количество слов: 311775
Опознано слов: 278519 (89.3%)
Скорость: 24273 слов/сек

pyrusmorph (libmorph):

$ python ./pyrusmorph-speed.py
--- Старт обработки 311775 слов...
------------------------------
Затраченное время: 0.5466 сек
Общее количество слов: 311775
Опознано слов: 278221 (89.2%)
Скорость: 570418 слов/сек

🔗 Исходные коды тестов

Примечание: Тесты проводились на процессоре Intel Core Ultra 7 155H @ 4.5 GHz. Абсолютные значения могут отличаться в зависимости от аппаратного обеспечения, но соотношение скоростей сохраняется.