使用sklearn查找文档中特定单词的tf-idf分数

7

我有一段代码,在一组文档上运行基本的TF-IDF向量化程序,返回一个D X F的稀疏矩阵,其中D是文档数量,F是术语数量。没问题。

但是要如何找到文档中特定术语的TF-IDF分数?即是否存在某种词典,将术语(以它们的文本表示)与它们在结果稀疏矩阵中的位置对应起来?


请检查答案,https://dev59.com/zFsW5IYBdhLWcg3w7KtL#38770335 - sud_
3个回答

11
是的。请查看您拟合/转换后的TF-IDF向量器上的.vocabulary_
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_

这是一个形式为:

{单词 : 数组中的列索引}

的字典。


8

以下是使用CountVectorizerTfidfTransformer的另一种解决方案,用于查找给定单词的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)

这只提供了术语的IDF,而不是术语的TF-IDF(TF-IDF是特定于语料库中一个术语和一个文档的。) - Be Chiller Too

0
@kinkajou,TF和IDF不同,但它们属于同一算法-TF-IDF,即词项频率-逆文档频率。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接