2012-08-08 106 views
6

好吧,所以我有点困惑。然而,这应该是一个简单直接的问题。TF-IDF简单使用 - NLTK/Scikit学习

计算针对整个文集文档的TF-IDF矩阵后,我得到的非常相似,这样的结果:

array([[ 0.85..., 0. ..., 0.52...], 
     [ 1. ..., 0. ..., 0. ...], 
     [ 1. ..., 0. ..., 0. ...], 
     [ 1. ..., 0. ..., 0. ...], 
     [ 0.55..., 0.83..., 0. ...], 
     [ 0.63..., 0. ..., 0.77...]]) 

如何使用这个结果来获得对搜索最相似的文档查询?基本上我正在尝试重新创建维基百科的搜索栏。基于搜索查询,我想从维基百科返回最相关的文章。在这种情况下,有6篇文章(行),搜索查询包含3个词(列)。

我是将所有结果加在列中还是将所有行加起来?最重要的是最大的价值还是最重要的价值?

回答

4

您是否熟悉cosine similarity?对于每篇文章(向量A)计算其与查询(向量B)的相似度。然后按降序排列并选择最佳结果。如果你愿意重构,gensim库很棒。

+1

那么我实际上是遵循本教程:http://pyevolve.sourceforge.net/wordpress/?p = 1589 ...什么没有意义的是如何使用原始文章和搜索查询之间的TF-IDF矢量。 – tabchas 2012-08-08 18:31:47

+1

如果你使用tf-idf作为你的加权方案,你仍然只想规范你的查询。您的矩阵包含三个术语,所有这些术语都在查询中表示;因此查询的原始频率向量为(1,1,1)。 sqrt((1^2)+(1^2)+(1^2))= 1.73,1/1.73 = 0.57。所以你的查询向量是(0.57,0.57,0.57)。现在您可以将查询视为另一个文档。这个查询向量和其他一些文档向量的余弦相似度是它的点积。对于第一篇文章:((.57 * .85)+(.57 * 0)+(.57 * .52))= 0.2964。对所有文章重复此操作,获得最高分。 – verbsintransit 2012-08-08 19:51:02

+0

所以我不需要训练某种分类器? – tabchas 2012-08-08 19:53:10