[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 - тип переменной пользователь