2017-02-01 7 views
1

私はNLTKを初めて使用しており、ステミングケースでステマー機能を使用しています。NLTKステミングは単純なケースに合格しません

私は処理する簡単な例文を持っています: "ライトオンをオンにする"。私は、NLTKステマーがタイプミス「ライトイン」を除外するのに役立つかどうかを見たいと思っています。私は "ライティング"でステマーをテストしました。そしてsnowBallステマーは正しい単語 "light"を返しますが、snowBallステマーはテストで "lightin"を返します。

私の派生プロセスは非常に簡単です:

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

NTLKのdocによると、snowBallStemmerは英語を止めるために使用することができます。私はsnowBallStemmerが "lightin"を止められなかった理由と、これを解決するために何ができるかを知りたい。

+1

スノーボールステマーは、ルールベースなので、それを編集するのは簡単でなければなりません。 [source](http://www.nltk.org/_modules/nltk/stem/snowball.html#EnglishStemmer)を見てください。ステップ1bのリストに「in」を追加する必要があります。 (子クラスでこれを行うと、class属性でややこしい...) – lenz

+0

@lenzこれは役に立ちます。 –

答えて

1

が生じる前に、スペルチェッカ(例えばpyenchant)を実行してみましょう:

>>> 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

できますが、d.suggest( 'lightin')は、手動で最初の提案を選択した場合にのみ、この特定のケースでのみ機能します。 –

+0

あなたのデータセットでどれくらいの精度が達成されるのか興味があります。そしてこれがenouvhでないならば。また、提案を選択する際のよりスマートな複雑さの方法が役立つかどうか。 – alvas

+0

私の場合、スペルチェッカーはかなり正確です。 –

関連する問題