web-dev-qa-db-ja.com

SklearnのTfidfVectorizer変換を使用する

SklearnのTfidfVectorizerオブジェクトを使用して、1つのドキュメントのtf-idfベクトルを取得しようとしています。いくつかのトレーニングドキュメントに基づいて語彙を作成し、fit_transformを使用してTfidfVectorizerをトレーニングします。次に、特定のテストドキュメントのtf-idfベクトルを検索します。

from sklearn.feature_extraction.text import TfidfVectorizer

self.vocabulary = "a list of words I want to look for in the documents".split()
self.vect = TfidfVectorizer(sublinear_tf=True, max_df=0.5, analyzer='Word', 
                 stop_words='english')
self.vect.fit_transform(self.vocabulary)

...

doc = "some string I want to get tf-idf vector for"
tfidf = self.vect.transform(doc)

問題は、これがn行の行列を返すことです。ここで、nはdoc文字列のサイズです。文字列全体のtf-idfを表す単一のベクトルのみを返します。各文字を文書としてではなく、文字列を単一の文書として表示するにはどうすればよいですか?また、テキストマイニングは非常に新しいので、概念的に何か間違ったことをしている場合は、知っておくとよいでしょう。どんな助けも大歓迎です。

35
Sterling

特定の語彙についてのみtf-idfを計算する場合は、vocabulary引数をTfidfVectorizerコンストラクターに使用します。

vocabulary = "a list of words I want to look for in the documents".split()
vect = TfidfVectorizer(sublinear_tf=True, max_df=0.5, analyzer='Word', 
           stop_words='english', vocabulary=vocabulary)

次に、特定のcorpus、つまりドキュメントの反復可能値に合わせて、つまりカウントを計算するには、fitを使用します。

vect.fit(corpus)

方法 fit_transformは、

vect.fit(corpus)
corpus_tf_idf = vect.transform(corpus) 

最後に、transformメソッドはコーパスを受け入れます。そのため、単一のドキュメントの場合、リストとして渡すか、各シンボルがドキュメントであるシンボルの反復可能として扱われる必要があります。

doc_tfidf = vect.transform([doc])
45
alko