【问题标题】:Finding a fuzzy match with bitap algorithm使用 bitap 算法寻找模糊匹配
【发布时间】:2009-11-29 08:47:47
【问题描述】:

最近,我查看了 bitap 算法的几种实现,但它们所做的都是找到模糊匹配的起点。我需要的是找到一个匹配。有一个例子:

假设我们有以下文本:abcdefg

还有一个模式:bzde

我们希望找到文本中所有出现的模式,最多有 1 个错误(考虑编辑距离)。

所以我需要算法返回:bcde。

是否有一种简单(或不简单=))的方法来做到这一点? 关于这个算法的原始文章没有回答这个问题。

感谢您的帮助。

【问题讨论】:

  • 这是作业吗?如果是这样,请标记它。

标签: algorithm string fuzzy-search


【解决方案1】:

作为一个简单的开始,您可以使用一系列正则表达式来处理它,在每个表达式中,您将 1 个字符替换为 . 通配符。使用( | ) 构造将这些表达式组合成一个以创建一个大的正则表达式。

另一种方法是扫描字符串,保留错误计数并在遇到太多错误时增加匹配的偏移量。

【讨论】:

  • 感谢您的回答。 1.我不认为正则表达式的方法会有用。让我们考虑一个将删除或插入作为编辑操作的情况。在这种情况下,我们不需要“。”在我们的正则表达式中,但类似'.{0,2}',我们将面临更多问题,尤其是当我们允许的错误计数大于1时。2.据我所知,我们应该看看矩阵之间的区别d_k 和 d_(k+1) 我们应该找出从 d_k 到 d_(k+1) 的编辑操作(插入、删除等)。对吗?
  • bitap 方法给出了匹配的开始,一旦你知道匹配从那个索引开始,找到结束就更容易了。您可以比较匹配和搜索字符串,直到错误数量太大或搜索字符串结束。如果您想从 bitap 算法本身导出结束索引,请查看它决定返回匹配的点以及它最后检查的索引。
猜你喜欢
  • 2010-09-11
  • 2011-07-04
  • 1970-01-01
  • 2010-10-04
  • 2011-02-22
  • 2019-10-03
  • 2016-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多