воскресенье, 28 июня 2015 г.

Расширенная проверка орфографии в emacs


В предыдущей статье я рассказал как можно настроить двуязычную проверку орфографии, однако такая проверка работает с каждым словом в отдельности, не учитывая контекст. Это безусловно полезная проверка, но её одной мало, хочется расширенного анализа: проверки расстановки дефисов, пунктуации, стиля и т.п. Конечно же в emacs нашёлся способ проводить и такой анализ текста. Делается это при помощи плагина работающего с приложением languagetool.


Приложение чрезвычайно интересное, поддерживает кучу разных языков и имеет плагины для интеграции в десяток сторонних приложений. В частности для русского языка в нем содержится почти пол тысячи различных правил, которые иногда очень даже помогают находить ошибки. На главной странице есть форма для демонстрации возможностей, где можно поиграться, посмотреть какие ошибки умеет отлавливать languagetool. Сразу скажу, что он не идеален, иногда ведёт себя довольно отвратительно, но в целом от него сильно больше пользы, чем вреда. При всем при этом он довольно активно развивается, так что надеюсь, что большинство ошибок рано или поздно будут исправлены.

Что бы прикрутить проверку от languagetool в emacs, во-первых его нужно установить как независимый пакет в систему. Скачать его можно с официального сайта, но не знаю насколько легко он таким способом встанет, в интернетах я встречал упоминания, что у него есть проблемы с некоторыми версиями java. Я его ставил через пакетный менеджер, проблем никаких не возникло:
sudo pacman -S languagetool
Далее необходимо установить плагин для интеграции с emacs. Настройка его не мудрёная:
(defun lcl:langtool ()
  (require 'langtool)
  (setq langtool-default-language "ru"
        langtool-mother-tongue "ru"
        langtool-disabled-rules "MORFOLOGIK_RULE_RU_RU"
        langtool-java-classpath "/usr/share/languagetool:/usr/share/java/languagetool/*"))
(lcl:langtool)
Хотелось бы только обратить внимание на пару моментов. На странице плагина автор указывает несколько способов указать строку запуска, у меня заработал последний (это путь указанный в переменной "langtool-java-classpath"), на другой системе возможно потребуется использовать другой способ. И вторая особенность это настройка переменной "langtool-disabled-rules" - в ней можно указать список правил, которые не нужно применять при анализе текста. Я запретил проверку орфографических ошибок, из тех соображений, что она судя по всему полностью повторяет ту, что я описывал в предыдущей статье, но при этом проводится только по одному языку, что меня не устраивает.

Все готово, осталось только запустить проверку в интересующем буфере, для этого выполняем: "M-x langtool-check", она довольно долгая - для страницы текста будет работать около 30 секунд. Все ошибочные места с точки зрения languagetool подсветятся красным, затем выполняем: "M-x langtool-correct-buffer", что бы перейти в режим исправления ошибок, выглядеть это будет примерно так:
И так последовательно languagetool проведёт нас по всем найденным ошибкам, объясняя, что же ей не понравилось и если возможно - варианты исправления. После исправления всех ошибок, выйти из режима проверки можно командой "M-x langtool-check-done".

Комментариев нет:

Отправить комментарий