2017-02-01 3 views
1

Ich bin neu zu NLTK, und ich verwende Stemmer-Funktion auf stemming Fällen.NLTK Stemming passiert keinen einfachen Fall

Ich habe einen einfachen Beispielsatz zu verarbeiten, der ist: "Schalten Sie das Licht ein." Ich möchte sehen, ob NLTK-Stemmer mir helfen könnte, den Tippfehler "lightin" herauszufiltern. Ich habe stemmer mit "lighting" getestet, und snowBall stemmer kann das korrekte Wort "light" für mich zurückgeben, aber snowBall stemmer gibt in meinem Test "lightin" zurück.

Mein stamm Prozess ist sehr trivial:

tokens = "Turn on the lightin" 
for token in tokens: 
    print("SnowBall Lemmatizer: "+snowBallStemmer.stem(token)) 

Nach NTLK der doc, snowBallStemmer Englisch Einhalt zu gebieten verwendet werden könnten. Ich möchte wissen, warum snowBallStemer es nicht geschafft hat, "lightin" einzudämmen und was könnte ich tun, um das zu beheben.

+1

Der Schneeball stemmer ist regelbasiert, so sollte es einfach sein, es zu bearbeiten. Sehen Sie sich die [Quelle] (http://www.nltk.org/_modules/nltk/stem/snowball.html#EnglishStemmer) an: Sie müssen "in" zur Liste der Step-1b-suffices hinzufügen. (Wenn Sie dies in einer untergeordneten Klasse tun, wird es mit den Klassenattributen jedoch etwas knifflig ...) – lenz

+0

@lenz Dies hilft. –

Antwort

1

Versuchen Sie, eine Rechtschreibprüfung (z pyenchant) läuft, bevor ergeben:

>>> import enchant 
>>> from nltk.stem import SnowballStemmer 

>>> d = enchant.Dict("en_US") 
>>> d.suggest('lightin') 
['lighting', 'lighten', 'light in', 'light-in', 'lightning', 'lightering', 'sighting', 'light', 'flitting', 'Litton'] 

>>> snowball = SnowballStemmer('english') 
>>> snowball.stem(d.suggest('lightin')[0]) 
u'light' 

>>> sent = "Turn on the lightin".split() 
>>> [snowball.stem(word if d.check(word) else d.suggest(word)[0]) for word in sent] 
[u'turn', 'on', u'the', u'light'] 
+0

Sie können, aber d.suggest ('lightin') funktioniert nur für diesen speziellen Fall, wenn Sie manuell den ersten Vorschlag auswählen. –

+0

Ich bin daran interessiert zu sehen, wie viele% Genauigkeit dies in Ihrem Datensatz erreichen würde. Und wenn das nicht so ist. Und ob schlauere Ratschläge bei der Auswahl des Vorschlags helfen. – alvas

+0

Spellchecker hat in meinem Fall eine ziemlich reine Genauigkeit. –

Verwandte Themen