java - 如何标准化 0 到 1 之间的 Levenshtein 距离
问题描述
我必须将 Levenshtein 距离归一化在 0 到 1 之间。我看到 SO 中有不同的变化。
我正在考虑采用以下方法:
- 如果有两个字符串,s1 和 s2
- len = max(s1.length(), s2.length());
- normalized_distance = float(len - levenshteinDistance(s1, s2)) / float(len);
那么最高分 1.0 表示完全匹配,0.0 表示不匹配。
但我在这里看到了变化: 使用 levenshtein 距离的两个全文相似性其中 1- 距离(a,b)/最大(a.length,b.length)
我想知道Java中有规范的代码实现吗?我知道org.apache.commons.text
只实现 LevenshteinDistance 而不是标准化的 LevenshteinDistance。
解决方案
您的第一个答案以“两种变体的效果应该几乎相同”开头。标准化 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 问题。
推荐阅读
- php - Wordpress,插件 PageSpeed Ninja,警告 touch():Utime 失败
- powerbi - CALCULATE(m, x=red) 与 CALCULATE(m, KEEPFILTERS(x=red)) 之间的差异
- javascript - 基于类名的条件渲染
- angular - 在 Angular 中将路由逻辑与组件逻辑分开
- python - 为什么这两个代码不同?
- android-studio - Android Studio 显示“未翻译...”
- python - 将 DatetimeIndex 扩展到 Python pandas 中的行
- javascript - 箭头函数这总是窗口还是全局?箭头函数是否可能返回不是窗口或全局的 THIS?
- java - Maven Jib 插件:401 Unauthorized
- swift - 如何在更改当前 ViewController 时动态隐藏或添加 BarButtonItem?