Мой Морфер

Веб-сервис склонения «Морфер»

Внимание! Это устаревшая версия веб-сервиса, новая версия здесь.

Веб-сервис предназначен для склонения слов и словосочетаний на русском языке.

Подробнее о технологии склонения

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

http://morpher.ru/Webservices/Morpher.asmx/
GetForms?s=%d0%92%d0%b0%d1%81%d1%8f+
%d0%9f%d1%83%d0%bf%d0%ba%d0%b8%d0%bd

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

В ответ получаем массив из 5 падежных форм:

  <?xml version="1.0" encoding="utf-8" ?>
  <ArrayOfString xmlns="http://morpher.ru/webservices/" ...>
0    <string>Васи Пупкина</string>
1    <string>Васе Пупкину</string>
2    <string>Васю Пупкина</string>
3    <string>Васей Пупкиным</string>
4    <string>Васе Пупкине</string>
 <ArrayOfString>

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

  <?xml version="1.0" encoding="utf-8" ?>
  <ArrayOfString xmlns="http://morpher.ru/webservices/" ...>
0    <string>яблока</string>
1    <string>яблоку</string>
2    <string>яблоко</string>
3    <string>яблоком</string>
4    <string>о яблоке</string>
5    <string>в яблоке</string>
6    <string>ЕдинСред</string>
7    <string>яблоки</string>
8    <string>яблок</string>
9    <string>яблокам</string>
10    <string>яблоки</string>
11    <string>яблоками</string>
12    <string>о яблоках</string>
13    <string>в яблоках</string>
 <ArrayOfString>

Возможные значения рода и числа (строка 6):

  • ЕдинМуж
  • ЕдинЖен
  • ЕдинСред
  • Множ

Если входное словосочетание не имеет множественного числа или уже стоит во множественном числе, то строки 7-13 будут отсутствовать, т.е. массив будет содержать всего 7 строк.

Предлог «о» (строки 4 и 12) когда нужно заменяется на «об» в соответствии с правилами русского языка («об апельсинах»).

Предлог «в» (строки 5 и 13) может заменяться предлогом «на» так, чтобы получившаяся падежная форма корректно отвечала на вопрос «где?»: в комнате – на кухне, на площади – в сквере, в Сибири – на Урале.

В случае ошибки в массиве будет одна строка – описание ошибки:

  <?xml version="1.0" encoding="utf-8" ?>
  <ArrayOfString xmlns="http://morpher.ru/webservices/" ...>
0    <string>Описание ошибки.</string>
 <ArrayOfString>

Тестовая форма и подробное описание форматов сообщений для вызовов через HTTP GET, HTTP POST и HTTP SOAP:

http://morpher.ru/webservices/Morpher.asmx?op=GetForms

Согласование с числом

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

Число Единица измерения Результат
5 комментарий комментариев
3 новое письмо новых письма
100 доллар США долларов США
Форма онлайн-тестирования функции согласования с числом

В API веб-сервиса эта функция называется Soglasovat.

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

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

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

Зарегистрированные пользователи этих ограничений не имеют.

Работа с веб-сервисом из C#

Пошаговая инструкция создания минимальной программы на C#, использующей веб-сервис, при помощи Visual Studio 2005/2008/2010:

  • Создайте проект Console Application с названием WebServiceSample.

  • Добавьте в проект Web Reference:

    • Кликните правой кнопкой на проекте, выберите Add Web Reference.

    • В открывшемся диалоге введите URL:
      http://morpher.ru/webservices/Morpher.asmx

    • Нажмите Add Reference.

  • Вставьте в Program.cs следующий код:

     
    using System;
     
    namespace WebServiceSample
    {
        using ru.morpher;
     
        static class Program
        {
            static void Main ()
            {
                foreach (string s in new Morpher ().GetForms ("привет"))
                {
                    Console.WriteLine (s);
                }
            }
        }
    }

  • Запустите проект (Ctrl-F5).

Пример на Delphi

    ShowMessage (UTF8toAnsi (IDHttp1.Get (
        'http://morpher.ru/Webservices/Morpher.asmx/GetForms?s='
        + AnsiToUTF8 ('слово'))));

