Стеммер Портера на PHP
Code (php)
-
<?php
-
class Lingua_Stem_Ru
-
{
-
var $VERSION = "0.02";
-
var $Stem_Caching = 0;
-
var $VOWEL = ‘/аеиоуыэюя/’;
-
var $PERFECTIVEGROUND = ‘/((ив|ивши|ившись|ыв|ывши|ывшись)|((?<=[ая])(в|вши|вшись)))$/’;
-
var $REFLEXIVE = ‘/(с[яь])$/’;
-
var $ADJECTIVE = ‘/(ее|ие|ые|ое|ими|ыми|ей|ий|ый|ой|ем|им|ым|ом|его|ого|ему|ому|их|ых|ую|юю|ая|яя|ою|ею)$/’;
-
var $PARTICIPLE = ‘/((ивш|ывш|ующ)|((?<=[ая])(ем|нн|вш|ющ|щ)))$/’;
-
var $VERB = ‘/((ила|ыла|ена|ейте|уйте|ите|или|ыли|ей|уй|ил|ыл|им|ым|ен|ило|ыло|ено|ят|ует|уют|ит|ыт|ены|ить|ыть|ишь|ую|ю)|((?<=[ая])(ла|на|ете|йте|ли|й|л|ем|н|ло|но|ет|ют|ны|ть|ешь|нно)))$/’;
-
var $NOUN = ‘/(а|ев|ов|ие|ье|е|иями|ями|ами|еи|ии|и|ией|ей|ой|ий|й|иям|ям|ием|ем|ам|ом|о|у|ах|иях|ях|ы|ь|ию|ью|ю|ия|ья|я)$/’;
-
var $RVRE = ‘/^(.*?[аеиоуыэюя])(.*)$/’;
-
var $DERIVATIONAL = ‘/[^аеиоуыэюя][аеиоуыэюя]+[^аеиоуыэюя]+[аеиоуыэюя].*(?<=о)сть?$/’;
-
-
function s(&$s, $re, $to)
-
{
-
$orig = $s;
-
return $orig !== $s;
-
}
-
-
function m($s, $re)
-
{
-
}
-
-
function stem_word($word)
-
{
-
# Check against cache of stemmed words
-
return $this->Stem_Cache[$word];
-
}
-
$stem = $word;
-
do {
-
$start = $p[1];
-
$RV = $p[2];
-
if (!$RV) break;
-
-
# Step 1
-
if (!$this->s($RV, $this->PERFECTIVEGROUND, ”)) {
-
$this->s($RV, $this->REFLEXIVE, ”);
-
-
if ($this->s($RV, $this->ADJECTIVE, ”)) {
-
$this->s($RV, $this->PARTICIPLE, ”);
-
} else {
-
if (!$this->s($RV, $this->VERB, ”))
-
$this->s($RV, $this->NOUN, ”);
-
}
-
}
-
-
# Step 2
-
$this->s($RV, ‘/и$/’, ”);
-
-
# Step 3
-
if ($this->m($RV, $this->DERIVATIONAL))
-
$this->s($RV, ‘/ость?$/’, ”);
-
-
# Step 4
-
if (!$this->s($RV, ‘/ь$/’, ”)) {
-
$this->s($RV, ‘/ейше?/’, ”);
-
$this->s($RV, ‘/нн$/’, ‘н’);
-
}
-
-
$stem = $start.$RV;
-
} while(false);
-
if ($this->Stem_Caching) $this->Stem_Cache[$word] = $stem;
-
return $stem;
-
}
-
-
function stem_caching($parm_ref)
-
{
-
$caching_level = @$parm_ref[‘-level’];
-
if ($caching_level) {
-
if (!$this->m($caching_level, ‘/^[012]$/’)) {
-
die(__CLASS__ . "::stem_caching() - Legal values are ‘0′,’1′ or ‘2′. ‘$caching_level’ is not a legal value");
-
}
-
$this->Stem_Caching = $caching_level;
-
}
-
return $this->Stem_Caching;
-
}
-
-
function clear_stem_cache()
-
{
-
}
-
}
-
?>
-


(18 голосов, в среднем: 3.89 из 5)