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

Ios 确定两个字符串匹配概率的最佳实践,ios,iphone,objective-c,cocoa-touch,Ios,Iphone,Objective C,Cocoa Touch,我需要编写代码来确定两个字符串是否匹配,其中一个字符串可能包含与第二个字符串的小偏差,例如“南非”v“南非”或“英格兰”v“英格兰”。目前,我正在考虑以下方法 确定字符串1中与字符串2中的字符匹配的字符的百分比 通过将1的结果与2个字符串的长度进行比较来确定匹配的真实概率,例如,尽管“SA”中的所有字符都在“南非”中找到,但这不太可能匹配,因为“SA”也可以在一系列其他国家名称中找到 我很想知道目前执行这种字符串匹配的最佳实践是什么。您可以查看。这是两条线之间的距离。相同字符串的距离等于0。ki

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

  • 确定字符串1中与字符串2中的字符匹配的字符的百分比
  • 通过将1的结果与2个字符串的长度进行比较来确定匹配的真实概率,例如,尽管“SA”中的所有字符都在“南非”中找到,但这不太可能匹配,因为“SA”也可以在一系列其他国家名称中找到
  • 我很想知道目前执行这种字符串匹配的最佳实践是什么。

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

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


    我还记得:第1.6条“最近的字符串匹配算法”中提到过这个主题。为了使模糊字符串匹配更理想,了解字符串的上下文非常重要。当只是一些小的打字错误时,Levenstein就足够好了。当涉及到听不清的声音时,可以使用语音算法,如soundex或metaphone。 大多数时候,您需要以下算法的组合,以及一些更具体的手动编写的东西

    • 女裁缝
    • Soundex
    • 变音
    • Levenstein距离
    • 位图
    • 汉明距离

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

    不要重新发明轮子。Wikipedia有Levenshtein算法,它有你想要做的事情的度量


    还有Soundex,但对于您的要求来说,这可能过于简单化了。

    使用Soundex对我来说效果很好: 只要对实现稍加调整,Soundex matching就可以检查跨语言的两个不同语言的字符串是否听起来相同

    目标C Soundex的实施:
    我发现了Levenshtein距离算法的Objective-C实现。这对我来说非常有用。

    为什么这个算法是“最佳实践?”要实现Levenshtein距离算法,您只需要4个循环,一个if语句。我认为它将覆盖不到一个屏幕;-)在我提到的书中,有一种更复杂、更复杂的方法来匹配相似的字符串。我可以帮你扫描这张纸,但我只有波兰语版本;-)或者下载一个不在编程语言标准库中的库。当您使用4循环版本时,您可能正在谈论O(M*N)实现。你们可以优化到几乎O(M),你们当然是对的,但JK给出的例子足够短,可以使用较慢但易于编写的版本。对于长度大于100的字符串,显然需要进行优化。在优化算法的情况下,要检查的字符串数量比字符串长度更重要