Универсальное сколонение слов на PHP с использованием Яндекс.API
Пример простейшей функции, которая возвращает слово в нужном склонении
<?php
function inflect($what,$inflection_id)
{
// Функция склонения названий, имен и любой другой фигни
// Суть функции - ищем слово с нужной формой склонения в базе.
// Если не нашли - дергаем склонятор Яндекса и кешируем в базу ответ.
GLOBAL $mysql;
$inflected="";
$res_inflected=$mysql->query_to_array("select * from set_of_inflections where `original`='".$what."' and inflection_id='".$inflection_id."' limit 1");
if(!empty($res_inflected))
{
$inflected=$res_inflected['inflected'];
}
else
{
$parser=xml_parser_create();
$data=@file_get_contents('http://export.yandex.ru/inflect.xml?name='.urlencode($what));
// print_r($data);
if($data){
xml_parse_into_struct($parser,$data,$structure,$index);
if($structure){
// print_r($structure);
foreach($structure as $key)
{
if(!isset($key['tag']) || !isset($key['value']))continue;
elseif($key['tag']=='INFLECTION')
{
$inf[$what][$key['attributes']['CASE']]=$key['value'];
$res_inflected=$mysql->query_to_array("insert into set_of_inflections (`original`, `inflection_id`, `inflected`)
values ('".$what."',".$key['attributes']['CASE'].",'".$key['value']."')");
if($key['attributes']['CASE']==$inflection_id)
{
$inflected=$key['value'];
}
}
}
}
}
xml_parser_free($parser);
}
if($inflected=="") $inflected=$what;
return $inflected;
}
?>
Описание
Яндекс.Склонятора
(c)Илья Артеменко (goblin)
Пример пакетного склонения
Для всех строк в файле file.txt запрашиваются все словоформы и выводятся на экран. Не используйте этот пример повторно, обзательно сохраняйте все в базу, иначе получите бан от яндекса.
<?php
header('Content-Type: text/html ; charset="utf-8"');
$file = file_get_contents('file.txt');
$file = explode(chr(10), $file);
$delim = '|';
foreach ($file as $k => $v) {
$url = "http://export.yandex.ru/inflect.xml?name=$v";
$xml = simplexml_load_file($url);
$original = $xml->original;
$im = trim($xml->inflection[0]);
$rod = trim($xml->inflection[1]);
$dat = trim($xml->inflection[2]);
$vin = trim($xml->inflection[3]);
$tvor = trim($xml->inflection[4]);
$predl = trim($xml->inflection[5]);
echo $im.$delim.$rod.$delim.$dat.$delim.$vin.$delim.$tvor.$delim.$predl.chr(10);
echo '<br />';
}
?>
Комментарии:
Нету комментариев для вывода...