Веб-сервис склонения по падежам «Морфер» 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 |
Неправильное имя пользователя или пароль. |
| |
Примеры
1С
Пример внешней обработки: 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С:Предприятия.
|