За пример спасибо пользователю AlDelta.


Комментарии

Добавить комментарий
Данко Алексеев 15.12.2008 15:02 UTC

Здравствуйте,

Есть ли ограничение на использование веб-сервиса? Проект весьма массивный, даже если кешировать результаты пожизненно, запросов будет много.



Сергей Слепов 15.12.2008 23:22 UTC

Здравствуйте,

Ограничений с моей стороны пока нет, время ответа и доступность сервиса сейчас определяется хостингом. Если параметры общедоступного сервиса Вас не устроят, можно подыскать более проворный хостинг – вплоть до выделенного, который удовлетворит Ваши аппетиты. На взаимовыгодной основе, конечно :) , обсудим.

С уважением, Сергей



Фокин Александр 04.02.2009 19:09 UTC

Здравствуйте.

Можно ли выложить сюда пример на Delphi?



Сергей Слепов 04.02.2009 21:50 UTC

Александр - похоже, Дельфи Вы знаете лучше меня, почему бы Вам самому не написать этот пример? В награду обещаю увековечить Ваше имя на этой странице вместе со ссылкой на Ваш ресурс.



Фокин Александр 04.02.2009 22:29 UTC

Я бы с удовольствием, но не получается...

Запрос на сервис - IDHttp1.Get('http://morpher.ru/webservices/Morpher.asmx/GetAll5?s=слово');

В ответ только это:
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://morpher.ru/webservices/" />



P.S.: Изаините за предыдущие дубли комментариев, обновлял страницу и как оказалось отсылал заполненную форму...

P.P.S.: Как видите Delphi знаю не лучше Вас...



Сергей Слепов 04.02.2009 23:04 UTC

Нужно закодировать русские буквы сначала в UTF-8, потом сделать URLEncode. В результате должно получиться:

http://morpher.ru/webservices/Morpher.asmx/GetAll5?s=%d1%81%d0%bb%d0%be%d0%b2%d0%be

Ссылка по теме:
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1165429197&n=4&p=2



AlDelta 04.02.2009 23:11 UTC

Приветствую, все гениальное просто (или нет):

/////////////////////////////////////////////
ShowMessage(UTF8toANSI(IDHttp1.Get( 'http://morpher.ru/webservices/Morpher.asmx/GetAll5?s=' + AnsiToUTF8('слово'))));
////////////////////////////////////////////



Виктор 16.03.2009 14:46 UTC

Вебсервис перестал работать http://www.morpher.ru/webservices/Morpher.asmx/GetAll5?s=Отель
До этого склонял, теперь на все запросы отвечает <?xml version="1.0" encoding="utf-8" ?>
<ArrayOfString xmlns="http://morpher.ru/webservices/" .../ >



Сергей Слепов 16.03.2009 15:02 UTC

Извините, были временные неполадки. Сейчас все нормально, business as usual :)



Сергей Слепов 24.03.2009 12:20 UTC

Введено ограничение на бесплатное использование веб-сервиса: 1000 запросов в сутки с одного IP. Если вам нужны бОльшие объемы, . Появилась страница со статистикой использования веб-сервиса.



Izhik 10.06.2009 09:58 UTC

http://morpher.ru/WebService/Stats.aspx

Server Error in '/' Application.

Description: An application error occurred on the server. The current custom error settings for this application prevent the details of the application error from being viewed remotely (for security reasons). It could, however, be viewed by browsers running on the local server machine.

Details: To enable the details of this specific error message to be viewable on remote machines, please create a <customErrors> tag within a "web.config" configuration file located in the root directory of the current web application. This <customErrors> tag should then have its "mode" attribute set to "Off".

<!-- Web.Config Configuration File -->

<configuration>
<system.web>
<customErrors mode="Off"/>
</system.web>
</configuration>


Notes: The current error page you are seeing can be replaced by a custom error page by modifying the "defaultRedirect" attribute of the application's <customErrors> configuration tag to point to a custom error page URL.

<!-- Web.Config Configuration File -->

<configuration>
<system.web>
<customErrors mode="RemoteOnly" defaultRedirect="mycustompage.htm"/>
</system.web>
</configuration>



