SnowballStemmer in Python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
maxpo
User
Beiträge: 2
Registriert: Donnerstag 9. November 2023, 17:09

Moin Zusammen,
ich brauche für ein NLP-Projekt einen Stemmer und habe mich für den SnowballStemmer entschieden, da dieser gerade für die deutsche Sprache ganz gut laufen soll. Dies habe ich über nltk gemacht:

Code: Alles auswählen

from nltk.stem import SnowballStemmer

test1 = ('färben, farbig, Farbe')

snowball = SnowballStemmer("german")

print('Snowball: ' + snowball.stem(test1))
Der Output ist: "farben, farbig, farb"
Während der Output unter http://text-processing.com/demo/stem/: "farb , farbig , farb" ist.

Die Website soll scheinbar jedoch den gleichen Algorithmus benutzten. Auch insgesamt sehen meine "richtigen" Wörter nicht wirklich gut gestemmt aus. Habe ich bei der Sprachauswahl ( SnowballStemmer("german")) etwas falsch gemacht oder wie kann man das Ergebnis verbessern?

P.S. Mein Prof wusste auf der schnelle auch nicht, woran es liegt :D

Freue mich auf Rückmeldung,
Max
nezzcarth
User
Beiträge: 1650
Registriert: Samstag 16. April 2011, 12:47

Du musst die Eingabe natürlich selbst zerlegen (/"tokenisieren"). So, wie du es bisher machst, wird halt die Zeichenkette als Ganzes sozusagen wie ein Wort behandelt. Daher werden nur der Umlaut und das e am Ende gekürzt.

Code: Alles auswählen

In [1]: from nltk.stem import SnowballStemmer

In [2]: s = 'färbe, farbig, Farbe'

In [3]: snowball = SnowballStemmer("german")

In [4]: tokenized = [token.strip() for token in s.split(',')]

In [5]: stems = [snowball.stem(token) for token in tokenized]

In [6]: print(f"{', '.join(stems)}")
farb, farbig, farb
Eine modernere Alternative zu Snowball für das Deutsche ist z.B.: https://github.com/LeonieWeissweiler/CISTEM/
maxpo
User
Beiträge: 2
Registriert: Donnerstag 9. November 2023, 17:09

@nezzcarth mit dem tokenisieren hast du recht, habe ich auch in meinem richtigen Projekt gemacht. Das Stemming scheint doch zu funktionieren, ich habe mir per Curl die Ergebnisse der Website mal daneben gezogen, sieht doch alles recht gleich aus. Wahrscheinlich einfach ein schlechtes Beispiel.

Danke für den Tipp, werde ich mir auch einmal angucken
Antworten