TfidfVectorizerのstop_wordsにいくつかの単語を追加したい。私は scikit-learnのCountVectorizerのストップリストに単語を追加する の解決策に従いました。私のストップワードリストには、「英語」のストップワードと指定したストップワードの両方が含まれています。しかし、それでもTfidfVectorizerはストップワードのリストを受け入れず、機能リストにそれらのワードを表示できます。以下は私のコードです
from sklearn.feature_extraction import text
my_stop_words = text.ENGLISH_STOP_WORDS.union(my_words)
vectorizer = TfidfVectorizer(analyzer=u'Word',max_df=0.95,lowercase=True,stop_words=set(my_stop_words),max_features=15000)
X= vectorizer.fit_transform(text)
TfidfVectorizerでstop_wordsをstop_words = my_stop_wordsとして設定することも試みました。しかし、それでも機能しません。助けてください。
次に例を示します。
from sklearn.feature_extraction import text
from sklearn.feature_extraction.text import TfidfVectorizer
my_stop_words = text.ENGLISH_STOP_WORDS.union(["book"])
vectorizer = TfidfVectorizer(ngram_range=(1,1), stop_words=my_stop_words)
X = vectorizer.fit_transform(["this is an Apple.","this is a book."])
idf_values = dict(Zip(vectorizer.get_feature_names(), vectorizer.idf_))
# printing the tfidf vectors
print(X)
# printing the vocabulary
print(vectorizer.vocabulary_)
この例では、2つのサンプルドキュメントのtfidfベクトルを作成しました。
"This is a green Apple."
"This is a machine learning book."
デフォルトでは、this
、is
、a
、およびan
はすべてENGLISH_STOP_WORDS
リスト。また、ストップワードリストにbook
を追加しました。これは出力です:
(0, 1) 0.707106781187
(0, 0) 0.707106781187
(1, 3) 0.707106781187
(1, 2) 0.707106781187
{'green': 1, 'machine': 3, 'learning': 2, 'Apple': 0}
ご覧のとおり、ストップワードとしてリストしたため、Word book
も機能のリストから削除されています。その結果、tfidfvectorizerは、手動で追加されたワードをストップワードとして受け入れ、ベクトルの作成時にワードを無視しました。
これはここで答えられます: https://stackoverflow.com/a/24386751/732396
sklearn.feature_extraction.text.ENGLISH_STOP_WORDS
はフリーズセットですが、そのコピーを作成して独自の単語を追加し、その変数をstop_words
引数にリストとして渡すことができます。
Scikit-learnで使用する場合は、リストをいつでも使用できます。
from nltk.corpus import stopwords
stop = list(stopwords.words('english'))
stop.extend('myword1 myword2 myword3'.split())
vectorizer = TfidfVectorizer(analyzer = 'Word',stop_words=set(stop))
vectors = vectorizer.fit_transform(corpus)
...
このメソッドの唯一の欠点は、セットに対して、リストに重複が含まれる可能性があることです。そのため、TfidfVectorizer
の引数として使用するときにリストを変換します。