2017-02-02 10 views
1

私は100のドキュメントを持っています(各ドキュメントはそのドキュメントの単純なリストです)。 TF-IDF行列を作成して、ランクごとに小さな単語検索を作成したいと考えています。私はtfidfVectorizerを使って試しましたが、構文が失われました。どんな助けでも大歓迎です。よろしく。TF-IDF行列の作成Python 3.6

編集:私は文字列にリストを変換し、親リストにそれらを追加しました:

vectorizer = TfidfVectorizer(vocabulary=word_set) 
matrix = vectorizer.fit_transform(doc_strings) 
print(matrix) 

ここword_setが可能明確な言葉とdoc_stringsのセットは、文字列として各ドキュメントが含まれているリストであります;私は行列を印刷するときしかし、私は以下のような出力が得られます。

(0, 839) 0.299458532286 
    (0, 710) 0.420878518454 
    (0, 666) 0.210439259227 
    (0, 646) 0.149729266143 
    (0, 550) 0.210439259227 
    (0, 549) 0.210439259227 
    (0, 508) 0.210439259227 
    (0, 492) 0.149729266143 
    (0, 479) 0.149729266143 
    (0, 425) 0.149729266143 
    (0, 401) 0.210439259227 
    (0, 332) 0.210439259227 
    (0, 310) 0.210439259227 
    (0, 253) 0.149729266143 
    (0, 216) 0.210439259227 
    (0, 176) 0.149729266143 
    (0, 122) 0.149729266143 
    (0, 119) 0.210439259227 
    (0, 111) 0.149729266143 
    (0, 46) 0.210439259227 
    (0, 26) 0.210439259227 
    (0, 11) 0.149729266143 
    (0, 0) 0.210439259227 
    (1, 843) 0.0144007295367 
    (1, 842) 0.0288014590734 
    (1, 25) 0.0144007295367 
    (1, 24) 0.0144007295367 
    (1, 23) 0.0432021886101 
    (1, 22) 0.0144007295367 
    (1, 21) 0.0288014590734 
    (1, 20) 0.0288014590734 
    (1, 19) 0.0288014590734 
    (1, 18) 0.0432021886101 
    (1, 17) 0.0288014590734 
    (1, 16) 0.0144007295367 
    (1, 15) 0.0144007295367 
    (1, 14) 0.0432021886101 
    (1, 13) 0.0288014590734 
    (1, 12) 0.0144007295367 
    (1, 11) 0.0102462376715 
    (1, 10) 0.0144007295367 
    (1, 9) 0.0288014590734 
    (1, 8) 0.0288014590734 
    (1, 7) 0.0144007295367 
    (1, 6) 0.0144007295367 
    (1, 5) 0.0144007295367 
    (1, 4) 0.0144007295367 
    (1, 3) 0.0144007295367 
    (1, 2) 0.0288014590734 
    (1, 1) 0.0144007295367 

は、この正しいとされるようであれば、私は特定の文書内の指定された単語のランクを検索することができますか。

答えて

5

コードは正常に動作しています。私はいくつかの文章で例を挙げています。ここでは、1つの文がドキュメントに相当します。うまくいけば、これはあなたを助けるでしょう。

from sklearn.feature_extraction.text import TfidfVectorizer 

corpus = ["welcome to stackoverflow my friend", 
      "my friend, don't worry, you can get help from stackoverflow"] 
vectorizer = TfidfVectorizer() 
matrix = vectorizer.fit_transform(corpus) 
print(matrix) 

我々はfit_transform()は、TF-IDF加重文書期の行列を返すことを知っているよう。

print()文は次のように出力します

(0, 2) 0.379303492809 
    (0, 6) 0.379303492809 
    (0, 7) 0.379303492809 
    (0, 8) 0.533097824526 
    (0, 9) 0.533097824526 
    (1, 3) 0.342619853089 
    (1, 5) 0.342619853089 
    (1, 4) 0.342619853089 
    (1, 0) 0.342619853089 
    (1, 11) 0.342619853089 
    (1, 10) 0.342619853089 
    (1, 1) 0.342619853089 
    (1, 2) 0.243776847332 
    (1, 6) 0.243776847332 
    (1, 7) 0.243776847332 

だから、どのように我々はこの行列を解釈することができますか?タプル(x, y)と各行の値を見ることができます。ここでは、タプルはドキュメント番号を表します。 (この場合は文番号)と機能番号。

わかりやすくするために、機能のリスト(ここでは機能は単語です)とそのインデックスを印刷できます。

for i, feature in enumerate(vectorizer.get_feature_names()): 
    print(i, feature) 

これは、出力:

0 can 
1 don 
2 friend 
3 from 
4 get 
5 help 
6 my 
7 stackoverflow 
8 to 
9 welcome 
10 worry 
11 you 

ので、welcome to stackoverflow my friend文は次のように変換されます。

(0, 2) 0.379303492809 
(0, 6) 0.379303492809 
(0, 7) 0.379303492809 
(0, 8) 0.533097824526 
(0, 9) 0.533097824526 

たとえば、最初の2つの行の値は、次のように解釈できます。

0 = sentence no. 
2 = word index (index of the word `friend`) 
0.379303492809 = tf-idf weight 

0 = sentence no. 
6 = word index (index of the word `my`) 
0.379303492809 = tf-idf weight 

TF-IDF値から、あなたが見ることができ、言葉welcometoが文1

内の他の言葉よりも高いランクすべきであるあなたはAのランクを検索するには、この例を拡張することができますあなたの必要性を満たすために、特定の文章や文書に与えられた言葉。

+0

ありがとうございます。 –