Немецкие стеммеры в RTextTools

Я пытаюсь использовать немецкий стеммер, который поставляется с RTextTools, но результаты, которые я получаю, совершенно не соответствуют действительности.

Скажем, у меня есть следующий вектор:

v <- c("groß", "größer", "am", "größten", "ähnlicher")

С использованием

library(RTextTools)
wordStem(v, "german")

я получил

[1] "groß"    "größer"  "am"      "größten" "ähnlich"

Что мне не хватает??


person Dominic    schedule 08.06.2012    source источник
comment
Ну, очевидно, он должен использовать алгоритм Snowball (я проверил его здесь ссылка - Первое, что он должен сделать, это заменить ß на ss, и тогда ясно, что groß, größer, größten должно привести к грубым, грубым, грубым.   -  person Dominic    schedule 09.06.2012
comment
похоже, что алгоритм не обрабатывает ß должным образом. Энлих прав. Попробуйте гроссер грёсстен   -  person moskito-x    schedule 09.06.2012


Ответы (1)


Алгоритм в Снежке

/*
    Extra rule for -nisse ending added 11 Dec 2009
*/

routines (
           prelude postlude
           mark_regions
           R1 R2
           standard_suffix
)

externals ( stem )

integers ( p1 p2 x )

groupings ( v s_ending st_ending )

stringescapes {}

/* special characters (in ISO Latin I) */

stringdef a"   hex 'E4'
stringdef o"   hex 'F6'
stringdef u"   hex 'FC'
stringdef ss   hex 'DF'
......

похоже, что это переведено обратно на «DF» «ß»

Представление умлаута следующим за e Немецкие буквы ä, ö и ü иногда представляются как ae, oe и ue соответственно. Стеммер здесь представляет собой вариант основного немецкого стеммера, учитывающий это.

Основной немецкий стеммер начинается с правила,

First, replace ß by ss, and put u and y between vowels into upper case. 

Это заменено правилом,

Put u and y between vowels into upper case, and then do the following mappings,

    (a) replace ß with ss, **"MAYBE WRONG ORDER"**
    (a) replace ae with ä,
    (a) replace oe with ö,
    (a) replace ue with ü unless preceded by q. 



So in quelle, ue is not mapped to ü because it follows q, and in feuer it is not mapped because the first part of the rule changes it to feUer, so the u is not found. 
person moskito-x    schedule 08.06.2012