2016-03-21 20 views
0

Bazı belgelerim var ve seçilen belgeye en çok benzeyen k belgelerini bulmak istiyorum. Bir tekrarlanabilir Örnekte, en k 1 ve belgelerim buEn benzer belgeleri bulma

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'] 

Sonra ne yapmak istediğinizi aşağıda olduğunu düşünüyorum olduğunuzu varsayalım. (Ben belki daha sonra ben Tf-IDF ve karma vectorizer kullanmak isteyeceğinizi rağmen, şeffaflık ve basitlik için CountVectorizer kullanıyorum.)

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()) 

ve şimdi doc_match yakınlığını gösterir ağırlıklarla bir sütun vektörüdür maç (0 = kötü eşleşme, 1 = mükemmel eşleşme). Ama çarpma yapmak için, ben (çaresizlik, çarpma-çarpma çarpma karşısında), bir numpy matrisine dönüştürülmüş, şimdi bir todense() üyesi olmayan bu CSR format matrisine sahibim (sadece bak, bu benim küçük örneğimin ötesine geçemezdi.

Şimdi ne istediğimi düşünüyorum (ancak şu ana kadar çözemedim), "doc_match öğesinin üst k öğelerinin endeksleri nedir?" (k 1 olmasa bile). İstediğin en yüksek puanı var doc_match yılında endeksleri ise

+0

'doc_match' ft.dot (one_doc_code.T)' 'eşdeğer midir? – Jarad

cevap

-1

, yapabileceğiniz:

sorted_indices = np.argsort(doc_match) 
doc_match_vals_sorted = doc_match[sorted_indices] 
İlgili konular