Sklearn pageで説明されているように、私のカウントベクトルにlemmatizationを追加しました。 fit_transform
を使用してDTMを作成するときにSklearn:CountVectorizerにlemmatizerを追加する
from nltk import word_tokenize
from nltk.stem import WordNetLemmatizer
class LemmaTokenizer(object):
def __init__(self):
self.wnl = WordNetLemmatizer()
def __call__(self, articles):
return [self.wnl.lemmatize(t) for t in word_tokenize(articles)]
tf_vectorizer = CountVectorizer(tokenizer=LemmaTokenizer,
strip_accents = 'unicode',
stop_words = 'english',
lowercase = True,
token_pattern = r'\b[a-zA-Z]{3,}\b', # keeps words of 3 or more characters
max_df = 0.5,
min_df = 10)
はしかし、私は(うち、私は意味がありません)以下のエラーが発生します。字句解析を私のベクタライザに追加する前に、dtmコードは常に有効でした。私はマニュアルに深く入り、コードでいくつか試しましたが、解決策は見つかりませんでした。
dtm_tf = tf_vectorizer.fit_transform(articles)
アップデート:以下MaxUのアドバイス、エラーのないコードの実行@以下の後
、しかし、数字や句読点は私の出力からommitedされませんでした。私は個々のテストを実行して、LemmaTokenizer()
の後に他の機能のどれが動作しないか調べます。
strip_accents = 'unicode', # works
stop_words = 'english', # works
lowercase = True, # works
token_pattern = r'\b[a-zA-Z]{3,}\b', # does not work
max_df = 0.5, # works
min_df = 10 # works
Appearantly、それだけでtoken_pattern
非アクティブになった次のとおりです。ここでの結果です。ここで更新され、動作するコードは(私は最初の「PUNKT」と「WordNetの」パッケージをインストールするために必要な)token_pattern
なしです:数字を削除したい人のための
from nltk import word_tokenize
from nltk.stem import WordNetLemmatizer
class LemmaTokenizer(object):
def __init__(self):
self.wnl = WordNetLemmatizer()
def __call__(self, articles):
return [self.wnl.lemmatize(t) for t in word_tokenize(articles)]
tf_vectorizer = CountVectorizer(tokenizer=LemmaTokenizer(),
strip_accents = 'unicode', # works
stop_words = 'english', # works
lowercase = True, # works
max_df = 0.5, # works
min_df = 10) # works
、以下の3文字の句読点や単語ここパンダデータフレームから作業するとき私のためにそれを行う1つの方法である、(しかし、どのようには考えている)
# when working from Pandas dataframe
df['TEXT'] = df['TEXT'].str.replace('\d+', '') # for digits
df['TEXT'] = df['TEXT'].str.replace(r'(\b\w{1,2}\b)', '') # for words
df['TEXT'] = df['TEXT'].str.replace('[^\w\s]', '') # for punctuation
ご迷惑をおかけして申し訳ありませんが、コードは実際にエラーなく実行されます。しかし、 'LemmaTokenizer()'の後の関数はもう働きません。最も重要なのは、 'token_pattern = r '\ b [a-zA-Z] {3、} \ b''が非アクティブになりました(私の話題は数字と句読点がいっぱいです)。 1つのステップですべてを統合することは可能ですか?または、私は2つを分離するか? (そして数字と句読点を事前に削除する)。 – Rens
@Rens、新しい質問を開き、小さな(3〜5行)再現可能なサンプルデータセットとコードを提供してください – MaxU