2016-03-21 115 views
0

我有一些文件,我想找到與選定文件最相似的k個文件。對於重複的例子起見,假設k爲1和我的文檔是這些尋找k最相似的文件

documents = ['Two roads diverged in a yellow wood,', 
      'And sorry I could not travel both', 
      'And be one traveler, long I stood', 
      'And looked down one as far as I could', 
      'To where it bent in the undergrowth'] 

那麼我想我想要做的就是以下。 (我使用CountVectorizer透明度和簡單性,儘管也許以後我會想使用TF-IDF和散列矢量器。)

from sklearn.feature_extraction.text import CountVectorizer 
import numpy as np 

vectorizer = CountVectorizer(analyzer='word') 
ft = vectorizer.fit_transform(documents) 
one_doc = documents[1] 
one_doc_code = vectorizer.transform([one_doc]) 
doc_match = np.matrix(ft) * np.matrix(one_doc_code.transpose()) 

現在doc_match是權重的列向量指示的親近匹配(0 =錯配,1 =完美匹配)。但爲了進行乘法,我(在絕望中,面對元素方面的乘法)轉換成了一個numpy矩陣,所以現在我有了這個沒有todense()成員的CSR格式矩陣(所以我可以只是看,不會超出我的小例子)。

我想我現在想要的是什麼(但目前還沒有弄清楚)是如何說「doc_match的前k個元素的索引是什麼?」 (即使k不是1)。

+0

是'doc_match'相當於'ft.dot(one_doc_code.T)'? – Jarad

回答

-1

如果你想要的是doc_match具有最高得分的指標,你可以這樣做:

sorted_indices = np.argsort(doc_match) 
doc_match_vals_sorted = doc_match[sorted_indices]