7

正規表現ステマーを試しましたが、何百もの無関係なトークンが得られます。私はただ「遊び」の幹に興味があります。ここに私が取り組んでいるコードがあります:

import nltk
from nltk.book import *
f = open('tupac_original.txt', 'rU')
text = f.read()
text1 = text.split()
tup = nltk.Text(text1)
lowtup = [w.lower() for w in tup if w.isalpha()]
import sys, re
tupclean = [w for w in lowtup if not w in nltk.corpus.stopwords.words('english')]
from nltk import stem
tupstem = stem.RegexpStemmer('az$|as$|a$')
[tupstem.stem(i) for i in tupclean] 

上記の結果は次のとおりです。

['like', 'ed', 'young', 'black', 'like'...]

ファイルをクリーンアップ.txtし(すべて小文字にする、ストップワードを削除するなど)、単語の複数のスペルを1つに正規化し、頻度分布/カウントを実行しようとしています。方法は知っていますFreqDistが、ステミングのどこが間違っているかについての提案はありますか?

4

1 に答える 1

12

には、事前にコード化された既知のステマーがいくつかあります。http://nltk.org/api/nltk.stem.html を参照NLTKしてください。以下に例を示します。

>>> from nltk import stem
>>> porter = stem.porter.PorterStemmer()
>>> lancaster = stem.lancaster.LancasterStemmer()
>>> snowball = stem.snowball.EnglishStemmer()
>>> tokens =  ['player', 'playa', 'playas', 'pleyaz'] 
>>> [porter(i) for i in tokens]
>>> [porter.stem(i) for i in tokens]
['player', 'playa', 'playa', 'pleyaz']
>>> [lancaster.stem(i) for i in tokens]
['play', 'play', 'playa', 'pleyaz']
>>> [snowball.stem(i) for i in tokens]
[u'player', u'playa', u'playa', u'pleyaz']

しかし、おそらく必要なのは、ある種の正規表現ステマーです。

>>> from nltk import stem
>>> rxstem = stem.RegexpStemmer('er$|a$|as$|az$')
>>> [rxstem.stem(i) for i in tokens]
['play', 'play', 'play', 'pley']
于 2013-09-27T07:23:01.010 に答える