Сергей Слепов 10.06.2009 10:29 UTC

Ошибка исправлена, спасибо!



Артем 16.06.2009 16:34 UTC

Спасибо! Отличный сервис. Жаль только, что нет перевода в множественную форму из веб-сервиса, хотя в демо есть.



Alexander 29.06.2009 08:21 UTC

Здравствуйте.
Веб-сервис склонения «Морфер» сейчас работает только для фразы "Васи Пупкина"? Возможно ли восстановление работоспособности на бесплатной основе?



Сергей Слепов 29.06.2009 12:32 UTC

Проблема решена с пользователем по email:

> О, спасибо я понял.. Дело было в том что я задавал запросы
> изменяя строку адреса в браузере firefox - а он как следствие
> менял кодировку, в IE все работает отлично.
> Спасибо вам!
>
> --
> alexander.



Сергей Слепов 29.06.2009 22:19 UTC

Внимание! Изменился API веб-сервиса. Функция GetAll5 в случае ошибки теперь возвращает не пустой массив, а массив из одной строки – описания ошибки. Функция GetAll5_Soap упразднена. Надеюсь, в таком виде веб-сервис будет проще и удобнее.



Александр 19.07.2009 18:35 UTC

хороший сервис!
есть пару вопросов:
1. ограничение на 1000 отращений с 1 ip. Значит ли это что есть у меня стоит обращение на моем сайте то при количестве посетителей больше 1000 оно работать перестанет? или как?
2. все конечно хорошо, но чтобы перекодировать utf-8 в URLEncode, уже роюсь в интернете полдня найти не могу, почему бы не сдлеать для win-1251? :)



Сергей Слепов 19.07.2009 18:54 UTC

Александр,

1. Если за одно посещение сайта вы делаете одно обращение к сервису, то да.

2. И UTF-8, и Windows-1251 перед помещением в URL должны быть закодированы при помощи URLEncode. Поэтому замена UTF-8 на Windows-1251 вашей проблемы не решит. URLEncode - простейший алгоритм, легко реализуемый на любом языке программирования. На каком языке вы пишете?



Kir 29.08.2009 08:31 UTC

Добрый день.
Пытаюсь подключится через php soap. Говорит, что "Программа не может просклонять это словосочетание". Хотя GETом всё прекрасно работает. Пробовал и в Windows-1251 и в UTF-8 - одна фигня. Вот сорц:
<?php
$client = new SoapClient("http://morpher.ru/Webservices/Morpher.asmx?wsdl");
$res = $client->GetAll5("слово");
echo var_dump($res);
?>



Юрий 30.08.2009 08:16 UTC

Сергей, вопрос чисто гипотетический (или нет :)). Есть возможность ввести слово, допустим, в родительном или дательном падеже (заранее неизвестно), а получить слово в И.п.?
Такая возможность была бы очень полезна для создания поискового индекса или выделения ключевых слов на сайте.
Если можно, ответьте на email. Спасибо!



Сергей Слепов 06.09.2009 23:24 UTC

Юрий - такой возможности в Морфере нет. По-хорошему на выходе такого алгоритма должна быть не одна форма, а набор возможных форм И.п. Например, форму предложного падежа "тесте" имеют слова тест, тесть и тесто. Эта задача решается морфанализаторами и леммерами-стеммерами (например, продукты группы АОТ) (для ограниченного словаря, естественно).

Если перед вами стоит задача выделения ключевых слов в тексте, то для этого совсем не обязательно иметь морфанализатор со словарем. Вполне хорошо работает метод отбрасывания гипотетических окончаний с подсчетом частоты встречаемости получившихся основ. Я когда-то писал подобный алгоритм для собственного интереса. Могу найти и доработать этот код.



Алексей Степанов 10.11.2009 21:34 UTC

Доброго всем здравия.

заметка для PHP-программистов. у меня заработал такой код:
<?php
$client = new SoapClient( "http://morpher.ru/WebServices/Morpher.asmx?WSDL" );
$returnValue=(array) $client->__soapCall('GetForms',array('parameters'=>array('s'=>'Иванов Иван Иваныч')));
$returnValue = (array) $returnValue['GetFormsResult'];
$returnValue = $returnValue['string'];
print_r($returnValue);
?>

