Мой Морфер
 

Веб-сервис склонения по падежам «Морфер» 2.0

Веб-сервис выполняет склонение слов и словосочетаний на русском языке, определение рода (пола), пропись чисел и согласование единицы измерения с числительным (1 новое письмо, 2 новых письма, 5 новых писем...)

Пример вызова через HTTP GET:

http://morpher.ru/WebService.asmx/GetXml?s=Соединенное%20королевство

В ответ получим:

  • <?xml version="1.0" encoding="utf-8" ?>
  • <xml>
    • <Р>Соединенного королевства</Р>
    • <Д>Соединенному королевству</Д>
    • <В>Соединенное королевство</В>
    • <Т>Соединенным королевством</Т>
    • <П>Соединенном королевстве</П>
    • <П-о>о Соединенном королевстве</П-о>
    • <род>Средний</род> Тег <род>
    • <множественное>
      • <И>Соединенные королевства</И>
      • <Р>Соединенных королевств</Р>
      • <Д>Соединенным королевствам</Д>
      • <В>Соединенные королевства</В>
      • <Т>Соединенными королевствами</Т>
      • <П>Соединенных королевствах</П>
      • <П-о>о Соединенных королевствах</П-о>
    • </множественное>
    • <где>в Соединенном королевстве</где> Теги <где>, <куда> и <откуда>
    • <куда>в Соединенное королевство</куда>
    • <откуда>из Соединенного королевства</откуда>
  • </xml>

s – строка для склонения – должна быть в кодировке UTF-8 и перед вставкой в URL должна быть закодирована при помощи URL Encoding.

n – количество единиц, выраженных параметром s; необязательный параметр, см. Пропись чисел и согласование с числом.

Если у слова нет какой-либо формы, то соответствующий тег будет пустой, например: теля, мзда. Если у слова нет множественного числа или оно уже во множественном, то тег <множественное> будет отсутствовать: сутки, ножницы. Множественное число не выдается также для фамилий, имен и отчеств.

Определение рода. Тег <род>

Тег <род> содержит автоматически определенный род. Возможные значения тега:

  • Мужской
  • Женский
  • Средний

Если входное словосочетание стоит во множественном числе, то тег будет пустым: <род/>.

Предложный падеж

Предложный падеж представлен в трех вариантах:

  • <П> – без предлога
  • <П-о> – с предлогом О/ОБ/ОБО, предлог выбирается автоматически
  • <где> – с предлогом В/ВО/НА: в Москве, во Франции, в Крыму, на Урале.

Рекомендации по выбору варианта предложного падежа

Теги <где>, <куда> и <откуда>

Содержат предложно-падежные формы, отвечающие на соответствующие вопросы. Используются в основном для склонения географических названий, например:

<где><куда><откуда>
в Москвев Москвуиз Москвы
в Израилев Израильиз Израиля
во Францииво Франциюиз Франции
на Уралена Уралс Урала

Пропись чисел и согласование с числом (метод Propis)

Метод Propis решает две родственные задачи: получение прописи числа (тысяча сто двадцать пять) и согласование единицы измерения с предшествующем числом (1 попугай, 2 попугая, 5 попугаев):

http://morpher.ruWebService.asmx/Propis?n=235&unit=рубль
  • <?xml version="1.0" encoding="utf-8" ?>
  • <PropisResult>
    • <n>
      • <И>двести тридцать пять</И>
      • <Р>двухсот тридцати пяти</Р>
      • <Д>двумстам тридцати пяти</Д>
      • <В>двести тридцать пять</В>
      • <Т>двумястами тридцатью пятью</Т>
      • <П>двухстах тридцати пяти</П>
    • </n>
    • <unit>
      • <И>рублей</И>
      • <Р>рублей</Р>
      • <Д>рублям</Д>
      • <В>рублей</В>
      • <Т>рублями</Т>
      • <П>рублях</П>
    • </unit>
  • </PropisResult>

