AAA Главная
Примеры PHP Примеры JavaScript Примеры Ajax Примеры CSS,HTML

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

Для выделения корня слова или различных словоформ лучше всего воспользоваться PHP - классом phpMorphy, который позволяет выделять корни слов с учетом морфологии русского, английского, украинского, эстонского или немецкого языков. Словари для каждого языка занимают 10-15 Мб. При этом не требуется устанавливать на сервер дополнительное программное обеспечение, все будет работать на самом обычном хостинге. Недостаток - низкая скрость выделения корня.


Слово для склонения:

$words=urldecode($_GET['word']);

   $path='lib/';

   $words=preg_split('/[^a-zA-Zа-яА-Я0-9]+/', $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]=iconv('windows-1251', $morphy->getEncoding(), 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);

}

// функция вывода массива с преобразованием из utf-8 в windows-1251
function arr2str($arr,$level=0){
    $str = "array(<br>\n";
    foreach ($arr as $key => $val) {
        if (is_array($val)) {
           $str.=str_repeat("&nbsp;&nbsp;&nbsp;&nbsp;",$level)."'".iconv( 'utf-8', 'windows-1251',$key)."' => " .
		arr2str($val,$level+1) . ",<br>\n";
        }else {
           $str.=str_repeat("&nbsp;&nbsp;&nbsp;&nbsp;",$level)."'".iconv( 'utf-8', 'windows-1251',$key)."' => '<b>" .
		str_replace("'", "\'", iconv( 'utf-8', 'windows-1251',$val)) . "</b>',<br>\n";
        }
}
return $str . str_repeat("&nbsp;&nbsp;&nbsp;&nbsp;",$level).")";
}

Смотрите также: API склонения слов.


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

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


.

© Copyright 2008-2016 by KDG