我需要编写代码以确定当其中一个字符串可能包含与第二个字符串的小偏差时2个字符串是否匹配,例如“南非”诉“南非”或“英格兰”诉“Enlgand”。目前,我正在考虑以下方法
我很高兴听到目前执行此类字符串匹配的最佳做法。
答案 0 :(得分:12)
您可以查看Levenshtein distance。这是两个字符串之间的距离。相同的字符串的距离等于0. kitten 和 sitten 等字符串的距离等于1,依此类推。距离是通过将一个字符串转换为另一个字符串的最小数量的简单操作来衡量的。
链接中给出了伪代码中的更多信息和算法。
我还记得Game programming gems: volume 6中提到过这个话题:第1.6条最近字符串匹配算法
答案 1 :(得分:9)
为了使模糊字符串匹配理想,了解字符串的上下文非常重要。当它只是小错字时,Levenstein就足够了。当它是关于听错的声音时,你可以使用像soundex或metaphone这样的语音算法。 大多数情况下,您需要结合以下算法,以及一些更具体的手动编写的东西。
没有最好的模糊字符串匹配算法。这完全取决于它所使用的上下文,所以你需要告诉我们你想在哪里使用字符串匹配。
答案 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实现。它对我很有用。