我正在寻找类似于具有字母相似度量的最大公共子序列算法的算法。我的意思是,已知算法将所有字母表字母视为完全不同,我的用例具有更易于编辑成另一个字母的字母表字母,因此它们应通过差异算法视为相似。
作为用法示例,您可能会想到将算法运算在文本行上,其中某些行与其他行更相似。
第4页的论文An O(ND) Difference Algorithm and Its Variations说明:考虑为每个边缘添加权重或成本。给对角线边缘权重0和非对角线边缘权重1 。我想选择从[0;1]
区间分配任何权重。
答案 0 :(得分:0)
最大公共子序列(LCS)问题通常由动态编程方法计算,您可以调整现有方法以将它们应用于您的用例。
在这个解释LCS如何工作的例子中(来自维基百科)https://en.wikipedia.org/wiki/Longest_common_subsequence_problem#Example,您应该考虑调整算法:
而不是得分:
score_j = socre_i + 1
,对于j = i +1
(也就是说,当您找到新的公共项目时添加1),当新项目添加到LCS时,您应该得分:
score_j = F(score_i, p(letter_i, letter_j))
无论如何。
p(letter_i, letter_j) is the probability to change from letter_i to letter_j
(即您所谈论的weight [0, 1]
)F
是一个聚合函数,从score_i
到score_j
知道概率p
。 例如,F
可以定义为operator +
。然后它会产生:
score_j = score_i + p(letter_i, letter_j))
或者更准确地说:
score_j = score_i + p(letter_i, letter_j)) x 1
(请将x 1
视为of a character
)
并且woud会给出2个子序列的最大相似度(字符数),您可以通过算法末尾的回溯找到它们。
您可以找到自己的函数F
以获得更好的结果。