1

我使用 google-diff-match-patch C# 库。我想测量两个文本之间的相似性。为此,我制作了这个 C# 代码:

List<DiffMatchPatch.Diff> lDiffs = dmpDiff.diff_main(sTexte1, sTexte2);
int iIndex = dmpDiff.diff_levenshtein(lDiffs);
double dsimilarity = 100 - ((double)iIndex / Math.Max(sTexte1.Length, sTexte2.Length) * 100);

相似度值介于 0 - 100 之间(0 == 完美匹配 - 100 == 完全不同)。

你认为这是一个好方法吗,这个计算是正确的吗?

4

1 回答 1

1

我已经查看diff_levenshteinAPI 主页,它给出了这个描述

给定一个差异,根据插入、删除或替换字符的数量来测量其 Levenshtein 距离。最小距离为 0 表示相等,最大距离为较长字符串的长度。

在下一行中,您将距离(变化测量)转换为原始字符串长度的百分比,然后从 100 中减去它。

double dsimilarity = 100 - ((double)iIndex / Math.Max(sTexte1.Length, sTexte2.Length) * 100);

所以,是的,这对我来说看起来不错。

我唯一的评论是原始算法使用 0 来表示完美匹配,而您使用的是 100,这可能会造成混淆。如果您对此感到满意,请让您为未来的维护者适当地评论它。

于 2013-09-30T08:55:59.283 回答