Склонятор - Функция склонения названий, имен и т.д.

Для выделения корня слова или различных словоформ лучше всего воспользоваться 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 склонения слов.


Пример использования склонятора имен и ников от яндекса

Пример создания поиска по своему сайту с учетом морфологии русского языка


.