检查两个NSString是否相似

4
我提出了一个棘手的问题,我不确定如何去解决。因此,我已经制定了一个包含字典的属性列表:
  • 国家名称
  • 插头尺寸

但是这里只有210个国家/事实。

我已经启用了一个搜索功能,可以搜索大量的国家名单,其中可能有一些事实或者没有。但是这里有一个问题,我正在使用一个名为Geonames的网络服务,用户可以使用搜索栏来搜索国家,而这些与插座尺寸配对的plist国家名称实际上来自于维基百科文章。

现在,在Geonames和维基百科的plist中,国家的命名可能略有不同,也许带有额外的空格、额外的破折号或额外的字母。这就是为什么我想看看Geoname中的国家字符串是否与plist中的字符串非常相似。

所以,这将不是isEqualToString:,因为它会查找其是否完全相同,那么compare:方法可以工作吗?

我应该如何处理呢?以下是一个例子:

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

  • Yiting

但是plist可能返回:

  • Yitting

所以可能多出一个't',但还有其他情况。我想将它们视为完全相同或至少相似,这样我就可以把它们视为匹配。

您能指引我参考一些教程、资源、项目等吗?

谢谢!再见!


1
你所需要的是近似字符串匹配,也被称为模糊搜索。 - DrummerB
3个回答

5

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

我在 github 上找到了一个 样例实现


这很棒!不过,有没有办法让它更强烈一些,它确实有效...例如,它显示美国与英国相似...但我想让它更准确、更相似...我会查看代码,但你知道怎么做吗? - MCKapur
1
Soundex非常简单,它只查看前几个字母。如果您想要更多地查看文本,可以让它查看更多的文本。此外,请查看上面评论中提到的“近似字符串匹配”链接。有很多不同的算法可供尝试。 - rmaddy

2
你需要实现一个用于字符串近似匹配的算法。其中最流行的算法之一是Levenshtein距离,它是几种编辑距离算法之一。距离是通过计算将字符串A转换为字符串B所需的编辑操作数来计算的——插入、删除或更改一个字符都算作一个编辑操作。字符串越接近,它们之间的编辑距离就越小。您可以计算成对的编辑距离,并找到最小的编辑距离以确定匹配。

2
您可能会发现这篇关于自动更新/完成的帖子很有用:https://dev59.com/qWfWa4cB1Zd3GeqPfD1E 我已经测试过,在您的UIViewController类中遵循UITextViewDelegate协议时,UITextView可以很好地工作,并且会产生类似于Messages应用程序中的结果。 我还没有检查UITextField和UITextFieldDelegate是否也是如此。 Autocomplete/Autocorrect

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接