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

时间:2010-02-22 20:47:46

标签: ios iphone objective-c cocoa-touch

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

  1. 确定字符串1中与字符串2中的字符匹配的百分比
  2. 通过将结果1与2个字符串的长度进行比较来确定匹配的真实概率,例如:虽然“SA”中的所有角色都在“南非”中找到,但由于“SA”也可以在其他一些国家名称中找到,因此不太可能匹配。
  3. 我很高兴听到目前执行此类字符串匹配的最佳做法。

5 个答案:

答案 0 :(得分:12)

您可以查看Levenshtein distance。这是两个字符串之间的距离。相同的字符串的距离等于0. kitten sitten 等字符串的距离等于1,依此类推。距离是通过将一个字符串转换为另一个字符串的最小数量的简单操作来衡量的。

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

我还记得Game programming gems: volume 6中提到过这个话题:第1.6条最近字符串匹配算法

答案 1 :(得分:9)

为了使模糊字符串匹配理想,了解字符串的上下文非常重要。当它只是小错字时,Levenstein就足够了。当它是关于听错的声音时,你可以使用像soundex或metaphone这样的语音算法。 大多数情况下,您需要结合以下算法,以及一些更具体的手动编写的东西。

  • Needleman-Wunsch
  • Soundex
  • 音位
  • Levenstein距离
  • 位图
  • 汉明距离

没有最好的模糊字符串匹配算法。这完全取决于它所使用的上下文,所以你需要告诉我们你想在哪里使用字符串匹配。

答案 2 :(得分:3)

不要重新发明轮子。维基百科有Levenshtein算法,该算法具有您想要做的指标。

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

还有Soundex,但这可能过于简单,无法满足您的要求。

答案 3 :(得分:0)

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

Objective-C Soundex实施: http://www.cocoadev.com/index.pl?NSStringSoundex

答案 4 :(得分:0)

我找到了Levenshtein距离算法here的Objective-C实现。它对我很有用。