Комбинируя соответствующие падежные формы n и unit, можно получить вывод «суммы прописью» на любой вкус:

  • 235 рублей
  • Двести тридцать пять рублей
  • 235 (двести тридцать пять) рублей и т.п.

Комбинировать имеет смысл только соответствующие падежные формы n и unit – именительный с именительным, родительный с родительным и т.д. Например, для получения фразы "в размере N рублей (долларов, евро...)", берем родительный падеж (<Р>): в размере + двухсот тридцати пяти + рублей.

См. также примеры в описании функции Пропись из Morpher.dll для .NET, которая лежит в основе этого веб-сервиса.

Обработка ошибок

В случае ошибки веб-сервис возвращает код ошибки и текстовое сообщение. Пример запроса и ответа:

http://morpher.ruWebService.asmx/GetXml?s=waffle
  • <?xml version="1.0" encoding="utf-8" ?>
  • <error>
    • <code>5</code>
    • <message>Не найдено русских слов.</message>
  • </error>

Вышеуказанный XML возвращается только для HTTP-запросов GET и POST. SOAP-клиенты получат SOAP fault.

Полный и актуальный список кодов ошибок:

Код Значение
1 Превышен лимит на общее количество запросов в сутки.
2 Превышен лимит на количество одинаковых запросов в сутки. Реализуйте кеширование.
3 IP заблокирован.
4 Склонение числительных в GetXml не поддерживается. Используйте метод Propis.
5 Не найдено русских слов.
6 Не указан обязательный параметр s.
7 Необходимо оплатить услугу.
8 Пользователь с таким ID не зарегистрирован.
9 Неправильное имя пользователя или пароль.

Примеры

Пример внешней обработки: Morpher.epf. Чтобы открыть обработку, просто перетащите Morpher.epf в 1С:Предприятие.

Пример работает не во всех версиях 1С:

Версия 1С Работоспособность примера
8.2.9.365 Не работает
8.2.15.300 Работает

C#

FacebookStory.zip: генерирует параллельные варианты текста на двух языках, русском и английском, используя веб-сервис.

WebServiceSample.zip: демонстрирует вызовы методов GetXml и Propis, авторизацию и обработку ошибок.

Примеры на C# можно открыть при помощи бесплатной среды разработки Visual Web Developer 2010 Express.

PHP и другие языки

В комментариях к старой версии веб-сервиса есть несколько примеров вызова из PHP и Delphi. Если вам доведется адаптировать эти примеры для новой версии веб-сервиса, поделитесь кодом с другими в комментариях.

Ограничения бесплатной версии

Бесплатное использование веб-сервиса имеет следующие ограничения:

  • Отсутствуют теги <П-о>, <где>, <куда>, <откуда> и <род>.
  • Максимум 1000 запросов в сутки. Эта число может быть изменено в будущем – следите за сообщениями внизу данной страницы. Функция GetDailyQueryLimit возвращает действующее на данный момент значение.
  • Максимум 100 одинаковых запросов в сутки. Данное ограничение не действует на запросы с параметром s равным "тест".

Относительно ограничений на количество запросов в сутки следует заметить, что неудачные запросы (отклоненные по причине превышения лимита) также учитываются при расчете суточного количества. Поэтому если продолжать посылать запросы после превышения лимита, вы можете так никогда и не получить доступ. Подождите сутки и доступ сам собой восстановится. Коды ошибок: 1 (превышен лимит на общее количество запросов в сутки) и 2 (лимит на количество одинаковых запросов в сутки).

Чтобы снять эти ограничения, зарегистрируйтесь:

Регистрация

Чтобы снять ограничения бесплатной версии, зарегистрируйтесь и оплатите доступ по одному из следующих тарифов:

  • Тариф «Бейсик» – снимаются только ограничения на теги, до 1000 запросов в сутки, 300 руб/мес.
  • Тариф «Профессионал» – снимаются ограничения на теги, до 10 тысяч запросов в сутки, 500 руб/мес.
  • Тариф «Анлимитед» – без ограничений, 1000 руб/мес.

