当前位置:  开发笔记 > 编程语言 > 正文

Scikit Learn TfidfVectorizer:如何获得具有最高tf-idf分数的前n个术语

如何解决《ScikitLearnTfidfVectorizer:如何获得具有最高tf-idf分数的前n个术语》经验,为你挑选了1个好方法。

我正在研究关键字提取问题.考虑一般情况

tfidf = TfidfVectorizer(tokenizer=tokenize, stop_words='english')

t = """Two Travellers, walking in the noonday sun, sought the shade of a widespreading tree to rest. As they lay looking up among the pleasant leaves, they saw that it was a Plane Tree.

"How useless is the Plane!" said one of them. "It bears no fruit whatever, and only serves to litter the ground with leaves."

"Ungrateful creatures!" said a voice from the Plane Tree. "You lie here in my cooling shade, and yet you say I am useless! Thus ungratefully, O Jupiter, do men receive their blessings!"

Our best blessings are often the least appreciated."""

tfs = tfidf.fit_transform(t.split(" "))
str = 'tree cat travellers fruit jupiter'
response = tfidf.transform([str])
feature_names = tfidf.get_feature_names()

for col in response.nonzero()[1]:
    print(feature_names[col], ' - ', response[0, col])

这给了我

  (0, 28)   0.443509712811
  (0, 27)   0.517461475101
  (0, 8)    0.517461475101
  (0, 6)    0.517461475101
tree  -  0.443509712811
travellers  -  0.517461475101
jupiter  -  0.517461475101
fruit  -  0.517461475101

这很好.对于任何新文档,有没有办法获得最高tfidf得分的前n项?



1> hume..:

你必须做一些歌曲和舞蹈,以使矩阵成为numpy数组,但这应该做你正在寻找的:

feature_array = np.array(tfidf.get_feature_names())
tfidf_sorting = np.argsort(response.toarray()).flatten()[::-1]

n = 3
top_n = feature_array[tfidf_sorting][:n]

这给了我:

array([u'fruit', u'travellers', u'jupiter'], 
  dtype='

这个argsort电话真的是有用的,这里是它的文档.我们必须这样做,[::-1]因为argsort只支持从小到大的排序.我们调用flatten将尺寸减小到1d,以便排序的索引可用于索引1d特征数组.请注意,包含调用flatten仅在您一次测试一个文档时才有效.

另外,另一方面,你的意思是什么tfs = tfidf.fit_transform(t.split("\n\n"))?否则,多行字符串中的每个术语都被视为"文档".\n\n相反,使用意味着我们实际上正在查看4个文档(每行一个),这在考虑tfidf时更有意义.

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有