私が理解したように、ドキュメント1とドキュメント2のキーの数は異なる場合があります。そして、あなたは0と1の間の最終的な類似性評価を得たいと思っています。もしそうなら、私は以下のアルゴリズムを提案します:
- 最大の合計 valsは0です。
- doc-docマトリックスから最大値を選択し、それをSum of maxに追加します。値。
- 最大値を持つ行と列を行列から削除します。
- 行または列が終了するまで、手順2〜3を繰り返します。
- 最大の合計を指定します。2つのテキストのキーワードの平均数による値。
両方のドキュメントが同じ長さで、Doc 1のすべての単語がDoc 2で同等である場合、最終的な見積もりは1になります。
あなたはソフトウェアについて言及していませんが、使用していますが、そのような類似性を計算する関数のRの例を次に示します(入力としてクラスマトリックスのオブジェクトを取ります):
eval.sim <- function(sim.matrix){
similarity <- 0
denominator <- sum(dim(sim.matrix)) / 2
for(i in 1:(min(c(nrow(sim.matrix), ncol(sim.matrix))) - 1)){
extract <- which(sim.matrix == max(sim.matrix), arr.ind=T)[1, ]
similarity <- similarity + sim.matrix[extract[1], extract[2]]
sim.matrix <- sim.matrix[-extract[1], -extract[2]]
}
similarity <- similarity + max(sm.copy)
similarity <- similarity / denominator
}
Pythonでは-
import numpy as np
def score_matrix(sim_matrix):
similarity = 0
denominator = sum(sim_matrix.shape) / 2
for i in range(min(sim_matrix.shape)):
x, y = np.where(sim_matrix == np.max(sim_matrix))[0][0], np.where(sim_matrix == np.max(sim_matrix))[1][0]
similarity += sim_matrix[x, y]
sim_matrix = np.delete(sim_matrix,(x),axis=0)
sim_matrix = np.delete(sim_matrix,(y),axis=1)
return similarity / denominator