возможно кому-то поможет.

всем удачи!



Shinan 06.12.2009 10:24 UTC

Сергей, а каким образом можно зарегистрироваться для полной версии веб-сервиса?



Владимир 03.03.2010 23:22 UTC

Морфер просто супер давно искал, спасибо авторам

но вот api уж слишком единообразное, падежи, склонения все в тегах string, может добавить атрибуты.
Статус об ошибке лучше вынести в отдельный тег к примеру
<status>ok или error</status>

так просто будет более юзабельнее



Владимир 04.03.2010 00:18 UTC

вот кстати пример для php5

$txt = urlencode(iconv( 'windows-1251', 'utf-8', 'тест') );

$url = curl_init();

curl_setopt($url, CURLOPT_URL, 'http://morpher.ru/Webservices/Morpher.asmx/GetForms?s='.$txt);
curl_setopt($url, CURLOPT_RETURNTRANSFER, 1);

$result = new SimpleXMLElement(curl_exec($url));

if ( sizeof($result->string)>1 ) {
echo $result->string[0] . '<br />';
echo $result->string[1] . '<br />';
echo $result->string[2] . '<br />';
echo $result->string[3] . '<br />';
echo $result->string[4] . '<br />';
}



Владимир 04.03.2010 00:48 UTC

и еще можно добавить, параметр к урлу, который будет указывать на требуемый падеж(и), чтобы не грузить сервер лишними склонениями, мне к примеру нужно было только одно склонение

очень хороший сервис у вас, так мне помог, респект



Юрий 18.06.2010 21:34 UTC

Скажите пожалуйста, есть ли возможность пакетного (множественного) склонения слов и словосочетаний. Нужно просклонять около 2000 слов, а по одному очень долго.



Сергей Слепов 19.06.2010 13:59 UTC

Да, конечно, для этого предназначена программа Склонятель.



Стасек 01.07.2010 10:00 UTC

А как можно зарегистрироваться для полной версии веб-сервиса?



administrating,.ru 05.07.2010 10:11 UTC

Ну можно еще проще:

$synonyms1 = simplexml_load_file("http://morpher.ru/Webservices/Morpher.asmx/GetForms?s=".urlencode(mb_strtolower($original)));

foreach($synonyms1 as $key => $val){
if ($key != 'original') { echo $val."<br>\n";}
}



Сергей Слепов 05.07.2010 19:57 UTC

Насчет mb_strtolower хочу заметить, что регистр имеет значение, например, Любовь и любовь склоняются по-разному.



seimei 22.09.2010 13:38 UTC

Пример на C# не рабочий, "Morpher ().GetAll5" Вообще не воспринимает, все ли точно описано, может произошли изменения или листинг для dll?



seimei 22.09.2010 13:54 UTC

m.MorpherSoapClient a = new MorpherSoapClient();
for (int i=0 ;i<5;i++) Console.WriteLine(a.GetForms("Иванов Иван Иванович")[i]);
Работающий вариант



Дмитрий Семенович 17.11.2010 06:26 UTC

Каким образом можно зарегистрироваться для использования расширенной версии веб-сервиса?



(аноним) 25.11.2010 13:32 UTC

Пример вызова через HTTP GET не работает



Сергей Слепов 25.11.2010 20:41 UTC

Спасибо, исправил!



Андрей 04.12.2010 21:15 UTC

И все-таки где и как можно зарегистрироваться для снятия ограничений?



Калита Марковвна 19.12.2010 14:27 UTC

Где бы найти халявный Morpher.dll ?
если кто распологает вышлите на мой емелй
а то 1000 обращений в сутки это вообще не серьезно.



Сергей Слепов 19.12.2010 14:35 UTC

Очень тронут Вашей непосредственностью. Предлагаю Morpher.dll бесплатно, если вы найдете 100 ошибок в склонении. Напишите мне, чтобы обсудить подробности.



Андрей 04.02.2011 19:15 UTC

