- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有以下实现,但我想添加一个阈值,所以如果结果要大于它,就停止计算并返回。
我该怎么做?
编辑:这是我当前的代码,threshold
尚未使用...目标是使用它
public static int DamerauLevenshteinDistance(string string1, string string2, int threshold)
{
// Return trivial case - where they are equal
if (string1.Equals(string2))
return 0;
// Return trivial case - where one is empty
if (String.IsNullOrEmpty(string1) || String.IsNullOrEmpty(string2))
return (string1 ?? "").Length + (string2 ?? "").Length;
// Ensure string2 (inner cycle) is longer
if (string1.Length > string2.Length)
{
var tmp = string1;
string1 = string2;
string2 = tmp;
}
// Return trivial case - where string1 is contained within string2
if (string2.Contains(string1))
return string2.Length - string1.Length;
var length1 = string1.Length;
var length2 = string2.Length;
var d = new int[length1 + 1, length2 + 1];
for (var i = 0; i <= d.GetUpperBound(0); i++)
d[i, 0] = i;
for (var i = 0; i <= d.GetUpperBound(1); i++)
d[0, i] = i;
for (var i = 1; i <= d.GetUpperBound(0); i++)
{
for (var j = 1; j <= d.GetUpperBound(1); j++)
{
var cost = string1[i - 1] == string2[j - 1] ? 0 : 1;
var del = d[i - 1, j] + 1;
var ins = d[i, j - 1] + 1;
var sub = d[i - 1, j - 1] + cost;
d[i, j] = Math.Min(del, Math.Min(ins, sub));
if (i > 1 && j > 1 && string1[i - 1] == string2[j - 2] && string1[i - 2] == string2[j - 1])
d[i, j] = Math.Min(d[i, j], d[i - 2, j - 2] + cost);
}
}
return d[d.GetUpperBound(0), d.GetUpperBound(1)];
}
}
最佳答案
这是关于你的回答:Damerau - Levenshtein Distance, adding a threshold(抱歉不能发表评论,因为我还没有 50 个代表)
我认为你在这里犯了一个错误。你初始化了:
var minDistance = threshold;
你的更新规则是:
if (d[i, j] < minDistance)
minDistance = d[i, j];
此外,您的提前退出标准是:
if (minDistance > threshold)
return int.MaxValue;
现在,观察上面的 if 条件永远不会成立!您应该将 minDistance
初始化为 int.MaxValue
关于c# - Damerau - Levenshtein 距离,添加一个阈值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3841507/
我正在尝试实现真正高效的 Clojure 函数来计算 Damerau-Levenshtein distance 。我决定使用this algorithm (所附源代码应为 C++)用于计算 Leven
Levenshtein 距离可以使用两行以这种方式迭代计算: https://en.wikipedia.org/wiki/Levenshtein_distance#Iterative_with_two
我正在尝试在 JS 中创建一个 damerau-levenshtein 距离函数。 我在 WIkipedia 上找到了关于该算法的描述,但它们没有实现。它说: To devise a proper a
对于讲荷兰语的人来说,两个字符“ij”被认为是一个很容易与“y”交换的字母。 对于我正在从事的项目,我想要一个 Damerau–Levenshtein distance 的变体将“ij”和“y”之间的
我正在寻找 Damerau–Levenshtein 的实现PHP 的算法,但我的 friend google 似乎找不到任何东西。到目前为止,我必须使用 PHP 实现的 Levenshtein(没有
Damerau-Levenshtein 距离如下: "abcd", "aacd" => 1 DL distance "abcd", "aadc" => 2 DL distance 关于编辑距离的更多信
Damerau-Levenshtein 距离如下: "abcd", "aacd" => 1 DL distance "abcd", "aadc" => 2 DL distance 关于编辑距离的更多信
我正在为 Microsoft Office 套件构建一个私有(private)拼写检查器。我正在对拼写错误及其潜在修复进行字符串比较,以确定我想要包含哪些更正。 我对用于字符串比较的加权 Damera
我带着另一个较长的问题回来了。尝试了一些基于 Python 的 Damerau-Levenshtein编辑距离实现,I finally found the one listed below作为 edi
我有以下 cython 实现计算 2 个字符串的 Damerau–Levenshtein 距离,基于 this Wikipedia article ,但目前它对我的需求来说太慢了。我有一个大约 600
我坐在这里用 Java 为我的主程序编写一些算法(这是迄今为止的第一个)。我对 levenshtein 算法进行了很好的编程,这要归功于 wiki 对新手的伪代码非常好,还有一个很好的教程 :D 然后
如何在 Damerau-Levenshtein 距离算法的实现中禁用删除计数,或者如果已经实现了其他算法,请指出。 示例(禁用删除计数): string1:你好吗? string2:怎么样? 距离:
我有以下实现,但我想添加一个阈值,所以如果结果要大于它,就停止计算并返回。 我该怎么做? 编辑:这是我当前的代码,threshold 尚未使用...目标是使用它 public static i
我正在尝试使用 Jellyfish使用模糊字符串。我注意到 Damerau–Levenshtein distance 的一些奇怪行为算法。例如: import jellyfish as jf In [
我正在寻找这样一种算法,但它是一种在单词之间而不是在字母之间进行替换的算法。有这样的算法吗? 我正在寻找 SQL Server 的实现,但算法的名称就足够了。 最佳答案 据我所知,没有理由不能只使用现
这是我的代码: #http://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance # used for fuzzy matching
有谁知道 Damerau–Levenshtein 距离算法的 MySQL 实现是一个存储过程/函数,它将单个指定字符串作为参数并在特定表的特定字段中查找字符串的模糊匹配? 我找到了各种比较两个指定字符
我想知道如何修改 Damerau-Levenshtein 算法以跟踪将源字符串更改为目标字符串所需的特定字符转换。 Levenshtein distance 已回答此问题,但我找不到 DL 距离的任何
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 问题必须表现出对正在解决的问题的最低限度的理解。告诉我们您尝试过的方法、为什么不起作用以及它应该 起作用
最近在MySQL中实现了Damerau-Levenshtein算法的UDF,想知道有没有办法把Damerau-Levenshtein算法的模糊匹配和Like函数的通配符搜索结合起来?如果我在表中有以下
我是一名优秀的程序员,十分优秀!