morpher.ru 8 (499) 647 86 54
nowhere@morpher.ru
 
 

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

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

Веб-сервис может быть использован для автоматизации следующих задач:

Пример вызова функции склонения через HTTP GET:

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

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

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

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

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

Украинский вариант функции склонения называется GetXmlUkr:

http://api.morpher.ru/WebService.asmx/GetXmlUkr?s=Крутько%20Катерина%20Володимирiвна
  • <?xml version="1.0" encoding="utf-8" ?>
  • <GetXmlUkrResult>
    • <Р>Крутько Катерини Володимирівни</Р>
    • <Д>Крутько Катерині Володимирівні</Д>
    • <З>Крутько Катерину Володимирівну</З>
    • <О>Крутько Катериною Володимирівною</О>
    • <М>Крутько Катерині Володимирівні</М>
    • <К>Крутько Катерино Володимирівно</К>
    • <рід>Жіночий</рід> Тег <рід>
  • </GetXmlUkrResult>

Украинская версия лучше всего справляется с именами, фамилиями и отчествами. Работа над другими типами словосочетаний ведется. Множественное число пока не строится.

Определение рода. Тег <род> (укр. <рід>)

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

<род> <рід>
Мужской Чоловічий
Женский Жіночий
Средний (пока не поддерживается)

Тег <род> доступен только на платных тарифах.

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

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

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

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

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

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

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

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

Разделение строки на фамилию, имя и отчество

Если входная строка распознана как ФИО, то функция GetXml выдает тег <ФИО>, содержащий разбивку строки на фамилию, имя и отчество:

http://api.morpher.ru/WebService.asmx/GetXml?s=Александр%20Пушкин
  • <?xml version="1.0" encoding="utf-8" ?>
  • <xml>
    • <Р>Александра Пушкина</Р>
    • <Д>Александру Пушкину</Д>
    • <В>Александра Пушкина</В>
    • <Т>Александром Пушкиным</Т>
    • <П>Александре Пушкине</П>
    • <ФИО>
      • <Ф>Пушкин</Р>
      • <И>Александр</И>
      • <О/>
    • </ФИО>
  • </xml>

Имя, отчество и фамилия могут фигурировать во входной строке в любом порядке. Если какой-либо из этих компонентов отсутствует, соответствующий тег будет пустой (как <О/> в примере выше).

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

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

http://api.morpher.ru/WebService.asmx/Propis?n=235&unit=рубль (PropisUkr)
  • <?xml version="1.0" encoding="utf-8" ?>
  • <PropisResult>
    • <n>
      • <И>двести тридцать пять</И>
      • <Р>двухсот тридцати пяти</Р>
      • <Д>двумстам тридцати пяти</Д>
      • <В>двести тридцать пять</В>
      • <Т>двумястами тридцатью пятью</Т>
      • <П>двухстах тридцати пяти</П>
    • </n>
    • <unit>
      • <И>рублей</И>
      • <Р>рублей</Р>
      • <Д>рублям</Д>
      • <В>рублей</В>
      • <Т>рублями</Т>
      • <П>рублях</П>
    • </unit>
  • </PropisResult>
  • <?xml version="1.0" encoding="utf-8" ?>
  • <PropisUkrResult>
    • <n>
      • <Н>двісті тридцять п'ять</Н>
      • <Р>двохсот тридцяти п'яти</Р>
      • <Д>двомстам тридцяти п'яти</Д>
      • <З>двісті тридцять п'ять</З>
      • <О>двомастами тридцятьма п'ятьма</О>
      • <М>двохстах тридцяти п'яти</М>
    • </n>
    • <unit>
      • <Н>рублів</Н>
      • <Р>рублів</Р>
      • <Д>рублям</Д>
      • <З>рублів</З>
      • <О>рублями</О>
      • <М>рублях</М>
    • </unit>
  • </PropisUkrResult>

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

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

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

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

Склонение прилагательных по родам

Функция GetAdjectiveGenders склоняет данное ей прилагательное, преобразуя его из мужского рода в женский, средний и во множественное число:

http://api.morpher.ru/WebService.asmx/GetAdjectiveGenders?s=уважаемый
  • <?xml version="1.0" encoding="utf-8" ?>
  • <AdjectiveGenders>
    • <feminine>уважаемая</feminine>
    • <neuter>уважаемое</neuter>
    • <plural>уважаемые</plural>
  • </AdjectiveGenders>

