代码之家  ›  专栏  ›  技术社区  ›  RunLoop

确定2个字符串匹配的概率的最佳实践

  •  4
  • RunLoop  · 技术社区  · 15 年前

    我需要编写代码来确定两个字符串是否匹配,当其中一个字符串可能包含与第二个字符串的小偏差时,例如“南非”v“南非”或“英格兰”v“Enlgand”。目前,我正在考虑以下方法

    1. 确定字符串1中与字符串2中的字符匹配的字符百分比
    2. 通过将1的结果与2个字符串的长度进行比较来确定匹配的真实概率,例如,尽管“sa”中的所有字符都在“南非”中,但这不是很可能的匹配,因为“sa”也可以在一系列其他国家名中找到。

    我很高兴听到目前执行这种字符串匹配的最佳实践是什么。

    5 回复  |  直到 10 年前
        1
  •  12
  •   Dawid    15 年前

    你可以看看 Levenshtein distance .这是两根弦之间的距离。相同的字符串的距离等于0。字符串,如 小猫 坐在旁边 距离等于1,依此类推。距离是通过将一个字符串转换为另一个字符串的最小数量的简单操作来测量的。

    在链接中给出了更多的伪码信息和算法。

    我还记得在 Game programming gems: volume 6 :第1.6条最接近字符串匹配算法

        2
  •  9
  •   Paco    15 年前

    为了使模糊字符串匹配理想化,了解字符串的上下文是很重要的。如果只是一些小的打字错误,Levenstein就足够了。当涉及到错误的发音时,你可以使用语音算法,比如soundex或metaphone。 大多数情况下,您需要以下算法的组合,以及一些更具体的手动编写的东西。

    • 针织品
    • 桑德克斯
    • 隐喻
    • 编辑距离
    • 位图
    • 汉明距离

    没有最佳的模糊字符串匹配算法。所有这些都是关于它所使用的上下文的,所以您需要告诉我们您要在哪里使用字符串匹配。

        3
  •  3
  •   bcosca    15 年前

    不要重新发明轮子。维基百科有Levenshtein算法,它为你想要做的事情提供了度量标准。

    http://en.wikipedia.org/wiki/Levenshtein_distance

    还有Soundex,但对于您的需求来说,这可能太简单了。

        4
  •  0
  •   RabinDev    14 年前

    使用Soundex证明对我很有用: 通过对实现进行一两个小的调整,Soundex匹配可以检查 跨语言 如果两个不同语言的字符串听起来相同…

    目标C Soundex实施: http://www.cocoadev.com/index.pl?NSStringSoundex

        5
  •  0
  •   John    10 年前

    我发现了列文斯坦距离算法的一个目标C实现 here . 它对我很有用。