据我了解,文档 1 和文档 2 可能有不同数量的键。你想得到 0 和 1 之间的最终相似性评估。如果是这样,我会提出以下算法:
- 最大值之和 vals 等于 0。
- 从 doc-doc 矩阵中选择最大值并将其添加到最大值总和。瓦尔斯。
- 从矩阵中删除具有最大值的行和列。
- 重复步骤 2-3,直到行或列结束。
- 面额 最大值之和。vals 按两个文本中的平均关键字数计算。
如果两个文档的长度相同,并且 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
}
在蟒蛇 -
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