【问题标题】:Is it possible to calucate the edit distance between a regexp and a string?是否可以计算正则表达式和字符串之间的编辑距离?
【发布时间】:2010-10-20 02:26:03
【问题描述】:

如果是,请说明方法。

Re: 什么是距离 -- “两个字符串之间的距离定义为将一个字符串转换为另一个字符串所需的最少编辑次数。”

例如,xyz 到 XYZ 需要 3 次编辑,因此字符串 xYZ 更接近 XYZ 和 xyz。

如果模式是 [0-9]{3} 或例如 123,则 a23 将比 ab3 更接近模式。

如何找到正则表达式和不匹配字符串之间的最短距离?

以上是Damerau–Levenshtein距离算法。

【问题讨论】:

  • 我认为我们需要更多信息

标签: regex distance levenshtein-distance


【解决方案1】:

您可以使用有限状态机高效地执行此操作(即时间线性)。如果您使用转换器,您甚至可以相当紧凑地编写转换规范,并进行比简单的插入或删除更细微的转换 - 请参阅 wikipedia for Finite State Transducer 作为起点,以及诸如 FSA 工具包或 FSA6 之类的软件(它也有一个不完全稳定的web-demo)。有很多用于 FSA 操作的库;我不想建议前两个是您唯一或最好的选择,只是我听说过的两个。

但是,如果您只想要高效的近似搜索,则存在一个不太灵活但已经为您实现的选项:TRE,它有一个返回匹配成本的approximate matching function - 即,从你的角度来看,到比赛的距离。

【讨论】:

  • @Eamon Nerbonne: 谢谢 Eamon,我本来想问你其他问题,但我想我会努力回答……这是一个巨大的帮助,TRE 看起来很棒!干杯! (你摇滚!)
  • @Eamon Nerbonne: +1 作为一个正则表达式大师,有一个很好的答案,并编辑我的问题...... :-)
【解决方案2】:

如果您的意思是最接近的匹配字符串和样本之间的 levenshtein 距离最小的字符串,那么我很确定可以做到,但是您必须自己将 Regex 转换为 DFA,然后尝试匹配并且每当某事失败时,不确定地继续,就好像它已经通过并跟踪数字差异。您可以为此使用 A* 搜索或类似的东西,但效率会很低(O(2^n) 最坏的情况)

【讨论】:

    猜你喜欢
    • 2015-07-09
    • 1970-01-01
    • 2011-01-09
    • 2012-10-23
    • 2023-03-07
    • 2015-06-13
    • 1970-01-01
    • 2021-07-15
    • 2016-05-25
    相关资源
    最近更新 更多