Skip to content

Сравнение средств для поиска орфографических ошибок

Saprigenie edited this page Jun 29, 2023 · 2 revisions

Общее описание одних из самых популярных средств

Есть несколько хороших библиотек, которые могут проверять орфографию:

  1. Уже представленный LanguageTool (https://github.com/languagetool-org/languagetool) - существует хорошая библиотека под Python, которая запускает локальный сервер библиотеки на Java и обращается к ней через Python (https://pypi.org/project/language-tool-python/#description). Показывает отличный результат по поиску орфографических ошибок. Может легко использоваться для поиска их количества и возможных исправлений. Из минусов - необходима установки Java в контейнере и первичное скачивание 220 Мб приложения LanguageTool на Java при первом использовании библиотеки. Однако по возможности внедрения и результатам поиска русских орфографических ошибок превосходит конкурентов.
  2. Pyenchant (https://pyenchant.github.io/pyenchant/) - изначально нет проверки русской орфографии, но есть возможность использования пакета русского языка из Libre office (или можно воспользоваться другими словарями русского, например: https://code.google.com/archive/p/hunspell-ru/). Может проверять слова и целые предложения, использовать фильтры на email, ссылки и т.д.
  3. JamSpell (https://github.com/bakwc/JamSpell) - проверка орфографии на основе языковых моделей довольно быстрая и точная в поиске исправлений. Существует предобученный русский вариант, можно обучить свой. Но функциональность крайне ограниченная.
  4. TextBlob (https://textblob.readthedocs.io/en/dev/) - построена на библиотеке nltk, но может решать не совсем нужную задачу - коррекция текста. Для русского языка придется обучить на русских текстах (пример обучения: https://stackabuse.com/spelling-correction-in-python-with-textblob/). Встроенных в библиотеку решений для русского нет.
  5. PySpellChecker (https://pyspellchecker.readthedocs.io/en/latest/index.html) - довольно простая библиотека, специализирующаяся на проверке орфографии. Имеет русский язык по умолчанию. Работает только со словами, либо списками слов (нужна правильная токенизация перед запуском).

Способ проверки эффективности библиотек

Для сравнения представленных средств был использован фрагмент "Преступления и наказания" Ф. М. Достоевского на английском языке (так как не все средства поддерживают русский). Была удалена вся пунктуация и текст был разделен на отдельные слова. В общем получилось 52919 слов. В 10% из них (5290) были намеренно занесены ошибки (перестановка символов, удаление символа, добавление нового символа, замена на символ близкий на клавиатуре). Каждое средство определяло есть ошибка в слове или нет. В результате были получены следующие результаты:

Имя библиотеки True negative False positive True positive False negative Время (сек) Доступность русского
LanguageTool 4090 1201 46410 1218 931.7 Да
Pyenchant 4091 1200 46162 1466 2.4 Нет
JamSpell 2694 2597 47263 365 7.7 Да
TextBlob 3892 1399 46286 1342 171.3 Нет
PySpellChecker 3815 1476 43663 3965 127.2 Да

Здесь:

True negative - количество верно определенных ошибок в словах.

False positive - количество слов с ошибками, которые были определены, как слова без ошибок.

True positive - количество верно определенных слов без ошибок.

False negative - количество слов без ошибок, которые были определены, как слова с ошибками.

Доступность русского - возможность находить орфографические ошибки в русском тексте из коробки.

Замечания

  • Некоторые средства (например, LanguageTool) поддерживают нахождение ошибок сразу в большом блоке текста, так что при реальном применении они могут оказаться гораздо быстрее (а языковые модули натренерованные на связи слов в предложении могут быть и лучше).
  • Сравнение происходило на английском тексте (так как не все средства изначально поддерживают русский), если взять тех, кто русский поддерживают и проверить их на русском тексте (5350 + 48151 слов), то получим следующие результаты:
Имя библиотеки True negative False positive True positive False negative Время (сек)
Language Tool 3781 1569 46489 1662 1169.1
JamSpell 2871 2479 46484 1667 17.5
PySpellChecker 4457 893 32707 15444 1692.2