Прочитав пост http://toster.ru/2410/, я написал функцию, которая определяет из строки слов их части речи. Определение, конечно не 100%, но можно легко дорабатывать.
Функция возвращает массив значений групп:
Пример вызова функции:
Результат работы функции (массив):
Код функции:
UPDATED: 27.09.2012 — Обновлен код функции. Переход на мультибайтовые строки (mb_*). Добавлены новые части речи. Добавлена значительная часть слов в массив.
UPDATED: 29.09.2012 — Полезная информация по русскому языку для тех, кто сам пишет подобное: здесь
Пишите свои замечания — будем дорабатывать вместе.
Функция возвращает массив значений групп:
- 1. прилагательное
- 2. причастие
- 3. глагол
- 4. существительное
- 5. наречие
- 6. числительное
- 7. союз
- 8. предлог
Пример вызова функции:
print_r(chastrechiRUS('В небе летит красивый сверкающий самолёт'));
Результат работы функции (массив):
Array ( [0] => 8 [1] => 4 [2] => 3 [3] => 1 [4] => 2 [5] => 4 )
Код функции:
function chastrechiRUS($string){ /* Группы окончаний: 1. прилагательные 2. причастие 3. глагол 4. существительное 5. наречие 6. числительное 7. союз 8. предлог */ $groups = array( 1 => array ('ее','ие','ые','ое','ими','ыми','ей','ий','ый','ой','ем','им','ым','ом', 'его','ого','ему','ому','их','ых','ую','юю','ая','яя','ою','ею'), 2 => array ('ивш','ывш','ующ','ем','нн','вш','ющ','ущи','ющи','ящий','щих','щие','ляя'), 3 => array ('ила','ыла','ена','ейте','уйте','ите','или','ыли','ей','уй','ил','ыл','им','ым','ен', 'ило','ыло','ено','ят','ует','уют','ит','ыт','ены','ить','ыть','ишь','ую','ю','ла','на','ете','йте', 'ли','й','л','ем','н','ло','ет','ют','ны','ть','ешь','нно'), 4 => array ('а','ев','ов','ье','иями','ями','ами','еи','ии','и','ией','ей','ой','ий','й','иям','ям','ием','ем', 'ам','ом','о','у','ах','иях','ях','ы','ь','ию','ью','ю','ия','ья','я','ок', 'мва', 'яна', 'ровать','ег','ги','га','сть','сти'), 5 => array ('чно', 'еко', 'соко', 'боко', 'роко', 'имо', 'мно', 'жно', 'жко','ело','тно','льно','здо','зко','шо','хо','но'), 6 => array ('чуть','много','мало','еро','вое','рое','еро','сти','одной','двух','рех','еми','яти','ьми','ати', 'дного','сто','ста','тысяча','тысячи','две','три','одна','умя','тью','мя','тью','мью','тью','одним'), 7 => array ('более','менее','очень','крайне','скоре','некотор','кажд','други','котор','когд','однак', 'если','чтоб','хот','смотря','как','также','так','зато','что','или','потом','эт','тог','тоже','словно', 'ежели','кабы','коли','ничем','чем'), 8 => array ('в','на','по','из') ); $res=array(); $string=mb_strtolower($string); $words=explode(' ',$string); //print_r($words); foreach ($words as $wk=>$w){ $len_w=mb_strlen($w); foreach ($groups as $gk=>$g){ foreach ($g as $part){ $len_part=mb_strlen($part); if ( mb_substr($w,-$len_part)==$part && $res[$wk][$gk]<$len_part //любая часть речи, окончания || mb_strpos($w,$part)>=(round(2*$len_w)/5) && $gk==2 //причастие, от 40% и правее от длины слова || mb_substr($w,0,$len_part)==$part && $res[$wk][$gk]<$len_part && $gk==7 //союз, сначала слОва || $w==$part //полное совпадение ) { //echo $w.':'.$part."(".$gk.")<br>"; if ($w!=$part) $res[$wk][$gk]=mb_strlen($part); else $res[$wk][$gk]=99; } } } if (!isset($res[$wk][$gk])) $res[$wk][$gk]=0; //echo "<hr>"; } $result=array(); foreach($res as $r) { arsort($r); array_push($result,key($r)); } return $result; }
UPDATED: 27.09.2012 — Обновлен код функции. Переход на мультибайтовые строки (mb_*). Добавлены новые части речи. Добавлена значительная часть слов в массив.
UPDATED: 29.09.2012 — Полезная информация по русскому языку для тех, кто сам пишет подобное: здесь
Пишите свои замечания — будем дорабатывать вместе.
