116 $word = str_replace(
'Ё',
'Е', $word);
118 static $STEMMING_RU_EX = [
122 'ГРАНАТ' =>
'ГРАНАТ',
123 'ГРАНИТ' =>
'ГРАНИТ',
124 'ТЕРМИНАЛ' =>
'ТЕРМИНАЛ',
132 if (isset($STEMMING_RU_EX[$word]))
134 return $STEMMING_RU_EX[$word];
141 if (preg_match(
'/(ОВ|ЕВ)$/', $word))
150 if (preg_match(
'/(ОВ|ЕВ)(А|У|ЫМ|Е)$/', $word, $found))
154 stemming_ru(mb_substr($word, 0, -mb_strlen($found[2]))),
186 $rv = mb_substr($rv, 0, 1 - mb_strlen($found[0]));
189 $rv = mb_substr($rv, 0, -mb_strlen($found[0]));
199 $rv = preg_replace(
'/(СЯ|СЬ)$/u',
'', $rv);
203 $rv = mb_substr($rv, 0, -mb_strlen($found[2]));
207 $rv = mb_substr($rv, 0, -mb_strlen($found[0]));
211 $rv = mb_substr($rv, 0, -mb_strlen($found[2]));
215 $rv = mb_substr($rv, 0, -mb_strlen($found[0]));
224 if (mb_substr($rv, -1) ==
'И')
226 $rv = mb_substr($rv, 0, -1);
230 if (preg_match(
'/(ОСТЬ|ОСТ)$/u', $rv))
233 $rv_len = mb_strlen($rv);
234 while ( ($R1 < $rv_len) && (mb_strpos(
$STEMMING_RU_VOWELS, mb_substr($rv, $R1, 1)) !==
false) )
244 while ( ($R2 < $rv_len) && (mb_strpos(
$STEMMING_RU_VOWELS, mb_substr($rv, $R2, 1)) ===
false) )
248 while ( ($R2 < $rv_len) && (mb_strpos(
$STEMMING_RU_VOWELS, mb_substr($rv, $R2, 1)) !==
false) )
257 if ((mb_substr($rv, -4) ==
'ОСТЬ') && ($rv_len >= ($R2 + 4)))
259 $rv = mb_substr($rv, 0, $rv_len - 4);
261 elseif ((mb_substr($rv, -3) ==
'ОСТ') && ($rv_len >= ($R2 + 3)))
263 $rv = mb_substr($rv, 0, $rv_len - 3);
267 $rv = preg_replace(
'/(ЕЙШЕ|ЕЙШ)$/u',
'', $rv);
268 $r = preg_replace(
'/НН$/u',
'Н', $rv);
271 $rv = preg_replace(
'/Ь$/u',
'', $rv);
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)