我不熟悉字符串相似性算法,除了 Levenshtein 距离,因为这就是我正在使用的算法,但结果并不理想。
所以我有点想实现一个递归算法的想法,但我想知道它是否已经存在,这样我就可以利用其他人的专业知识。
以下是算法示例:
字符串 1:“保罗·约翰逊”
字符串 2:“约翰·保尔森”
第 1 步:找到所有最长的匹配项
第一场比赛:“保罗”
第 2 场比赛:“约翰”
第 3 场比赛:“儿子”
第 4 场比赛:“”
第 2 步:使用以下公式计算每个匹配项的分数:((match.len/string.len)*match.len) 这允许更长的字符串以基于字符串长度的平衡比率进行更多加权。
比赛 1:(4/12)*4 = 1.333...
第 2 场比赛:1.333...
第 3 场比赛:0.75
第 4 场比赛:0.083
第 3 步:在更大的范围内执行第 1 步和第 2 步,(匹配的匹配项。)这我还没有完全弄清楚。但我的想法是,如果“儿子”出现在“保罗·约翰”之后,并且出现在“约翰·保罗”之后,那么这应该很重要。
第四步:将所有计算出来的分数相加。
分数:1.333 + 1.333 + .75 + .083333 = 3.4999...(加上第 3 步产生的任何分数)
这对任何人来说都很熟悉吗?我希望其他人已经麻烦按照这些思路实际制作算法,这样我就不必自己弄清楚了。