web-dev-qa-db-ja.com

sklearnのTfidfVectorizerのstop_wordsリストに単語を追加する

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として設定することも試みました。しかし、それでも機能しません。助けてください。

14
ac11

次に例を示します。

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

デフォルトでは、thisisa、および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は、手動で追加されたワードをストップワードとして受け入れ、ベクトルの作成時にワードを無視しました。

9
Pedram

これはここで答えられます: https://stackoverflow.com/a/24386751/732396

sklearn.feature_extraction.text.ENGLISH_STOP_WORDSはフリーズセットですが、そのコピーを作成して独自の単語を追加し、その変数をstop_words引数にリストとして渡すことができます。

2
yanhan

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の引数として使用するときにリストを変換します。

0
user2589273