Проверка орфографии с помощью python и Яндекс.Спеллера

В силу разных обстоятельств не всегда получается орфографически правильно написать слово. В спешке не попал по нужной клавише, отвлекли, банально подзабыл правильное написание и т.д. Раньше для проверки орфографии я пользовался средствами текстового редактора или просто копировал в google, а он подсказывал правильное написание (кто этим не грешил :)), но это все лишние телодвижения.

Хочется выделить слово, причем на любом из используемых языков (украинский, английский, русский), нажать аккорд клавиш и получить правильную форму в буфере обмена, для вставки в текст.

Можно выделить два варианта проверки орфографии:

  • с помощью локальных словарей, уже установленных в системе;
  • онлайн словари, с доступом по API;

Перечень локальных системы проверки орфографии (повествование ведется про Linux), в порядке исторического появления:

  • ispell - один из первых спелчекеров, датирован 1971 годом;
  • aspell - разработан на замену ispell;
  • hunspell - наиболее популярная система проверки орфографии на данный момент, используется в LibreOffice, Solr, Google Chrome, Thunderbird / Firefox, Opera и многих других.

Среди онлайн систем проверки орфографии с открытым API я остановился на API Яндекс.Спеллер. Google, почему-то, не предоставляет в отрытом доступе свой 'Did you mean' (плохо искал?).

Т.к. у меня уже установлен в системе hunspell, с требуемым набором словарей, решил начать с него. Случайно взятые слова и скормленные hunspell, через консоль, особо не впечатлили. На довольно таки обыденные слова предлагались слова с тем же корнем, но другим значением либо вообще другие слова.

Пример, ввожу жели, на выходе хочу получить жили:

echo 'жели' | hunspell -d ru_RU
Hunspell 1.3.2
& жели 5 0: лежи, жиле, ели, же ли, желали

Тоже скормленное Яндекс.Спеллеру выдало приемлемый результат.

Пример использования для слова на русском языке и когда в системе активна русская раскладка, т.к. текущая раскладка передается в Яндекс.Спеллер для определения языка проверки. Выделяем слово и нажимаем назначенный аккорд (в XFCE управление шорткатами находиться в SettingsKeyboardApplication Shortcuts).

Если слово написано корректно:

Если слово написано некорректно то высвечивается список возможных вариантов и в буфер помещается первый вариант

Касательно подноготной. Тестировалось на Arch Linux + XFCE 4.10 + Python 3.3. Для определения текущего языка в системе использую такую консольную команду

setxkbmap -print | grep xkb_symbols | awk -F'+' '{print $2}'

Насколько мне известно PyGTK для Python 3 еще нет, поэтому работать с буфером обмена будем через консольную утилиту xsel. Для общения с API Яндекс.Спеллер используется Requests.

Иконки взяты с набора function.

Сорцы можно посмотреть на github'e.

Дополнительное чтиво

blog comments powered by Disqus