Авторизация

Чтобы индентифицировать себя как зарегистрированного пользователя, необходимо передать веб-сервису имя пользователя и пароль, которые вы указали при регистрации на сайте. SOAP-клиенты передают эти параметры в HTTP-заголовке Credentials (пример). При вызове через URL имя пользователя и пароль указываются в параметрах username и password:

http://morpher.ru/WebService.asmx/GetXml?s=Мальдивы&username=vasya&password=secret


Комментарии

unkmas 19.01.2012 06:59 UTC

У вас в описании указан код ошибки 1(превышено число запросов в сутки).
В реальности - код этой ошибки - 0.



Сергей Слепов 20.01.2012 00:20 UTC

В реальности вследствие ошибки в коде коды всех ошибок были нулевые. Сейчас реальность исправлена в соответствии с описанием. :)


Сергей Слепов 21.01.2012 22:59 UTC

Добавлен полный список кодов ошибок. Он берется напрямую из базы и поэтому постоянно актуален.


Илья 03.02.2012 14:16 UTC

Почему в примере facebookstory с использованием вэб-сервиса не работает вэб-сервис morpher2?


Сергей Слепов 13.02.2012 02:29 UTC

Изменения в API веб-сервиса:
Добавлены три новых тега: <где>, <куда> и <откуда> для склонения географических названий. Тег <Р-234> окончательно упразднен, как сообщалось ранее. Тег <П-в> помечен на упразднение – его заменил тег <где>.



Сергей Слепов 07.04.2012 16:46 UTC

Пример вызова веб-сервиса из C# FacebookStory теперь опять работает.


Сергей Слепов 08.04.2012 20:14 UTC

В веб-сервис внесен ряд изменений с целью сделать его более «съедобным» для SOAP-клиентов.

Изменилась обработка ошибок – вместо XML теперь возвращается SOAP Fault. В случае HTTP-запроса, как и раньше, возвращается XML с тегами <code> и <message>.

Параметр n метода GetXml ранее отсутствовал в WSDL и воспринимался веб-сервисом только через строку HTTP-запроса. Теперь этот метод разбит на два – GetXml (собственно склонение) и Propis (получение прописи числа / согласование единицы измерения с числом). В методе GetXml оставлен один параметр (s), а у нового метода Propis два параметра (n – число и unit – единица измерения). Оба метода теперь адекватно представлены в WSDL со всеми своими параметрами.

Параметры авторизации, ранее передававшиеся только через HTTP-запрос, теперь также могут быть переданы в SOAP-заголовке.

Добавлен пример на C#, демонстрирующий передачу вызов различных методов веб-сервиса, передачу параметров авторизации и обработку ошибок: WebServiceSample.zip



Alzasr 26.04.2012 08:10 UTC

Пример получения винительного падежа на PHP (учтите, что кодировка UTF):
$file = fopen('http://morpher.ru/WebService.asmx/GetXml?s='.$this->city,'r');
$data = fread($file,1024);
preg_match('#<В>(.*)</В>#isU', $data, $out);
if(isset($out[1]) && $out[1]) $vinit = trim($out[1]);
else $vinit=false;

У меня все это запихано в метод класса и производиться кеширование в БД. Можно использовать DOM для XML, но мне кажется здесь это неактуально.



Сергей Слепов 29.04.2012 22:44 UTC

Появилась возможность авторизации по логину и паролю. Зарегистрированные пользователи теперь могут оплачивать и продлевать доступ к веб-сервису самостоятельно.

Зарегистрироваться



Сергей Слепов 15.05.2012 09:54 UTC

Добавлен пример внешней обработки для вызова веб-сервиса склонения из 1С:Предприятия.





2003 - 2012 © Сергей Слепов