У Яндекса есть очень удобный api сервис, который может трансформировать любое слово, или даже несколько слов, во все падежи. Воспользоваться сервисом очень просто, достаточно сделать запрос по адресу export.yandex.ru/inflect.xml?name=СЛОВО — в ответ будет получен xml со всеми склонениями слова.
Ниже я привел функцию, которая работает с api Яндекса и возвращает нужную форму слова.
Код функции:
/** * Склонение слов по падежам. С использованием api Яндекса * @var string $text - текст * @var integer $numForm - нужный падеж. Число от 0 до 5 * * @return - вернет false при неудаче. При успехе вернет нужную форму слова */ function getNewFormText($text, $numForm){ $urlXml = "http://export.yandex.ru/inflect.xml?name=".urlencode($text); $result = @simplexml_load_file($urlXml); if($result){ $arrData = array(); foreach ($result->inflection as $one) { $arrData[] = (string) $one; } return $arrData[$numForm]; } return false; }
И пример использования функции:
$text = "любой текст"; echo "Именительный падеж : " . getNewFormText($text, 0) . "<br/>"; echo "Родительный падеж : " . getNewFormText($text, 1) . "<br/>"; echo "Дательный падеж : " . getNewFormText($text, 2) . "<br/>"; echo "Винительный падеж : " . getNewFormText($text, 3) . "<br/>"; echo "Творительный падеж : " . getNewFormText($text, 4) . "<br/>"; echo "Предложный падеж : " . getNewFormText($text, 5) . "<br/>";
За это огромное спасибо, работает на 5+!
А есть то же самое — но для глаголов?
Автор, подобные примеры надо смывать в унитаз! Сам то думал, что за пример показал и новички его ведь будут использовать?
У тебя скрипт делает 6 (ШЕСТЬ) запросов к серверу яндекса, при этом каждый раз яндекс отдаст ВСЕ падежи… представь сколько времени будет генерироваться страница?
Возвращать нужно одним массивом из функции и уже в основном скрипте брать с массива нужное.
Вот не менее функциональный вариант, но с 1 запросом и 1 проходом цикла в отличии от твоих шести.
function getNewFormText($text){
$urlXml = «http://export.yandex.ru/inflect.xml?name=».urlencode($text);
$result = @simplexml_load_file($urlXml);
if($result){
$arrData = array();
foreach ($result->inflection as $one) {
$arrData[] = (string) $one;
}
return $arrData;
}
return false;
}
——
// Основной скрипт. Видим что запрос к функции только один
// Здесь было бы разумно сделать проверку на размер массива «$text», вдруг яндекс ничего не вернул, тогда код ниже вызовет нотайсы и соответственно ничего не будет склонять
if(($text = getNewFormText($text)) !== false)
{
echo «Именительный падеж : » . $text[0]. «»;
echo «Родительный падеж : » . $text[1] . «»;
echo «Дательный падеж : » . $text[2]. «»;
echo «Винительный падеж : » .$text[3] . «»;
echo «Творительный падеж : » .$text[4]. «»;
echo «Предложный падеж : » . $text[5]. «»;
}
надо было ссылку дать на описание их API , спасибо так-то.. =) не знал
Уже сервис не работает или переехал на новый адрес? сейчас по ссылке возвращает 404
Не работает. Все проекты Яндекс Nano были закрыты.
Жалко конечно, был готовый скрипт для пакетной обработки слов…