Sid Gifari File Manager
π Root
/
home
/
genremedia08
/
musicjukebox.overlookedtracks.com
/
vendor
/
teamtnt
/
tntsearch
/
src
/
Stemmer
/
Editing: RussianStemmer.php
<?php namespace TeamTNT\TNTSearch\Stemmer; /** * Semple stemmer for russian language */ class RussianStemmer implements Stemmer { private static $VOWEL = '/Π°Π΅ΠΈΠΎΡΡΡΡΡ/u'; private static $PERFECTIVEGROUND = '/((ΠΈΠ²|ΠΈΠ²ΡΠΈ|ΠΈΠ²ΡΠΈΡΡ|ΡΠ²|ΡΠ²ΡΠΈ|ΡΠ²ΡΠΈΡΡ)|((?<=[Π°Ρ])(Π²|Π²ΡΠΈ|Π²ΡΠΈΡΡ)))$/u'; private static $REFLEXIVE = '/(Ρ[ΡΡ])$/u'; private static $ADJECTIVE = '/(Π΅Π΅|ΠΈΠ΅|ΡΠ΅|ΠΎΠ΅|ΠΈΠΌΠΈ|ΡΠΌΠΈ|Π΅ΠΉ|ΠΈΠΉ|ΡΠΉ|ΠΎΠΉ|Π΅ΠΌ|ΠΈΠΌ|ΡΠΌ|ΠΎΠΌ|Π΅Π³ΠΎ|ΠΎΠ³ΠΎ|Π΅ΠΌΡ|ΠΎΠΌΡ|ΠΈΡ |ΡΡ |ΡΡ|ΡΡ|Π°Ρ|ΡΡ|ΠΎΡ|Π΅Ρ)$/u'; private static $PARTICIPLE = '/((ΠΈΠ²Ρ|ΡΠ²Ρ|ΡΡΡ)|((?<=[Π°Ρ])(Π΅ΠΌ|Π½Π½|Π²Ρ|ΡΡ|Ρ)))$/u'; private static $VERB = '/((ΠΈΠ»Π°|ΡΠ»Π°|Π΅Π½Π°|Π΅ΠΉΡΠ΅|ΡΠΉΡΠ΅|ΠΈΡΠ΅|ΠΈΠ»ΠΈ|ΡΠ»ΠΈ|Π΅ΠΉ|ΡΠΉ|ΠΈΠ»|ΡΠ»|ΠΈΠΌ|ΡΠΌ|Π΅Π½|ΠΈΠ»ΠΎ|ΡΠ»ΠΎ|Π΅Π½ΠΎ|ΡΡ|ΡΠ΅Ρ|ΡΡΡ|ΠΈΡ|ΡΡ|Π΅Π½Ρ|ΠΈΡΡ|ΡΡΡ|ΠΈΡΡ|ΡΡ|Ρ)|((?<=[Π°Ρ])(Π»Π°|Π½Π°|Π΅ΡΠ΅|ΠΉΡΠ΅|Π»ΠΈ|ΠΉ|Π»|Π΅ΠΌ|Π½|Π»ΠΎ|Π½ΠΎ|Π΅Ρ|ΡΡ|Π½Ρ|ΡΡ|Π΅ΡΡ|Π½Π½ΠΎ)))$/u'; private static $NOUN = '/(Π°|Π΅Π²|ΠΎΠ²|ΠΈΠ΅|ΡΠ΅|Π΅|ΠΈΡΠΌΠΈ|ΡΠΌΠΈ|Π°ΠΌΠΈ|Π΅ΠΈ|ΠΈΠΈ|ΠΈ|ΠΈΠ΅ΠΉ|Π΅ΠΉ|ΠΎΠΉ|ΠΈΠΉ|ΠΉ|ΠΈΡΠΌ|ΡΠΌ|ΠΈΠ΅ΠΌ|Π΅ΠΌ|Π°ΠΌ|ΠΎΠΌ|ΠΎ|Ρ|Π°Ρ |ΠΈΡΡ |ΡΡ |Ρ|Ρ|ΠΈΡ|ΡΡ|Ρ|ΠΈΡ|ΡΡ|Ρ)$/u'; private static $RVRE = '/^(.*?[Π°Π΅ΠΈΠΎΡΡΡΡΡ])(.*)$/u'; private static $DERIVATIONAL = '/[^Π°Π΅ΠΈΠΎΡΡΡΡΡ][Π°Π΅ΠΈΠΎΡΡΡΡΡ]+[^Π°Π΅ΠΈΠΎΡΡΡΡΡ]+[Π°Π΅ΠΈΠΎΡΡΡΡΡ].*(?<=ΠΎ)ΡΡΡ?$/u'; private static function s(&$s, $re, $to) { $orig = $s; $s = preg_replace($re, $to, $s); return $orig !== $s; } private static function m($s, $re) { return preg_match($re, $s); } public static function stem($word) { $word = mb_strtolower($word); $word = str_replace('Ρ', 'Π΅', $word); $stem = $word; do { if (!preg_match(self::$RVRE, $word, $p)) { break; } $start = $p[1]; $RV = $p[2]; if (!$RV) { break; } // Step 1 if (!self::s($RV, self::$PERFECTIVEGROUND, '')) { self::s($RV, self::$REFLEXIVE, ''); if (self::s($RV, self::$ADJECTIVE, '')) { self::s($RV, self::$PARTICIPLE, ''); } else { if (!self::s($RV, self::$VERB, '')) { self::s($RV, self::$NOUN, ''); } } } // Step 2 self::s($RV, '/ΠΈ$/u', ''); // Step 3 if (self::m($RV, self::$DERIVATIONAL)) { self::s($RV, '/ΠΎΡΡΡ?$/u', ''); } // Step 4 if (!self::s($RV, '/Ρ$/u', '')) { self::s($RV, '/Π΅ΠΉΡΠ΅?/u', ''); self::s($RV, '/Π½Π½$/u', 'Π½'); } $stem = $start . $RV; } while (FALSE); return $stem; } }
Save
Cancel