2012-08-08 46 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