Вопрос о реализации алгоритма стемминга портера?

Я пытаюсь реализовать алгоритм остановки портера, но на этом застрял:

Шаг 1b

(m>0) EED -> EE                    feed      ->  feed
                                   agreed    ->  agree
(*v*) ED  ->                       plastered ->  plaster
                                   bled      ->  bled
(*v*) ING ->                       motoring  ->  motor
                                   sing      ->  sing

Разве m корма не равно 1? feed >> [c] vvc [] >> [c] vc [].

Если это было так, почему он не преобразовал корм в плату, я знаю, что это неправильно, может ли кто-нибудь это прояснить?

вы можете проверить исходный алгоритм здесь, http://tartarus.org/~martin/PorterStemmer/def.txt

Благодарность


person mike    schedule 23.12.2010    source источник
comment
FWIW, алгоритм Портера уже реализован на C как часть библиотеки Snowball: snowball.tartarus.org/download .php   -  person Bradley Grainger    schedule 24.12.2010
comment
я знаю, но я реализую это для удовольствия, еще раз спасибо   -  person mike    schedule 24.12.2010


Ответы (1)


m 'feed' действительно равно 1. Тем не менее, вам нужно внимательно перечитать документ. Число m в условии относится к размеру стержня, который необходимо вычислить в после замены. В вашем случае, чтобы проверить, действительно ли feed -> fee, вы вычисляете m (fee) = 0, поэтому вы не выполняете замену.

Также спасибо за алгоритм! Было интересно!

person Yakov Galka    schedule 23.12.2010