【问题标题】:Find the tf-idf score of specific words in documents using sklearn使用 sklearn 查找文档中特定单词的 tf-idf 分数
【发布时间】:2015-09-07 16:17:00
【问题描述】:

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

但是如何找到文档中特定术语的 TF-IDF 分数?即在术语(在它们的文本表示中)和它们在生成的稀疏矩阵中的位置之间是否存在某种字典?

【问题讨论】:

标签: python scikit-learn tf-idf


【解决方案1】:

这是使用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)

【讨论】:

  • 这里只提供term的IDF,不提供term的TF-IDF(TF-IDF特定于语料库中的一个term和一个文档)
【解决方案2】:

@kinkajou,不,TF和IDF不一样但是属于同一个算法——TF-IDF,即词频逆文档频率

【讨论】:

    【解决方案3】:

    是的。在您的拟合/转换的 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}

    【讨论】:

      猜你喜欢
      • 2018-08-25
      • 2016-03-30
      • 2017-12-27
      • 2017-07-05
      • 1970-01-01
      • 2016-07-02
      • 2016-08-07
      • 2019-07-08
      • 2019-11-16
      相关资源
      最近更新 更多