Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Cклонение слов

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
valenok Модератор
Отправлено: 17 Февраля, 2009 - 00:17:31
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




На автороство не претендую. Улучшений тоже никаких не делал.
Да и вообще ни разу не пользовался, так что будет повод попробовать - соообщайте результаты.


PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. class Lingua_Stem_Ru
  5.  
  6. {
  7.  
  8.     var $VERSION = "0.02";
  9.  
  10.     var $Stem_Caching = 0;
  11.  
  12.     var $Stem_Cache = array();
  13.  
  14.     var $VOWEL = '/аеиоуыэюя/';
  15.  
  16.     var $PERFECTIVEGROUND = '/((ив|ивши|ившись|ыв|ывши|ывшись)|((?<=[ая])(в|вши|вшись)))$/';
  17.  
  18.     var $REFLEXIVE = '/(с[яь])$/';
  19.  
  20.     var $ADJECTIVE = '/(ее|ие|ые|ое|ими|ыми|ей|ий|ый|ой|ем|им|ым|ом|его|ого|еых|ую|юю|ая|яя|ою|ею)$/';
  21.  
  22.     var $PARTICIPLE = '/((ивш|ывш|ующ)|((?<=[ая])(ем|нн|вш|ющ|щ)))$/';
  23.  
  24.     var $VERB = '/((ила|ыла|ена|ейте|уйте|ите|или|ыли|ей|уй|ил|ыл|им|ым|ены|ить|ыть|ишь|ую|ю)|((?<=[ая])(ла|на|ете|йте|ли|й|л|ем|н|ло|но|ет|ют|ны|ть|ешь|нно)))$/';
  25.  
  26.     var $NOUN = '/(а|ев|ов|ие|ье|е|иями|ями|ами|еи|ии|и|ией|ей|ой|ий|й|и|ы|ь|ию|ью|ю|ия|ья|я)$/';
  27.  
  28.     var $RVRE = '/^(.*?[аеиоуыэюя])(.*)$/';
  29.  
  30.     var $DERIVATIONAL = '/[^аеиоуыэюя][аеиоуыэюя]+[^аеиоуыэюя]+[аеиоуыэюя].*(?<=о)сть?$/';
  31.  
  32.  
  33.  
  34.     function s(&$s, $re, $to)
  35.  
  36.     {
  37.  
  38.         $orig = $s;
  39.  
  40.         $s = preg_replace($re, $to, $s);
  41.  
  42.         return $orig !== $s;
  43.  
  44.     }
  45.  
  46.  
  47.  
  48.     function m($s, $re)
  49.  
  50.     {
  51.  
  52.         return preg_match($re, $s);
  53.  
  54.     }
  55.  
  56.  
  57.  
  58.     function stem_word($word)
  59.  
  60.     {
  61.  
  62.         $word = strtolower($word);
  63.  
  64.         $word = strtr($word, 'ё', 'е');
  65.  
  66.         # Check against cache of stemmed words
  67.  
  68.         if ($this->Stem_Caching && isset($this->Stem_Cache[$word])) {
  69.  
  70.             return $this->Stem_Cache[$word];
  71.  
  72.         }
  73.  
  74.         $stem = $word;
  75.  
  76.         do {
  77.  
  78.           if (!preg_match($this->RVRE, $word, $p)) break;
  79.  
  80.           $start = $p[1];
  81.  
  82.           $RV = $p[2];
  83.  
  84.           if (!$RV) break;
  85.  
  86.  
  87.  
  88.           # Step 1
  89.  
  90.           if (!$this->s($RV, $this->PERFECTIVEGROUND, '')) {
  91.  
  92.               $this->s($RV, $this->REFLEXIVE, '');
  93.  
  94.  
  95.  
  96.               if ($this->s($RV, $this->ADJECTIVE, '')) {
  97.  
  98.                   $this->s($RV, $this->PARTICIPLE, '');
  99.  
  100.               } else {
  101.  
  102.                   if (!$this->s($RV, $this->VERB, ''))
  103.  
  104.                       $this->s($RV, $this->NOUN, '');
  105.  
  106.               }
  107.  
  108.           }
  109.  
  110.  
  111.  
  112.           # Step 2
  113.  
  114.           $this->s($RV, '/и$/', '');
  115.  
  116.  
  117.  
  118.           # Step 3
  119.  
  120.           if ($this->m($RV, $this->DERIVATIONAL))
  121.  
  122.               $this->s($RV, '/ость?$/', '');
  123.  
  124.  
  125.  
  126.           # Step 4
  127.  
  128.           if (!$this->s($RV, '/ь$/', '')) {
  129.  
  130.               $this->s($RV, '/ейше?/', '');
  131.  
  132.               $this->s($RV, '/нн$/', 'н');
  133.  
  134.           }
  135.  
  136.  
  137.  
  138.           $stem = $start.$RV;
  139.  
  140.         } while(false);
  141.  
  142.         if ($this->Stem_Caching) $this->Stem_Cache[$word] = $stem;
  143.  
  144.         return $stem;
  145.  
  146.     }
  147.  
  148.  
  149.  
  150.     function stem_caching($parm_ref)
  151.  
  152.     {
  153.  
  154.         $caching_level = @$parm_ref['-level'];
  155.  
  156.         if ($caching_level) {
  157.  
  158.             if (!$this->m($caching_level, '/^[012]$/')) {
  159.  
  160.                 die(__CLASS__ . "::stem_caching() - Legal values are '0','1' or '2'. '$caching_level' is not a legal value");
  161.  
  162.             }
  163.  
  164.             $this->Stem_Caching = $caching_level;
  165.  
  166.         }
  167.  
  168.         return $this->Stem_Caching;
  169.  
  170.     }
  171.  
  172.  
  173.  
  174.     function clear_stem_cache()
  175.  
  176.     {
  177.  
  178.         $this->Stem_Cache = array();
  179.  
  180.     }
  181.  
  182. }
  183.  
  184.  
  185.  
  186.  
  187.  
  188. $stemmer = new Lingua_Stem_Ru();
  189.  
  190. echo $stemmer->stem_word('Порядки');
  191.  


-----
Truly yours, Sasha.
 
My status
 Top
LIME
Отправлено: 05 Марта, 2012 - 21:46:07
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




valenok в закладку
пока не нуждался и даже сложно представить в каких случаях не будет альтернативного решения без таких сложностей...но кто писал проделал достойную работу
если что отпишу
спасибо
 
 Top
snikers987
Отправлено: 05 Марта, 2012 - 22:40:07
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)






-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Пользовательские функции »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB