[0x3] Проверка орфографии
Часто приходится набирать текст в браузере: при заполнении web-формы, google-документа, email'а и т.п. Печатаю я торопливо, и, к сожалению, заимел привычку не перечитывать написанное. Но даже перечитав текст, порой в упор можно не заметить какой-либо опечатки или ошибки, особенно под вечер, когда голова уже не соображает.
К счастью, для таких балбесов как я, есть spellchecker'ы. Об одном из них как раз хочу рассказать. Софтина называется LanguageTool (далее просто LT). Она хорошо справляется с задачей на проверку орфографии (и не только) в браузере (и не только).
- Общие сведения
- Запуск и проверка
- Проверка орфографии в браузере
- Проверка орфографии в LibreOffice
- Проверка орфографии в Emacs
- Итог
1. Общие сведения
Программа "подсвечивает" не только опечатки/ошибки, но еще и забытые/лишние скобки, криво расставленную или забытую пунктуацию, помогает подобрать синонимы. Подробнее про весь доступный функционал см. на офф. сайте.
Писана программа на Java, а сам алгоритм проверки текстов использует под капотом широко известные библиотеки: Hunspell
и Apache Lucene
.
LT может работать и как CLI-программа, и как клиент-серверное приложение. Нас прежде всего будет интересовать второй вариант использования.
Клиент — интегрируется в целевую программу (например, в браузер) и при заполнении форм — отправляет http-запрос на сервер, который, в свою очередь, занимается уже непосредственной проверкой присланного в запросе текса.
По умолчанию, браузерное дополнение используется сервер разрабов LT. Но юзать его небезопасно (в формах могут быть и явки/пароли, код, который вы только что написали под NDA, и т.д.) В общем, отправлять личный текст к какому-то "дядюшке на деревню" — зашквар для любого уважающего себя "ковбоя клавиатуры").
Но LT не удостоился бы чести быть описанным в данном блоге), если бы не позволял запускать свой сервер проверки орфографии, на локальном или удалённом хосте (см. https://dev.languagetool.org/http-server). И это ли не круто?
2. Запуск и проверка
Для линуксов и макоси есть готовые пакеты, которые включают в себя сценарии запуска приложения в виде системного сервиса/демона.
Но для того чтобы быстро попробовать утилиту, не привязываясь к особенностям конкретной ОС, поднимем ванильный сервер на локалхосте:
$ wget https://languagetool.org/download/LanguageTool-stable.zip
$ unzip LanguageTool-stable.zip && rm -f LanguageTool-stable.zip
$ cd LanguageTool-<VERSION>/
$ java -cp languagetool-server.jar org.languagetool.server.HTTPServer --port 8081
Проверка:
$ curl -s -d "language=ru-RU" -d "text=текст с ашибкой" http://localhost:8081/v2/check \
| jq ".matches[].replacements"
Результат:
[{"value":"Текст"}]
[{"value":"ошибкой"},{"value":"ошибкою"},{"value":"сшибкой"},{"value":"ушивкой"},{"value":"шибкой"},{"value":"а шибкой"}]
Работает.
3. Проверка орфографии в браузере
Далее, качаем и устанавливаем браузерное расширение, после чего в тулбаре появится кнопка:
В настройках дополнения переключаем способ проверки — на собственный сервера:
4. Проверка орфографии в LibreOffice
Далее настраиваем spell checking на базе LT для LibreOffice:
и
Убедитесь, что в настройках spell checker'a у вас добавлен Русский язык как один из целевых языков при проверки орфографии.
Проверяем:
Готово!
5. Проверка орфографии в Emacs
Для Emacs, конечно же, тоже есть плагины:
Рассмотрим подключение и использование первого пакета — languagetool.el
:
;; LanguageTool
(use-package languagetool
:ensure t
:defer t
:commands (languagetool-check
languagetool-clear-suggestions
languagetool-correct-at-point
languagetool-correct-buffer
languagetool-set-language
languagetool-server-mode)
:config
(setq languagetool-java-arguments '("-Dfile.encoding=UTF-8")
languagetool-server-url "http://localhost"
languagetool-server-port 8081)
:bind (("<f7>" . languagetool-server-mode)
("<f8>" . languagetool-correct-buffer)))
Проверяем:
Вроде бы работает, но... У меня несколько раз Emacs зависал наглухо, при использовании LT через http. Подозреваю, что это связано с блокирующей операцией во встроенном http-клиенте Emacs. Поэтому я перешел на использование LT в Emacs через CLI-интерфейс. И это работает без проблем. Меняем код выше на:
;; LanguageTool
(use-package languagetool
:ensure t
:defer t
:commands (languagetool-check
languagetool-clear-suggestions
languagetool-correct-at-point
languagetool-correct-buffer
languagetool-set-language)
:config
(setq languagetool-java-arguments '("-Dfile.encoding=UTF-8")
languagetool-console-command "~/<path to lt>/languagetool-commandline.jar")
:bind (("<f7>" . languagetool-check)
("<f8>" . languagetool-correct-buffer)))
где <path to lt>
— полный или относительный путь к каталогу с дистрибутивом LT.
6. Итог
LanguageTool — годный и шустрый инструмент для проверки орфографии (и не только) в браузере (и не только). Opensource, self-hosted, — все как мы любим. Энджой, мазаХака!