2017-02-02 23 views
1

У меня есть 100 документов (каждый документ представляет собой простой список слов в этом документе). Теперь я хочу создать TF-IDF-матрицу, чтобы создать небольшой поиск слов по рангу. Я попробовал это с помощью tfidfVectorizer, но потерялся в синтаксисе. Любая помощь приветствуется. С уважением.Создание матрицы TF-IDF Python 3.6

Edit: Я конвертировал списки в строки и добавил их в родительском список:

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

Ваш код работает нормально. Я приведу пример с несколькими предложениями. Здесь одно предложение эквивалентно документу. Надеюсь, это поможет вам.

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() возвращает тс-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 

Например, первые две строки могут быть интерпретированы следующим образом.

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 

От ТФ-IDF значений, вы можете увидеть, слова welcome и to должны занять место выше, чем другие слова в предложении 1.

Вы можете расширить этот пример, чтобы искать в ранг данное слово в конкретном предложении или документе для удовлетворения ваших потребностей.

+0

Благодарим вас за разъяснение. –