我当前正在编写的核心数据应用程序有一个小问题。我有两种不同的模型,上下文和持久存储。一个用于我的应用程序数据,另一个用于包含与我相关的信息的网站。
大多数时候,我将应用程序中的一条记录与其他来源的另一条记录完全匹配。然而,有时,我必须回退到模糊字符串匹配来链接两个记录。
我正在尝试匹配歌曲名称。我的本地头衔可能是(虚构的)"The French Idealist is in your pensée"
远程歌曲标题可以是"01 - 10 - French idealist in in you're pensee, The (dub remix, feat. DJ Objective-C)"
我搜索堆栈溢出、谷歌、可可文档,但我找不到关于如何在这些情况下进行模糊匹配的任何明确答案。我的字符串可以以任何内容开头,有一堆特殊字符,通常以随机或被忽略的字符结尾。
Regex 不行,NSPredicate 不行,Soundex 不能很好地处理外国名称,也许 Levenshtein 还不够(或者会吗?)。
我正在寻找一组大约十几场潜在比赛的冠军,但我必须做很多这样的操作。 100% 准确率不是目标。
我正在考虑删除被忽略的单词,提取关键字(在本例中为“french,idealist,pensée”),将它们连接起来,然后使用 Levenshtein 距离(歌曲标题中的单词应按相同顺序)。
在我的特殊情况下,它会起作用吗?关于这个问题的行业标准是什么(我不可能是世界上唯一一个想要匹配稍微不同的歌曲名称的人)Core Data、Cocoa 或 Objective-C 可以帮助我吗?
多谢。
您希望搜索不区分变音符号,以匹配 pensée 中的“é”和 pensee 中的“e”。您可以通过在属性后面添加 [d] 来获得此信息。就像这样:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(songTitle like[cd] %@)", yourSongSubstring];
The 'c' in [cd] is for case insensitivity.
由于您的字符串可能以任何顺序出现在您正在搜索的字符串中,因此您可以标记您的搜索字符串 ([... ComponentsByString:@" "]),然后创建一个谓词,例如
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(songTitle like[cd] %@) and (songTitle like[cd] %@)", songToken1, songToken2];
That syntax to combine predicates above may be off, going from memory.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)