Проверка орфографии с помощью API Яндекс

13 3

Довольно часто при наборе текста возникают опечатки, а так же бывает грамотность сотрудников оставляет желать лучшего, поэтому я решил показать сообществу как можно произвести проверку на элементарные ошибка в словах.

Решение не является уникальным, и идеальным, но свою работу делает.

Для работы необходим доступ в интернет.

if MessageBox(CONFIRMATION_CAPTION; "Проверить орфографию?"; 'Да|Нет'; 'Да'; 'Нет') == 'Нет'
   Exit()
endif

// Коды ошибок 
Коды = Массив("Слова нет в словаре.";
       "Повтор слова.";
       "Неверное употребление прописных и строчных букв.";
       "Текст содержит слишком много ошибок. При этом приложение может отправить Яндекс.Спеллеру оставшийся непроверенным текст в следующем запросе.")

if not VarIsNull(Object.Текст)
     Текст = "text=" & ЗамПодстр(trim(Object.Текст); ' '; '+')
    
     // ссылка 
     URL = "http://speller.yandex.net/services/spellservice/checkTexts"
     
     FreeException()
     ExceptionsOff()
 
     XMLHttp = CreateObject("Microsoft.XMLHTTP")
     XMLHttp.Open("POST"; URL; FALSE)
     xmlhttp.setRequestHeader("Content-Type"; "application/x-www-form-urlencoded")
     XMLHttp.Send(Текст)
     ResponseXML = XMLHttp.ResponseXML()
    
     XMLDoc = CreateObject("MSXML.DOMDocument")
     XMLDoc.LoadXML(ResponseXML.xml)
    
     ValutesNode = XMLDoc.selectNodes("ArrayOfSpellResult/SpellResult/error")
     i = 0
     
     while i < ValutesNode.Length
         word = ValutesNode.item(i).selectNodes("word")
         s = ValutesNode.item(i).selectNodes("s")
         code = ValutesNode.item(i).selectNodes("@code").Item(0).NodeValue
                  
         Сообщение = word.item(0).Text & CR & Коды[code - 1] & CR & "Выберите вариант для замены:"
         Варианты = "Пропустить"
         
         
         // Может быть несколько вариантов замены
         q = 0
         while q < s.Length
             Варианты = s.item(q).Text & "|" & Варианты      
             q = q + 1
         endwhile
         
         Результат = MessageBox(ATTENTION_CAPTION; Сообщение; Варианты)
          
         if (Результат <<>> 'НЕУДАЧА: ESC') AND (Результат <<>> 'Пропустить') 
            Object.Текст = ЗамПодстр(Object.Текст; word.item(0).Text; Результат)
         endif 
                
         i = i+1  
     endwhile
     ExceptionsOn()
     ShowMessage("Проверка окончена")
endif

 

Для проверки я сделал кнопку по нажатию на которую проверяется объект Object.Текст, как использовать данное решение, решать вам.

Существуют другие решения для проверки правописания, но они платные, и требуют установки словаря на каждое рабочее место, примером такого решения является Microsoft Office.

13
Авторизуйтесь, чтобы оценить материал.
1
Михаил Извеков

Троллейбус из буханки хлеба.

Андрей Подкин
Существуют другие решения для проверки правописания, но они платные
Да ладно?!
Существует огромное количество бесплатных систем проверки орфографии. Например, IS-Builder использует одну из них - hunspell.
Степан Мурашов

Я просто оставлю здесь пример проверки орфографии произвольного текста средствами DIRECTUM, без всяких внешних библиотек:

EditorForm = CreateEditor()
EditorForm.Editor.Text = "Это мой текс для проверки орфаграфии"
EditorForm.Editor.CheckSpelling(Sender.Connection)

Авторизуйтесь, чтобы написать комментарий