Веб-сервис «Морфер» 3.0
Веб-сервис предназначен для склонения по падежам слов и словосочетаний на русском, украинском и казахском языках.
Он бесплатный (с ограничениями), а для больших объемов есть платный доступ.
Веб-сервис реализует следующие функции:
На казахском языке:
Также на этой странице:
Если у вас почему-либо недоступен ws3.morpher.ru,
попробуйте зеркало ws3.morpher.me.
Склонение по падежам
Пример вызова функции склонения через HTTP GET:
https://ws3.morpher.ru/russian/declension?s=Соединенное%20королевство
В ответ получим:
<xml>
<Р>Соединенного королевства</Р>
<Д>Соединенному королевству</Д>
<В>Соединенное королевство</В>
<Т>Соединенным королевством</Т>
<П>Соединенном королевстве</П>
<П_о>о Соединенном королевстве</П_о>
<род>Средний</род> <!-- [Тег <род>](#rod) -->
<множественное>
<И>Соединенные королевства</И>
<Р>Соединенных королевств</Р>
<Д>Соединенным королевствам</Д>
<В>Соединенные королевства</В>
<Т>Соединенными королевствами</Т>
<П>Соединенных королевствах</П>
<П_о>о Соединенных королевствах</П_о>
</множественное>
<где>в Соединенном королевстве</где> <!-- [Теги <где>, <куда> и <откуда>](#locative) -->
<куда>в Соединенное королевство</куда>
<откуда>из Соединенного королевства</откуда>
</xml>
XSD ответа
В случае json запроса:
{
"Р": "Соединенного королевства",
"Д": "Соединенному королевству",
"В": "Соединенное королевство",
"Т": "Соединенным королевством",
"П": "Соединенном королевстве",
"П_о": "о Соединенном королевстве",
"род": "Средний",
"множественное" : {
"И": "Соединенные королевства",
"Р": "Соединенных королевств",
"Д": "Соединенным королевствам",
"В": "Соединенные королевства",
"Т": "Соединенными королевствами",
"П": "Соединенных королевствах",
"П_о": "о Соединенных королевствах",
},
"где": "в Соединенном королевстве",
"куда": "в Соединенное королевство",
"откуда": "из Соединенного королевства"
}
s – строка для склонения – должна быть в кодировке UTF-8 и перед вставкой в URL должна быть закодирована
при помощи URL Encoding.
Если у слова нет какой-либо формы, то соответствующий тег будет пустой, например:
теля,
мзда.
Если у слова нет множественного числа или оно уже во множественном, то тег <множественное>
будет отсутствовать:
сутки,
ножницы.
Множественное число не выдается также для фамилий, имен и отчеств.
Украинский вариант функции склонения ukrainian/declension:
https://ws3.morpher.ru/ukrainian/declension?s=Крутько%20Катерина%20Володимирiвна
<GetXmlUkrResult>
<Р>Крутько Катерини Володимирівни</Р>
<Д>Крутько Катерині Володимирівні</Д>
<З>Крутько Катерину Володимирівну</З>
<О>Крутько Катериною Володимирівною</О>
<М>Крутько Катерині Володимирівні</М>
<К>Крутько Катерино Володимирівно</К>
<рід>Жіночий</рід> <!-- [Тег <рід>](#rod) -->
</GetXmlUkrResult>
XSD ответа
Украинская версия лучше всего справляется с именами, фамилиями и отчествами. Работа над другими типами словосочетаний ведется.
Множественное число пока не строится.
Тег <род>
(в украинском варианте <рід>
) содержит автоматически определенный род.
Возможные значения тега:
<род> |
<рід> |
Мужской |
Чоловічий |
Женский |
Жіночий |
Средний |
(пока не поддерживается) |
Тег <род>
доступен только на платных тарифах.
Если входное словосочетание стоит во множественном числе, то тег будет пустым: <род/>
.
Флаги для разрешения неоднозначностей
Есть слова, которые могут склоняться по-разному, например:
- фамилия Резник склоняется у мужчин и не склоняется у женщин;
- Ростов в творительном падеже будет Ростовым, если это фамилия, и Ростовом, если это город;
- тестер в винительном падеже будет тестера, если это человек, и тестер, если имеется в виду прибор.
Для повышения качества склонения вы можете сообщить веб-сервису дополнительную информацию через флаги:
Основная статья: Снятие неоднозначности дополнительными признаками
Таблица поддерживаемых флагов для russian/declension:
Флаг |
Описание |
Feminine |
Женский род |
Masculine |
Мужской род |
Animate |
Одушевлённое |
Inanimate |
Неодушевлённое |
Common |
Нарицательное |
Name |
ФИО |
Таблица поддерживаемых флагов для ukrainian/declension:
Флаг |
Описание |
Feminine |
Женский род |
Masculine |
Мужской род |
Neuter |
Средний род |
Plural |
Множественное число |
Несколько флагов можно передать через запятую:
https://ws3.morpher.ru/russian/declension?s=Слепов Сергей Николаевич&flags=name,masculine
Предложный падеж
Предложный падеж представлен в трех вариантах:
<П>
– без предлога
<П_о>
– с предлогом О/ОБ/ОБО, предлог выбирается автоматически
<где>
– с предлогом В/ВО/НА: в Москве, во Франции, в Крыму, на Урале.
Рекомендации по выбору варианта предложного падежа
Теги <где>, <куда> и <откуда>
Содержат предложно-падежные формы, отвечающие на соответствующие вопросы. Используются в основном для склонения географических названий, например:
<где> |
<куда> |
<откуда> |
в Москве |
в Москву |
из Москвы |
в Израиле |
в Израиль |
из Израиля |
во Франции |
во Францию |
из Франции |
на Урале |
на Урал |
с Урала |
Разделение строки на фамилию, имя и отчество
Если входная строка распознана как ФИО, то функция declension выдает тег <ФИО>
,
содержащий разбивку строки на фамилию, имя и отчество:
https://ws3.morpher.ru/russian/declension?s=Александр%20Пушкин
<xml>
<Р>Александра Пушкина</Р>
<Д>Александру Пушкину</Д>
<В>Александра Пушкина</В>
<Т>Александром Пушкиным</Т>
<П>Александре Пушкине</П>
<ФИО>
<Ф>Пушкин</Р>
<И>Александр</И>
<О/>
</ФИО>
</xml>
Имя, отчество и фамилия могут фигурировать во входной строке в любом порядке. Если какой-либо из этих компонентов отсутствует,
соответствующий тег будет пустой (как <О/>
в примере выше).
Функция russian/declension может возвращать следующие ошибки
(см. также Обработка ошибок):
Код |
Статус |
Значение |
Пример |
4 |
495 |
Склонение числительных в declension не поддерживается. Используйте метод spell. |
?s=три |
5 |
496 |
Не найдено русских слов. |
?s=waffle |
6 |
400 |
Не указан обязательный параметр: s. |
?s= |
12 |
494 |
Указаны неправильные флаги. |
?s=кошка&flags=invalid |
Функция ukrainian/declension может возвращать следующие ошибки:
Код |
Статус |
Значение |
Пример |
5 |
496 |
Не найдено украинских слов. |
?s=waffle |
6 |
400 |
Не указан обязательный параметр: s. |
?s= |
12 |
494 |
Указаны неправильные флаги. |
?s=кішка&flags=invalid |
Пропись чисел и согласование с числом (spell)
Функция russian/spell (ukrainian/spell) решает две родственные задачи:
получение прописи числа (тысяча сто двадцать пять)
и согласование единицы измерения с предшествующим числом (1 попугай, 2 попугая, 5 попугаев):
https://ws3.morpher.ru/russian/spell?n=235&unit=рубль
(ukrainian/spell)
<PropisResult>
<n>
<И>двести тридцать пять</И>
<Р>двухсот тридцати пяти</Р>
<Д>двумстам тридцати пяти</Д>
<В>двести тридцать пять</В>
<Т>двумястами тридцатью пятью</Т>
<П>двухстах тридцати пяти</П>
</n>
<unit>
<И>рублей</И>
<Р>рублей</Р>
<Д>рублям</Д>
<В>рублей</В>
<Т>рублями</Т>
<П>рублях</П>
</unit>
</PropisResult>
|
<PropisUkrResult>
<n>
<Н>двісті тридцять п'ять</Н>
<Р>двохсот тридцяти п'яти</Р>
<Д>двомстам тридцяти п'яти</Д>
<З>двісті тридцять п'ять</З>
<О>двомастами тридцятьма п'ятьма</О>
<М>двохстах тридцяти п'яти</М>
<К>двісті тридцять п'ять</К>
</n>
<unit>
<Н>рублів</Н>
<Р>рублів</Р>
<Д>рублям</Д>
<З>рублів</З>
<О>рублями</О>
<М>рублях</М>
<К>рублів</К>
</unit>
</PropisUkrResult>
|
XSD ответа
|
XSD ответа
|
Комбинируя соответствующие падежные формы n и unit, можно получить вывод «суммы прописью» на любой вкус:
- 235 рублей
- Двести тридцать пять рублей
- 235 (двести тридцать пять) рублей и т.п.
Комбинировать имеет смысл только соответствующие падежные формы n и unit – именительный с именительным, родительный с родительным и т.д.
Например, для получения фразы "в размере N рублей (долларов, евро...)", берем родительный падеж (<Р>
): в размере + двухсот тридцати пяти + рублей.
См. также примеры в описании функции Пропись из Morpher.dll для .NET, которая лежит в основе этого веб-сервиса.
Функция russian/spell может возвращать следующие ошибки:
Код |
Статус |
Значение |
Пример |
5 |
496 |
Не найдено русских слов. |
?n=10&unit=rub |
Функции russian/spell и ukrainian/spell могут возвращать следующие ошибки:
Код |
Статус |
Значение |
Пример |
6 |
400 |
Не указан обязательный параметр: unit. |
?n=100&unit=+++ |
Пропись чисел в виде порядковых числительных (spell-ordinal)
Функция russian/spell-ordinal похожа на функцию russian/spell, но возвращает пропись числа в форме порядкового числительного:
https://ws3.morpher.ru/russian/spell-ordinal?n=5&unit=колесо
<PropisResult>
<n>
<И>пятое</И>
<Р>пятого</Р>
<Д>пятому</Д>
<В>пятое</В>
<Т>пятым</Т>
<П>пятом</П>
</n>
<unit>
<И>колесо</И>
<Р>колеса</Р>
<Д>колесу</Д>
<В>колесо</В>
<Т>колесом</Т>
<П>колесе</П>
</unit>
</PropisResult>
XSD ответа такой же, как и для функции russian/spell.
Функция russian/spell-ordinal может возвращать следующие ошибки:
Пропись дат (spell-date)
Функция russian/spell-date склоняет по падежам дату, заданную в формате ГГГГ-ММ-ДД:
https://ws3.morpher.ru/russian/spell-date?date=2019-06-29
<PropisResult>
<И>двадцать девятое июня две тысячи девятнадцатого года</И>
<Р>двадцать девятого июня две тысячи девятнадцатого года</Р>
<Д>двадцать девятому июня две тысячи девятнадцатого года</Д>
<В>двадцать девятое июня две тысячи девятнадцатого года</В>
<Т>двадцать девятым июня две тысячи девятнадцатого года</Т>
<П>двадцать девятом июня две тысячи девятнадцатого года</П>
</PropisResult>
XSD ответа
Функция russian/spell-date может возвращать следующие ошибки:
Код |
Статус |
Значение |
Пример |
6 |
400 |
Не указан обязательный параметр: date. |
?date=+++ |
8 |
499 |
Дата указана в некорректном формате. |
?date=01-01-2020 |
Склонение прилагательных по родам (russian/genders)
Функция russian/genders склоняет данное ей прилагательное, преобразуя его из мужского рода в женский, средний и во множественное число:
https://ws3.morpher.ru/russian/genders?s=уважаемый
<AdjectiveGenders>
<feminine>уважаемая</feminine>
<neuter>уважаемое</neuter>
<plural>уважаемые</plural>
</AdjectiveGenders>
XSD ответа
Требования к входному прилагательному:
- Оно должно быть в мужском роде, в единственном числе.
- Оно должно быть полным, т.е. "полный", а не "полон".
- Оно должно быть одним словом. Внутри слова допустимы дефис и апостроф:
рабоче-крестьянский, Кот-д'Ивуарский.
Вокруг слова допустимы пробелы, кавычки и другие знаки.
Если хотя бы одно из этих требований не выполняется,
то функция возвращает строку ERROR
во всех трех тегах - feminine, neuter, plural.
Данная функция может быть использована для построения таких фраз как:
- Уважаемый Игорь Иванович
- Уважаемая Анастасия Петровна
- в лице директора Петрова А.В., действующего на основании...
- в лице директора Петровой А.В., действующей на основании...
где род прилагательного (уважаемый) или причастия (действующий) связан с полом названного лица.
Пол можно определить с помощью функции определения рода (пола).
Функция russian/genders может возвращать следующие ошибки:
Код |
Статус |
Значение |
Пример |
6 |
400 |
Не указан обязательный параметр: s. |
?s=+++ |
Функция образования прилагательных russian/adjectivize
Функция adjectivize
образует прилагательные от названий городов и стран:
Москва – московский,
Ростов – ростовский,
Швеция – шведский,
Греция – грецкий греческий.
Пример вызова функции:
https://ws3.morpher.ru/russian/adjectivize?s=Мытищи
XSD ответа
Функция возвращает массив строк. Что они означают, описано здесь.
Функция russian/adjectivize может возвращать следующие ошибки:
Код |
Статус |
Значение |
Пример |
6 |
400 |
Не указан обязательный параметр: s. |
?s=+++ |
Расстановка ударений в текстах
POST-запрос russian/addstressmarks
расставляет ударения в текстах на русском языке:
Три деви́цы под окно́м
Пря́ли по́здно вечерко́м.
Ударение отмечается символом с кодом U+0301, который вставляется сразу после ударной гласной.
Односложные слова не получают знака ударения, за исключением случаев, когда предлог или частица
несет на себе ударение: за́ руку, не́ за что.
Варианты прочтения разделяются вертикальной чертой, например, предложение "Белки питаются белками"
превратится в "Бе́лки|Белки́ пита́ются бе́лками|белка́ми".
Текст посылается в теле запроса с заголовком Content-Type: text/plain; charset=utf-8
Результат возвращается в виде XML:
<?xml version="1.0" encoding="utf-8"?>
<string>Бале́т Петра́ Чайко́вского "Щелку́нчик"<string>
или JSON:
"Бале́т Петра́ Чайко́вского \"Щелку́нчик\""
Код |
Статус |
Значение |
6 |
400 |
Текст должен передаваться в теле запроса.
|
Тарификация этой функции имеет особенности.
Склонение по падежам, числам и лицам на казахском языке
https://ws3.morpher.ru/qazaq/declension?s=Нұрсултан Әбішұлы Назарбаев
<І>Нұрсултан Әбішұлы Назарбаевтың</І>
<Б>Нұрсултан Әбішұлы Назарбаевқа</Б>
<Т>Нұрсултан Әбішұлы Назарбаевты</Т>
<Ш>Нұрсултан Әбішұлы Назарбаевтан</Ш>
<Ж>Нұрсултан Әбішұлы Назарбаевта</Ж>
<К>Нұрсултан Әбішұлы Назарбаевпен</К>
<көпше>
<A>Нұрсултан Әбішұлы Назарбаевтар</A>
<І>Нұрсултан Әбішұлы Назарбаевтартың</І>
<Б>Нұрсултан Әбішұлы Назарбаевтарқа</Б>
<Т>Нұрсултан Әбішұлы Назарбаевтарты</Т>
<Ш>Нұрсултан Әбішұлы Назарбаевтартан</Ш>
<Ж>Нұрсултан Әбішұлы Назарбаевтарта</Ж>
<К>Нұрсултан Әбішұлы Назарбаевтарпен</К>
</көпше>
Функция qazaq/declension может возвращать следующие ошибки:
Код |
Статус |
Значение |
Пример |
6 |
400 |
Не указан обязательный параметр: s. |
?s=+++ |
5 |
496 |
Не найдено казахских слов. |
?s=waffle |
Веб-сервис позволяет получить ответ в формате XML или JSON. Указать формат ответа можно:
По умолчанию возвращается XML.
Обработка ошибок
В случае ошибки веб-сервис возвращает код ошибки и текстовое сообщение.
Пример запроса и ответа:
https://ws3.morpher.ru/russian/declension?s=waffle
<error>
<code>5</code>
<message>Не найдено русских слов.</message>
</error>
XSD ответа
Следующие ошибки может вернуть любая функция сервиса "Морфер":
Код |
Статус |
Значение |
1 |
402 |
Превышен лимит на количество запросов в сутки. Перейдите на следующий тарифный план. |
3 |
403 |
IP заблокирован. |
9 |
498 |
Данный токен не найден. |
10 |
497 |
Неверный формат токена. |
Кроме того, отдельные функции могут возвращать специфичные для них ошибки.
Исправление ошибок склонения
В программу склонения вложены годы программирования и несколько многотысячных словарей.
Однако одних только географических названий существуют миллионы, не говоря о личных именах, названиях фирм, торговых марок и других именах собственных.
Далеко не все слова и словосочетания подчиняются общим закономерностям и учет нюансов склонения различных наименований – задача весьма трудоемкая.
Просто просмотреть один миллион слов и при необходимости исправить ошибки склонения (в среднем, скажем, по одной минуте на слово) займет более 10 лет работы одного человека (8-часовой рабочий день, 5 рабочих дней в неделю).
К счастью, мы живем в эру интернета и можем решить эту задачу сообща. Никто не призывает вас исправлять ошибки по восемь часов в день.
Но если вы встретили ошибку в склонении, вы можете легко ее исправить на странице исправления ошибок.
Более того, веб-сервис сразу же начнет выдавать новое склонение, но только для вас.
Остальные пользователи увидят ваше исправление, как только его проверит модератор.
Для этого вы должны быть зарегистрированным пользователем. Это бесплатно.
Страница «Работа над ошибками»
Пользовательский словарь (russian/userdict, ukrainian/userdict)
Веб-сервис поддерживает исправление склонения по требованию пользователя.
Для этого имеются 3 метода:
Функция |
Метод |
Значение |
/russian/userdict
/ukrainian/userdict
|
[GET] |
Получить список всех добавленных исправлений |
/russian/userdict
/ukrainian/userdict |
[POST] |
Добавить или изменить исправление |
/russian/userdict
/ukrainian/userdict |
[DELETE] |
Удалить исправление |
Все функции пользовательского словаря требуют указания токена
и при его отсутствии возвращают ошибку с кодом 25 и статусом 400 или ошибку с кодом 9 и статусом 498, если указанный токен не найден.
Исправления видны только пользователю с указанным токеном.
Добавить или изменить исправление [POST]
Для добавления или изменения исправления нужно отправить POST запрос на /russian/userdict
(/ukrainian/userdict для украинского языка соответственно).
Тело запроса должно быть представлено в формате
application/x-www-form-urlencoded,
который используется по умолчанию для POST-запросов.
Например, если мы хотим изменить дательный падеж для слова "Кошка",
то тело запроса будет иметь вид:
Для русского языка:
И=Кошка&Д=Пантере
Для украинского языка:
Н=Кiшка&Д=Пантерi
Для добавления исправления обязательно нужно указывать именительный падеж и хотя бы еще одну падежную форму.
Названия параметров (russian/userdict)
Параметр |
Падеж |
И |
Именительный |
Р |
Родительный |
Д |
Дательный |
В |
Винительный |
Т |
Творительный |
П |
Предложный с предлогом О/ОБ/ОБО или без |
М |
Местный без предлога |
М_И |
Именительный (множественное число) |
М_Р |
Родительный (множественное число) |
М_Д |
Дательный (множественное число) |
М_В |
Винительный (множественное число) |
М_Т |
Творительный (множественное число) |
М_П |
Предложный (множественное число) с предлогом О/ОБ/ОБО или без |
М_М |
Местный (множественное число) без предлога |
Названия параметров (ukrainian/userdict)
Параметр |
Падеж |
Н |
Називний |
Р |
Родовий |
Д |
Давальний |
З |
Знахiдний |
О |
Орудний |
М |
Мiсцевий |
К |
Кличний |
Повторный вызов метода с уже существующим исправлением добавит или изменит текущее исправление.
Если мы захотим к нашему исправлению "Кошка" добавить еще родительный падеж, нам достаточно будет передать "И=Кошка&Р=Пантеры".
В итоге останется старое исправление на дательный падеж и добавится новое на родительный.
Если мы вызовем метод еще раз с дательным или родительным падежом, мы изменим текущее исправление для этих падежей.
Метод POST может возвращать следующие ошибки:
Код |
Статус |
Значение |
6 |
400 |
Не указан обязательный параметр: И. |
6 |
400 |
Нужно указать хотя бы одну косвенную форму. |
Получить список исправлений [GET]
Для того чтобы получить список всех исправлений, нужно послать GET запрос на
/russian/userdict
или
/ukrainian/userdict, указав токен.
Пример ответа:
<?xml version="1.0" encoding="utf-8"?>
<dictionary>
<Entry>
<singular>
<И>Кошка</И>
<Р>Пантеры</Р>
<Д>Пантере</Д>
</singular>
</Entry>
<dictionary>
XSD схема ответа на russian/userdict
: Russian.xsd
XSD схема ответа на ukrainian/userdict
: Ukrainian.xsd
Удаление исправления [DELETE]
Для того чтобы удалить исправление, достаточно передать DELETE запрос вида:
/russian/userdict?s="Строка в именительном падеже"
Например, чтобы удалить все исправления для слова "Кошка", нужно передать:
/russian/userdict?s=Кошка
Для украинского языка:
/ukrainian/userdict?s=Кiшка
Метод DELETE может возвращать следующие ошибки:
Код |
Статус |
Значение |
6 |
400 |
Не указан обязательный параметр: s. |
Ограничения бесплатной версии
Бесплатное использование веб-сервиса имеет следующие ограничения:
- Отсутствуют теги
<П_о>
, <где>
, <куда>
, <откуда>
и <род>.
- Максимум 100 запросов в сутки.
Лимит на запросы восстанавливается в 00:00 UTC.
Функция get-queries-left возвращает остаток запросов на данный момент.
Платный доступ
Если вам нужно склонение больших объемов, зарегистрируйтесь и оплатите подходящий вам тарифный план:
Примечание 1: при оплате любого тарифа снимаются ограничения на тэги.
Примечание 2: тарификация функции russian/addstressmarks
осуществляется по следующему принципу:
каждые 20 символов исходного текста эквивалентны 1 запросу. Если в теле вызова функции russian/addstressmarks указан текст,
длиной до 20 символов, то такой вызов функции russian/addstressmarks считается эквивалентным 1 запросу к веб-сервису.
Здесь под символом текста подразумеваются не только буквы русского алфавита, но также любые цифры, знаки препинания, пробелы, прочие знаки и буквы других алфавитов.
При этом следует иметь в виду, что один перенос текста на новую строку может являться двумя символами, если он передан в Windows-стиле, т.е. как пара символов CR LF (см. статью в Википедии на эту тему).
Чтобы стать платным пользователем, вам нужно:
Регистрация
Зачем нужна регистрация? Даже если вы пользуетесь веб-сервисом бесплатно, вам все равно рекомендуется зарегистрироваться, потому что:
- Зарегистрированные пользователи имеют возможность исправлять ошибки склонения.
- Регистрация поможет вам избежать неожиданной блокировки сервиса.
Дело в том, что при отсутствии в запросе токена веб-сервис считает всех пользователей с одним внешним IP одним пользователем,
что может привести к скорому исчерпанию лимита на количество запросов в сутки.
Этой проблемы можно избежать, просто зарегистрировавшись и добавив в запрос ваш токен.
Передача веб-сервису токена
Чтобы индентифицировать себя как зарегистрированного пользователя, необходимо передать веб-сервису токен,
который вы можете получить в личном кабинете. Есть два способа это сделать:
Вызов веб-сервиса из различных языков программирования
Python
Node.js
PHP
.NET (C#)
Java
1С
-
Поддержка веб-сервиса «Морфер.ру» встроена в Платформу 1С.
Для ее активации достаточно поставить галочку в настройках:
видео.
-
В некоторых случаях вам может потребоваться написать код на
языке 1С для вызова функций веб-сервиса.
Как это сделать, описано в
этой статье
на infostart.ru.
- Другие варианты
Новости
Получать новости о веб-сервисе склонения можно через наш Телеграм-канал.
(Раньше работала Google-группа.)