Регистрация Войти
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Поиск по сайту
Наш чат в Telegram для обмена идеями, проектами, мыслями, людьми в сфере ИТ г.Ростова-на-Дону: @it_rostov
Склонятор - Функция склонения названий, имен и т.д.
Для выделения корня слова или различных словоформ лучше всего воспользоваться PHP - классом phpMorphy, который позволяет выделять корни слов с учетом морфологии русского, английского, украинского, эстонского или немецкого языков. Словари для каждого языка занимают 10-15 Мб. При этом не требуется устанавливать на сервер дополнительное программное обеспечение, все будет работать на самом обычном хостинге. Недостаток - низкая скрость выделения корня.
$words=urldecode($_GET['word']);
$path='lib/';
$words=preg_split('/[^a-zA-Zа-яА-Я0-9]+/u', $words, -1, PREG_SPLIT_NO_EMPTY);
echo "Результат phpmorphy:";
// подключаем библиотеку phpmorphy
$morphy=$path.'phpmorphy/';
require_once($morphy.'src/common.php');
$opts = array(
// PHPMORPHY_STORAGE_FILE - использовать файл
// PHPMORPHY_STORAGE_SHM - загружать словать в общую память(нужно расширение shmop)
// PHPMORPHY_STORAGE_MEM - загружать словать в общую память при каждой инициализации phpmorphy
'storage' => PHPMORPHY_STORAGE_FILE,
'predict_by_suffix' => true,
'predict_by_db' => true,
'graminfo_as_text' => true,
);
$morphy = new phpMorphy($morphy.'dicts', 'ru_RU', $opts);
foreach($words as $i=>$word)
$words[$i]=strtoupper($word); // в utf-8
$awords=$morphy->getBaseForm($words);
echo "<br> <br>\ngetBaseForm:<br>Получить начальную форму (Получить нормализованные слова)<br>".arr2str($awords);
$awords=$morphy->getPseudoRoot($words);
echo "<br> <br>\ngetPseudoRoot:<br>получить корень слова<br>".arr2str($awords);
// Получить все словоформы
$awords = $morphy->getAllForms($words);
echo "<br> <br>\ngetAllForms:<br>Получить все словоформы<br>".arr2str($awords);
}
// функция вывода массива
function arr2str($arr,$level=0){
$str = "array(<br>\n";
foreach ($arr as $key => $val) {
if (is_array($val)) {
$str.=str_repeat(" ",$level)."'".$key."' => " .
arr2str($val,$level+1) . ",<br>\n";
}else {
$str.=str_repeat(" ",$level)."'".$key."' => '<b>" .
str_replace("'", "\'", $val) . "</b>',<br>\n";
}
}
return $str . str_repeat(" ",$level).")";
}
Смотрите также: API склонения слов.
Пример использования склонятора имен и ников от яндекса
Пример создания поиска по своему сайту с учетом морфологии русского языка