Обертка вокруг сервиса Яндекс.Спеллер
Все права на сервис Яндекс.Спеллер очевидно принадлежат Яндексу (спасибо, Кэп!). Обязательны к прочтению условия использования сервиса
- http://legal.yandex.ru/speller_api/ - на момент написания гема есть ограничение на 10K запросов или 10M символов в сутки
gem 'speller', github: 'ex0rcist/speller' Сервис Яндекс.Спеллер хорошо исправляет несложные опечатки в тексте. Этот функционал может понадобиться, например,
- при автоматическом парсинге текстов из какого-то источника - есть смысл проверить их на опечатки
- при заполнении форм пользователем, их можно править на стороне сервера автоматически, или использовать JS-часть API Яндекс.Спеллер
В геме есть два основных класса:
- Speller::Word - для обработки одиночных слов
- Speller::Text - для обработки текста
Оба класса наследуют класс Speller::Base, который в свою очередь наследует String. Конструктор принимает два аргумента - text и options
- text - слово или текст для обработки
- options - хэш опций, состоящий из
- lang - язык обработки ('ru', 'en', 'uk'), по умолчанию 'ru,en'
- format - формат входных данных ('plain', 'html'), по умолчанию 'plain'
- options - int, сумма опций, см. https://tech.yandex.ru/speller/doc/dg/reference/speller-options-docpage/
word = Speller::Word.new 'ареул' # => "ареул"
# spellcheck - список ошибок в слове, массив с 0 и более элементов
# в каждом элементе указан код ошибки (code), позиция слова в строке, его длина (len)
# а также возможные варианты замены
word.spellcheck # => [{"code"=>1, "pos"=>0, "row"=>0, "col"=>0, "len"=>5, "word"=>"ареул", "s"=>["ареал", "орел", "ареол", "ореол", "реал"]}]
# correct? проверяет слово на наличие ошибок
word.correct? # => false
# variants возвращает список вариантов замены слова
word.variants # => ["ареал", "орел", "ареол", "ореол", "реал"]
# spellsafe возвращает копию строки с первым из вариантов замены
word.spellsafe # => "ареал"
# correct!(variant=0) меняет строку in-place, с возможностью выбора варианта замены
word.correct! # => "ареал"
word.correct!(1) # => "орел"В целом похож на Word, но не имеет метода variants и не может выбирать вариант для correct!
# options: 16 указывает спеллеру игнорировать слова, написанные латиницей
text = Speller::Text.new "Многотсрочный текст\nс опчетками и <span>html-разметкой</span>", {options: 16, format: 'html' }
text.spellcheck # => список ошибок, аналогично Word
# correct? проверяет текст на наличие ошибок
text.correct? # => false
# bad_words возвращает список слов с ошибками
text.bad_words # => ["Многотсрочный", "опчетками"]
# spellsafe возвращает копию текста с первым из вариантов замены
text.spellsafe # => исправленный текст
# correct! меняет текст in-place
text.correct! # => исправленный текст