В предыдущей статье мы проверяли орфографию с помощью веб сервиса от Яндекса. Сегодня мы создадим еще одну обработку с проверкой орфографии, но усложним задачу, если почитать документацию по яндекс спеллер API можно узнать, что проверка текста возможна на 3 языках:
Также можно управлять параметрами проверки: таблицу берм из описания API спеллера. Это кстати неправильно по WSDL мы должны получить полное описание сервиса, а тут есть параметр, который вычислить без чтения документации невозможно, но главное что документация есть.
|
Значение (десятичное) |
Описание (пример) |
|
1 |
Пропускать слова, написанные заглавными буквами, например, "ВПК". |
|
2 |
Пропускать слова с цифрами, например, "авп17х4534". |
|
4 |
Пропускать интернет-адреса, почтовые адреса и имена файлов. |
|
8 |
Подсвечивать повторы слов, идущие подряд. Например, "я полетел на на Кипр". |
|
16 |
Пропускать слова, написанные латиницей, например, "madrid". |
|
32 |
Только проверять текст, не выдавая вариантов для замены. |
|
128 |
Отмечать слова, написанные латиницей, как ошибочные. |
|
256 |
Не использовать словарное окружение (контекст) при проверке. Опция полезна в случаях, когда на вход сервиса передается список отдельных слов. |
|
512 |
Игнорировать неверное употребление ПРОПИСНЫХ/строчных букв, например, в слове "москва". |
Для того чтобы использовать несколько параметров их значение просто надо сложить вместе. Ну и указание формата проверяемого текста : plain - текст без разметки (значение по умолчанию) или html - HTML-текст.
Для установки параметров добавим к нашей предыдущей обработке дополнительную форму с незатейливым название «Настройки» Выглядеть она будет так:

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

Операции checkTexts мы должны передать параметр с типом CheckTextRequest, который состоит из атрибутов: lang, options, format, text.
Код, который осуществляет это следующий:
WSОпределение = Новый WSОпределения("http://speller.yandex.net/services/spellservice?WSDL","", "");
WSПрокси = Новый WSПрокси(WSОпределение,
"http://speller.yandex.net/services/spellservice" , "SpellService", "SpellServiceSoap12" );
// Получаем описание параметра веб сервиса
ТипWSПараметра = WSПрокси.ФабрикаXDTO.Пакеты.Получить("http://speller.yandex.net/services/spellservice").Получить("CheckTextRequest");
//Создаем параметр на основе типа и заполняем значение параметра
WSПараметр = WSПрокси.ФабрикаXDTO.Создать(ТипWSПараметра);
WSПараметр.lang = ЯзыкиПроверки;
WSПараметр.options = Параметры;
WSПараметр.format = ТипТекста;
WSПараметр.text =текст;
РезультатВебОперации = WSПрокси.checkTexts(WSПараметр);
Заметьте, для облегчения понимания работы с веб сервисом я использовал Wsссылку из структуры метаданных конфигурации, но работаем мы с динамической ссылкой.
Параметры передали, теперь можно обрабатывать результат, в предыдущем примере мы это сделали без проблем, запускаем обработку и … у нас выскакивает ошибка, почему? У нас немного не тот формат результата, который возвращается у операции checkText формат результата SpellResult (http://speller.yandex.net/services/spellservice) а у операции checkTexts формат другой CheckTextsResponse (http://speller.yandex.net/services/spellservice),
который состоит уже из SpellResult – ов. Посмотрим, как выглядит ответ сервера в XML формате, воспользовавшись soapUI.

Модифицированный код разбора результата будет такой
для каждого строки1 из РезультатВебОперации.ArrayOfSpellResult.SpellResult цикл для каждого строки из строки1.error цикл стр0= ВариантыНаписания.Добавить(); стр0.слово= строки.word; стр0.Позиция = строки.pos; для каждого вариантыЗамены из строки.s цикл стр=слова.добавить(); стр.слово=строки.word ; стр.ВариантНаписания= вариантыЗамены; стр.строка = строки.row; стр.Позиция = строки.pos; конеццикла; конеццикла; конеццикла;
как видите, мы просто спустились по структуре ХМЛ до уровня, на котором уже есть нужные нам данные.
Пример обработки доступен по ссылке: http://goo.gl/JZ9Ag
Автоматическое резервное копирование: Effector saver 3