Я так и не понял. Скажите пожалуйста:
1. В Web-сервисе есть возможность пропись суммы? (Как я понял - нет)
2. Пропись суммы бесплатна?
3. 3000 - это многовтенько, может скините :-)
4. Как можно получить библиотеку бесплатно?
Спасибо за ответы.



Sergey 18.04.2011 11:54 UTC

в согласовании с числом: (например пять) ампер, ват, вольт, аршин, герц, сервис выдает окончание "ов".



Андрей 07.06.2011 15:31 UTC

Вебсервис поддерживает украинский язык?



Сергей Слепов 10.06.2011 21:37 UTC

Sergey, спасибо - вольты, амперы и прочие аршины исправил.



Алексанр 18.06.2011 16:46 UTC

Что то не работает из 1С...
{Форма.Форма(3)}: Метод объекта не обнаружен (GetAll5)
Список=Морфер.GetAll5(Именительный);



Сергей Слепов 20.06.2011 07:04 UTC

@Александр: метод GetAll5 был переименован в GetForms. Для 1С теперь есть внешняя компонента - работает быстро и без ограничений, поддерживает украинский язык.



Алексей Трофименко 22.06.2011 07:05 UTC

Здравствуйте, Сергей.
Как и на каких условиях можно стать зарегистрированным пользователем вебсервиса?
интересует местный падеж с согласованием предлога для топонимов.
(на самом деле, неплохо бы иметь еще и формы "из/изо/с" родительного падежа и "в/во/на" винительного. Их можно вывести из предлога местного падежа, но может вы планируете добавить их тоже?)

P.S. https://rubygems.org/gems/morpher_inflect обертка бесплатной версии вебсервиса для ruby



Колесников О.В. 22.08.2011 07:56 UTC

Простой скрипт на пхп.

$nazv='Колесников Директор Генеральный';
$url=urlencode(mb_convert_encoding($nazv,'UTF-8','windows-1251'));
$getquery="GET http://morpher.ru/WebServices/Morpher.asmx/GetForms?s=".$url."\r\n"."Host: morpher.ru\r\n";
$socket=fsockopen('morpher.ru',80,$errno,$errstr,60); fwrite($socket,$getquery);
$fread=mb_convert_encoding(fread($socket, 3000),'windows-1251','UTF-8');
preg_match("#<string>(.*?)</string>#is", $fread, $echofread);
echo $echofread['1'];
fclose($socket);

выводит в род падеже, $echofread['2'] в дат. и т.д



Алексей Бородин 29.08.2011 12:08 UTC

Пример на VBS (Подходит для макросов в Excel - вставляете слова в первую колонку, скрипт - в макрос, и запускаете макрос

Sub Macro1()

Dim str

Set xmlParser = CreateObject("Msxml2.DOMDocument")

Set scr = CreateObject("MSScriptControl.ScriptControl")
scr.Language = "javascript"


For i = 1 To ActiveSheet.UsedRange.Rows.Count

str = "http://morpher.ru/Webservices/Morpher.asmx/GetForms?s=" + scr.Run("encodeURIComponent", Cells(i, 1).Value)

xmlParser.async = False
xmlParser.Load str

Set Nodes = xmlParser.GetElementsByTagName("ArrayOfString")

If Nodes.Length > 0 Then

If Nodes.Item(0).GetElementsByTagName("string").Length > 1 Then

Dim j
j = 2
For Each Node In Nodes.Item(0).GetElementsByTagName("string")
Cells(i, j).Value = Node.Text
j = j + 1
Next Node
End If

End If
Next i
End Sub



Андрей 22.09.2011 08:18 UTC

Здравствуйте.
А как же стать зарегистрированным пользователем))



Alzasr 25.04.2012 10:05 UTC

А чем продиктованы одинаковые теги для разных падежей? У Вас не фиксированное колличество возвращаемых строк, а именованное обращение не возможно.



Сергей Слепов 25.04.2012 10:08 UTC

Посмотрите новую версию веб-сервиса - там с этим все в порядке.



Alzasr 25.04.2012 10:39 UTC

Спасибо, обязательно воспользуюсь.



Добавить комментарий


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

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