Проверка орфографии средствами Yandex Speller
Описание
Обработка производит проверку передаваемого текста средствами API Yandex Speller, довольно проста в использовании.
Может принимать различные параметры и опции для проверки (см. скриншоты). Например может игнорировать короткие слова, исключать переданые слова из строки с разделителями или заданого справочника.
Позволяет на основе распознаных ошибок создавать справочник-словарь исключений.
Строка может содержать как обычный текст, так и HTML разметку.
Опции:
- Пропускать верхний регистр
- Пропускать слова с цифрами
- Пропускать пути и ссылки
- Выявлять повторы слов
- Пропускать латиницу
- Не предлагать замену (только подсвечивать ошибки)
- Отмечать латиницу
- Распознавать текст как набор слов
- Пропускать рЕгИСтР
- Пропускать римские цифры
Есть возможность при отсутствии ошибок в переданном тексте автоматически закрывать форму.
Проверяет русский, английский и украинский языки.
Ошибки подсвечиваются оранжевым цветом, а при наведении пишется в чем заключается ошибка, при щелчке на нее открывается выпадающий список, позволяющий выбрать из доступных вариантов.
Обращение происходит через HTTP GET (Я использовал бы Web сервисы, но платформа накладывает определенные ограничения, тем не менее в модуле есть закоменченный кусочек для соединения через WS).
Производиться десять попыток достучаться до сервиса, прежде чем будет выведено сообщение о невозможности использования (сервис лег, ну или что вероятнее - ваш интернет).
Если проверка инициирована с клиента (через форму), то в случае нахождения ошибок будет возможность исправить их из предложенных вариантов в выпадающем меню.
Если проверка инициирована с сервера, то результат вернет довольно обширный набор данных, включая исправленный текст, информацию об ошибках и предложенные варианты исправления.
Обработка использует только средства платформы, тестировалась на "голой" конфигурации 8.3.10.2561 УФ (Тонкий клиент), Win Server 2012R2.
На вскидку должна запуститься на чем угодно начиная с 8.3.6.1977 с отключенным режимом совместимости (Очень уж люблю СтрШаблон() ).
Красивости расчитаны на наличие IE-11 в системе, если у Вас все плохо, то поправьте следующую строку в модуле объекта: <meta http-equiv='X-UA-Compatible' content='IE=11'>
Спроектирована без использования модальных окон и вызовов.
Обработка довольно подробно документирована, при вызове функции модуля объекта - все параметры подписаны.
Код открыт, можете править в свое удовольствие, только не продавайте отдельно саму обработку (только если в составе продукта).
Передаваемые параметры и полученный результат
Обязательным является только параметр "Текст" при инициализации обработки на сервере, так что не пугайтесь обилию опций, все они могут быть опущены и будут выставлены по умолчанию.
Просто посмотрите, что возвращает закрытая форма или функция, там довольно интуитивно понятно)
Примеры использования
Вариант "на клиенте":
Предположим вы хотите перед записью документа проверить правописание определенного реквизита, тогда Вы:
1) В модуле формы создаете процедуру "ПередЗаписью()"
2) В ней вызываете форму обработки, передав в нее структуру параметров (обязательно передайте значение ключа "Текст", иначе не имеет смысла, остальное заполниться по умолчанию). Также передайте владельца формы - ЭтаФорма.
!!! ЕСЛИ ВЫ НЕ ПЕРЕДАДИТЕ ВЛАДЕЛЬЦА ФОРМЫ, ТО ОБРАБОТКА ПОСЧИТАЕТ, ЧТО ВЫ ПРОСТО ЗАХОТЕЛИ ПОТЕСТИРОВАТЬ ЕЁ И СЕБЯ И СПРЯЧЕТ КНОПКИ "ОТМЕНИТЬ" и "ПРИНЯТЬ" !!!
Это сделано специально, но если Вы по какой то причине не хотите передавать владельца, Вы вполне можете закоментить процедуру "ПриОткрытии()" в обработке, это не повлияет на результат, а кнопки будут отображаться всегда.
3) Откройте форму, автоматически пройдет проверка. Если вы передали параметр "ЗакрытьЕслиБезОшибок" - Истина и не обнаружено ошибок, то форма будет сразу закрыта и вернет структуру с результатом проверки.
4) Если были обнаружены ошибки - пользователю будет предложено выбрать верные варианты и согласиться/не согласиться с правками.
5) Нажав кнопку Принять или Отмена (крестик) - форма закроется и вернет владельцу результат проверки или неопределено, соответсвенно.
Вариант "на сервере":
Предположим вы хотите лишить пользователя свободы воли выбора и автоматически исправлять ошибки, скажем перед записью документа:
1) В модуле объекта документа создаете процедуру "ПередЗаписью()"
2) Там создаете объект обработки.
3) У этого объекта вызываете единственную функцию YandexSpeller(), в которую можете передать кучу параметров (ну или только текст на проверку первым параметром, только он обязательный), конфигуратор подскажет параметры.
4) Функция вернет структуру с ошибками и всевозможными данными, естественно включая исправленный текст.
Листинг модуля объекта
Вы можете скопировать данную функцию в общий модуль или куданибудь еще, она вполне самостоятельна и может работать в отрыве от обработки.
Ответы на вопросы
- Q: Подскажите как сделать полосу прокрутки в поле HTML?
- A: В модуле формы, в процедуре "СобратьHTML()" сотрите "overflow: hidden;"
- Q: Почему при вызове формы пропадают кнопки "Принять" и "Отмена"
- A: При создании формы обработки ПроверкиОрфографии из другой формы - не забывайте передавать параметром владельца "ЭтаФорма"
- Q: У меня очень длинные строчки с текстом, как настроить их авто перенос?
- A: В модуле формы, в процедуре "СобратьHTML()" добавьте в блок <style></style> вариации следующего (можете посмотреть в гугле за что отвечает каждая строка).
pre {
white-space: pre-line;
word-wrap: break-word;
word-break: break-all;
width: 100%;
}
UPD 17.11.10
- Изменил разбор XML ответа
- Внешний вид формы
- Добавил проверку на битую кодировку
- Содержание HTML поля теперь IE=11
- При смене значения JS скрипт перекрашивает Select в зависимости от Option
- Поправил ошибку возникающую при использовании словаря и отсутсвии орфографических ошибок
UPD 18.04.23
- Добавил возможность проверять и исправлять Наименования любых справочников. Может быть полезно, если у Вас не очень грамотные менеджеры и надо "починить" постфактум.
TODO:
- При проверке справочника запоминать исправленные слова и проверять из этого соответсвия до проверки яндексом
- Использовать асинхронную проверку
- Отображать статус проверки
- Добавить описание в модуль объекта для типовых конфигураций
- Возможность проверять не только Наименование справочника, но и любой другой строковый реквизит
Буду рад отзывам, комментариям, а также звездочкам :3