Проверка орфографии с помощью 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.

Михаил Извеков

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

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

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

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

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