首页 > 解决方案 > 如何标准化 0 到 1 之间的 Levenshtein 距离

问题描述

我必须将 Levenshtein 距离归一化在 0 到 1 之间。我看到 SO 中有不同的变化。

我正在考虑采用以下方法:

那么最高分 1.0 表示完全匹配,0.0 表示不匹配。

但我在这里看到了变化: 使用 levenshtein 距离的两个全文相似性其中 1- 距离(a,b)/最大(a.length,b.length)

Levenshtein(编辑)距离标准化的差异?

归一化编辑距离公式说明

我想知道Java中有规范的代码实现吗?我知道org.apache.commons.text只实现 LevenshteinDistance 而不是标准化的 LevenshteinDistance。

https://commons.apache.org/proper/commons-text/apidocs/org/apache/commons/text/similarity/LevenshteinDistance.html

标签: javalevenshtein-distance

解决方案


您的第一个答案以“两种变体的效果应该几乎相同”开头。标准化 LevenshteinDistance 不存在的原因是因为您(或其他人)认为不适合实施它。此外,一旦你有了 Levenshtein 距离,这似乎是相当微不足道的:

private double normalizedLevenshteinDistance(double levenshtein, String s1, String s2) {
    if ((s1.length() > s2.length() || (s1.length() == s2.length()) {
        return levenshtein/s1.length();
    }
    else if (s2.length() > s1.length()) {
        return levenshtein/s2.length();
    }
}

3 天后,一旦它被彻底撕成碎片,我会将其添加为 commons-text 上的 Github 问题。


推荐阅读