Требования к входному прилагательному:

  • Оно должно быть в мужском роде, в единственном числе.
  • Оно должно быть полным, т.е. "полный", а не "полон".
  • Оно должно быть одним словом.

Данная функция может быть использована для построения таких фраз как:

  • Уважаемый Игорь Иванович
  • Уважаемая Анастасия Петровна
  • в лице директора Петрова А.В., действующего на основании...
  • в лице директора Петровой А.В., действующей на основании...

где род прилагательного (уважаемый) или причастия (действующий) связан с полом названного лица. Пол можно определить с помощью функции определения рода (пола).

Функция образования прилагательных GetAdjectives

Функция GetAdjectives образует прилагательные от названий городов и стран: Москва – московский, Ростов – ростовский, Швеция – шведский, Греция – грецкий греческий.

Пример вызова функции: http://api.morpher.ru/WebService.asmx/GetAdjectives?s=Мытищи

Функция возвращает массив строк. Что они означают, описано здесь.

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

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

http://api.morpher.ru/WebService.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С Работоспособность примера
8.2.9.365 Не работает
8.2.15.300 Работает

Подробнее об использовании веб-сервиса из 1С написано в этой статье с Инфостарта.

C#

Для работы с веб-сервисом из .NET рекомендуется библиотека Morpher.API.dll. Она удобно изолирует вас от излишних подробностей работы с веб-сервисом, представляя функции склонения в виде обычных классов и методов.

Java

Delphi

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

Исправление ошибок склонения

В программу склонения вложены годы программирования и несколько многотысячных словарей. Однако одних только географических названий существуют миллионы, не говоря о личных именах, названиях фирм, торговых марок и других именах собственных. Далеко не все слова и словосочетания подчиняются общим закономерностям и учет нюансов склонения различных наименований – задача весьма трудоемкая. Просто просмотреть один миллион слов и при необходимости исправить ошибки склонения (в среднем, скажем, по одной минуте на слово) займет более 10 лет работы одного человека (8-часовой рабочий день, 5 рабочих дней в неделю).

К счастью, мы живем в эру интернета и можем решить эту задачу сообща. Никто не призывает вас исправлять ошибки по восемь часов в день. Но если вы встретили ошибку в склонении, вы можете легко ее исправить на странице исправления ошибок. Более того, веб-сервис сразу же начнет выдавать новое склонение, но только для вас. Остальные пользователи увидят ваше исправление, как только его проверит модератор. Для этого вы должны быть зарегистрированным пользователем. Это бесплатно.

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

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

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

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

Платный доступ

Если вам нужно склонение больших объемов, зарегистрируйтесь и оплатите подходящий вам тарифный план:

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

Чтобы стать платным пользователем, вам нужно:

  • Зарегистрироваться
  • Войти в раздел Управление подпиской и оплатить доступ по одному из вышеперечисленных тарифов.
  • Добавить к запросу к веб-сервису ваше имя пользователя, указанное при регистрации, и пароль (как это сделать, см. ниже).

Регистрация

Зачем нужна регистрация? Даже если вы пользуетесь веб-сервисом бесплатно, вам все равно рекомендуется зарегистрироваться, потому что:

  • Зарегистрированные пользователи имеют возможность исправлять ошибки склонения.
  • Регистрация поможет вам избежать неожиданной блокировки сервиса. Дело в том, что при отсутствии в запросе логина веб-сервис считает всех пользователей с одним внешним IP одним пользователем, что может привести к скорому исчерпанию лимита на количество запросов в сутки. Этой проблемы можно избежать, просто зарегистрировавшись и добавив в запрос ваше имя пользователя (логин) и пароль.

Передача веб-сервису имени пользователя и пароля

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

  • Добавить к строке запроса параметры username и password:

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

  • При помощи базовой аутентификации HTTP. Для этого к запросу добавляется HTTP-заголовок вида:
    Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
    Имя пользователя и пароль передаются в виде строки "имя_пользователя:пароль", закодированной алгоритмом BASE-64.

    Этот способ используется, в частности, 1С:Предприятием.

  • Через SOAP-заголовок Credentials (пример).

Новости

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



 

Библиотеки

Заметили опечатку? Выделите слово мышкой и нажмите Ctrl-Enter. Система Orphus

© Сергей Слепов, 2003 - 2017. Перепечатка материалов сайта только с разрешения автора.