logo

[ELMA3] Автоматическое склонение слов с использованием внешнего сервиса

В данной статье приведен пример сценария, использующего внешний сервис (http://morpher.ru) для склонения слов (в нашем случае – ФИО пользователя).

В примере создаётся GET-запрос к сервису https://ws3.morpher.ru/russian/declension?s="имя фамилия". В ответ приходит xml со склоненными ФИО, в которой ищется Родительный падеж.

Данный сервис позволяет бесплатно выполнять 1000 запросов в сутки.

Использование описанного ниже метода доступно для всех версий системы ELMA.

Затем в основном окне редактора сценариев добавьте следующий код сценария:

Пространство имен:

using System.IO;
using System.Net;
using System.Web;

Текст сценария:

//Создаем метод
private string GetGenetiveFromWeb(string str)
            str =  context.InputString;
            var genitive = str;
             
            //отправлем запрос на сервер
            WebRequest request = WebRequest.Create ("https://ws3.morpher.ru/russian/declension?s="+ str);
             
            //время ожидания запроса 3 сек.
            request.Timeout = 300;                       
            WebResponse response;
             
            // Запрос отправлен
            try {
                 
                response = request.GetResponse();
            }
            // Ошибка отправки запроса на сервер
             
            catch (Exception e) 
            {
                context.OutputString = "Ошибка отправки запроса на сервер";
                return genitive;
            
            Stream dataStream = response.GetResponseStream ();
            StreamReader reader = new StreamReader (dataStream);
            string responseFromServer = reader.ReadToEnd ();
             
            //Считать родительный падеж
            try {
                using (XmlReader Xreader = XmlReader.Create (new StringReader (responseFromServer))) 
                {
                    Xreader.ReadToFollowing ("Р");
                    genitive = Xreader.ReadElementContentAsString();
                    context.OutputString = genitive;
                }
            //Ошибка считания родительного падежа 
            catch (Exception e) {
                context.OutputString = "Не удалось считать родительный падеж";
                reader.Close ();
                response.Close ();
                return genitive;
            }
                 
        }

/// <summary>
/// Вызов метода GetGenetiveFromWeb
/// </summary>
/// <param name="context">Контекст процесса</param>
public virtual void ppr (Context context)           
            //вызов метода GetGenetiveFromWeb
            context.Stroka = GetGenetiveFromWeb(context.Poljzovatelj.FullName.ToString());
            // где: context.Stroka - тип переменной строка,  
            //      context.Poljzovatelj - тип переменной пользователь