2016-03-21 8 views
0

私はいくつかのドキュメントを持っており、選択したドキュメントに最もよく似たkドキュメントを探したいと思います。再現可能な例のために、のは、kは1で、マイドキュメントはこれらの最も類似したドキュメントを探す

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

は、その後、私は私がやりたいことは以下であると考えているとしましょう。 (私は多分、後で私がTfの-IDFおよびハッシュ・ベクトル化を使用したいと思いますにもかかわらず、透明性とシンプルさのためCountVectorizerを使用しています。)

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 =完全マッチ)。しかし、乗算を行うためには、(要素的な乗算に苦しんで)貧弱な行列に変換されたので、今私はtodense()メンバーを持たないこのCSRフォーマットの行列を持っています。私の小さな事例を超えて拡大するものではない)。

私が今思っていること(しかしこれまでには分かっていない)は、「doc_matchのトップk要素のインデックスは何ですか? (kが1でなくても)。

+0

は 'ft.dot(one_doc_code.T)' 'と等価doc_match'ですか? – Jarad

答えて

-1

あなたが望むすべてが最高のスコアを持っているdoc_matchにおけるインデックスである場合は、あなたが行うことができます:

sorted_indices = np.argsort(doc_match) 
doc_match_vals_sorted = doc_match[sorted_indices] 
関連する問題