Определение части речи слова на PHP одной функцией

в 16:59, , рубрики: php, Алгоритмы, метки: ,

Прочитав пост http://habrahabr.ru/qa/2410/, я написал функцию, которая определяет из строки слов их части речи. Определение, конечно не 100%, но можно легко дорабатывать.

Функция возвращает массив значений групп:

  • 1. прилагательное
  • 2. причастие
  • 3. глагол
  • 4. существительное

Пример вызова функции:

print_r(chastrechiRUS('В небе летит красивый сверкающий самолёт'));

Результат работы функции (массив):

Array ( [0] => 4 [1] => 4 [2] => 3 [3] => 1 [4] => 2 [5] => 4 )


Код функции:

function chastrechiRUS($string){
 /*
 Группы окончаний:
 1. прилагательное
 2. причастие
 3. глагол
 4. существительное
 */

 $groups = array(
 1 => array ('ее','ие','ые','ое','ими','ыми','ей','ий','ый','ой','ем','им','ым','ом','его','ого','ему','ому','их','ых','ую','юю','ая','яя','ою','ею'),
 2 => array ('ивш','ывш','ующ','ем','нн','вш','ющ','щ','ущи','ющи','ящий','щих','щие'),
 3 => array ('ила','ыла','ена','ейте','уйте','ите','или','ыли','ей','уй','ил','ыл','им','ым','ен','ило','ыло','ено','ят','ует','уют','ит','ыт','ены','ить','ыть','ишь','ую','ю','ла','на','ете','йте','ли','й','л','ем','н','ло','но','ет','ют','ны','ть','ешь','нно'),
 4 => array ('а','ев','ов','ие','ье','е','иями','ями','ами','еи','ии','и','ией','ей','ой','ий','й','иям','ям','ием','ем','ам','ом','о','у','ах','иях','ях','ы','ь','ию','ью','ю','ия','ья','я','ок', 'мва', 'яна', 'ровать'),
);

$res=array();

$words=explode(' ',$string);
//print_r($words);
foreach ($words as $wk=>$w){
 foreach ($groups as $gk=>$g){
  foreach ($g as $part){
   if (
        substr($w,-strlen($part))==$part && $res[$wk][$gk]<strlen($part) //любая часть речи, окончания
        || stripos($w,$part)!==false && $gk==2 //причастие, в любом месте слова
      ) {
         $res[$wk][$gk]=strlen($part);
        }

  }
 }
if (!isset($res[$wk][$gk])) $res[$wk][$gk]=0;
}


$result=array();
foreach($res as $r) {
 arsort($r);
 array_push($result,key($r));
}
return $result;
}

Пишите свои замечания — будем дорабатывать вместе.
PS: Скоро будет обновление функции.

Автор: xmoonlight

Поделиться

* - обязательные к заполнению поля