检查两个NSStrings是否相似

时间:2012-10-20 01:23:34

标签: objective-c ios nsstring compare similarity

我提出了一个棘手的问题,我不确定如何处理。所以,我已经制定了一个包含字典的plist,其中包含两个对象:

  • 国家/地区名称
  • 国家的插头大小

虽然只有210个国家/地区的事实。

并且,我已经能够搜索许多国家的列表,其中可能存在或不存在事实。但这是我的问题,我使用名为Geonames的网络服务,用户可以使用搜索栏显示控制器搜索国家/地区,这些与插件大小配对的plist国家名称实际上来自维基百科文章。

现在,在Geonames和维基百科的plist中命名的国家可能会略有不同,可能有一个额外的空间,一个额外的短划线,一个额外的字母。这就是为什么我想看看geoname国家字符串是否与plist中的字符串非常相似。

所以,这不是isEqualToString:,因为它发现它是否准确,compare:方法是否有效?

我该如何处理?这是一个例子:

Geoname返回(不是真正的国家只是一个例子):

  • 义亭

但是plist可能会回来:

  • Yitting

所以增加1个't',但还有其他情况。我希望这些可以比较精确,或者至少相似,所以我可以将它们视为匹配。

是否有任何教程,资源,项目等可以指向我?

谢谢!再见!

3 个答案:

答案 0 :(得分:5)

Soundex算法在这种情况下非常有用。

我在github上找到了sample implementation

答案 1 :(得分:2)

您需要实现一种用于字符串近似匹配的算法。最受欢迎的此类算法之一是Levenshtein distance,是几种Edit distance算法之一。该距离被计算为将字符串A变换为字符串B所需的编辑操作的数量 - 插入,删除或改变字符计数为一个编辑操作。字符串越近,它们之间的编辑距离越小。您可以计算成对编辑距离,找到最小的距离来识别匹配。

答案 2 :(得分:2)

您可能会发现this post about auto update/complete有用:

我已经测试了UITextView在您的UIViewController类中遵守UITextViewDelegate协议时的效果,并且会产生类似于您在Messages应用中找到的结果。我还没有检查UITextFieldUITextFieldDelegate是否也这样做。

Autocomplete/Autocorrect