Найдите оценку tf-idf определенных слов в документах с помощью sklearn

У меня есть код, который запускает базовый векторизатор TF-IDF для коллекции документов, возвращая разреженную матрицу D X F, где D - количество документов, а F - количество терминов. Без проблем.

Но как мне найти оценку TF-IDF определенного термина в документе? т.е. есть ли какой-то словарь между терминами (в их текстовом представлении) и их положением в результирующей разреженной матрице?


person WhiteTiger    schedule 22.06.2015    source источник
comment
проверьте ответ, stackoverflow.com/questions/34449127/   -  person sud_    schedule 26.11.2018


Ответы (3)


да. См. .vocabulary_ на вашем подогнанном / преобразованном векторизаторе TF-IDF.

In [1]: from sklearn.datasets import fetch_20newsgroups

In [2]: data = fetch_20newsgroups(categories=['rec.autos'])

In [3]: from sklearn.feature_extraction.text import TfidfVectorizer

In [4]: cv = TfidfVectorizer()

In [5]: X = cv.fit_transform(data.data)

In [6]: cv.vocabulary_

Это словарь вида:

{word : column index in array}

person Ryan    schedule 22.06.2015

Это еще одно решение с CountVectorizer и TfidfTransformer, которое находит Tfidf оценку для данного слова:

from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer
# our corpus
data = ['I like dog', 'I love cat', 'I interested in cat']

cv = CountVectorizer()

# convert text data into term-frequency matrix
data = cv.fit_transform(data)

tfidf_transformer = TfidfTransformer()

# convert term-frequency matrix into tf-idf
tfidf_matrix = tfidf_transformer.fit_transform(data)

# create dictionary to find a tfidf word each word
word2tfidf = dict(zip(cv.get_feature_names(), tfidf_transformer.idf_))

for word, score in word2tfidf.items():
    print(word, score)

Вывод:

(u'love', 1.6931471805599454)
(u'like', 1.6931471805599454)
(u'i', 1.0)
(u'dog', 1.6931471805599454)
(u'cat', 1.2876820724517808)
(u'interested', 1.6931471805599454)
(u'in', 1.6931471805599454)
person Amir    schedule 28.06.2018

@kinkajou, Нет, TF и ​​IDF не одно и то же, но они принадлежат одному алгоритму - TF-IDF, т.е. частота термина Обратный документ Частота

person developer    schedule 05.07.2019