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

2024-05-09 17:52:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有在一个文档集合上运行基本TF-I D F矢量器的代码,它返回一个D X F的稀疏矩阵,其中D是文档数,F是术语数。没问题。

但如何在文件中找到特定术语的TF-IDF分数?i、 在术语(在它们的文本表示中)和它们在结果稀疏矩阵中的位置之间是否有某种字典?


Tags: 文件代码文档文本字典tf矢量矩阵
3条回答

@kinkajou,No,TF和IDF是不同的,但它们属于同一算法TF-IDF,即术语频率逆文档频率

这是另一个有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)

是的。请参见已安装/已转换的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_

这是一本字典的形式:

{word : column index in array}

相关问题 更多 >