我有一个从 iTunes API 上传的歌曲列表。其中一些是重复的,但不是完美的重复。例如,有人可能会说“All 4 u”与“All for you”,或者“Some song”与“some song feat. some other artist”
我希望能够识别重复项。计算所有对的 Levenshtein 距离的最佳方法是什么?这似乎太过分了。
我正在使用 Cocoa Touch 框架进行 iOS 编程,所以如果有人知道任何有帮助的库的话。
我有一个从 iTunes API 上传的歌曲列表。其中一些是重复的,但不是完美的重复。例如,有人可能会说“All 4 u”与“All for you”,或者“Some song”与“some song feat. some other artist”
我希望能够识别重复项。计算所有对的 Levenshtein 距离的最佳方法是什么?这似乎太过分了。
我正在使用 Cocoa Touch 框架进行 iOS 编程,所以如果有人知道任何有帮助的库的话。
为什么您认为计算 Levenshtein 距离过大?如果您坐下来用铅笔和纸列出清单,您会使用什么算法?
也就是说,Levenshtein 可能是必要的,但还不够。我将从规范化字符串开始。在某些情况下,字符串可能会以多种方式规范化,您需要同时执行这两种方式。规范化看起来像:
做好这件事很复杂,需要大量的试验和错误。我过去做过很多联系人重复数据删除,还有一条建议:开始保守。很容易意外地重复重复数据太多。构建一个您手动删除重复数据的大列表,并在每次算法更改后进行测试、测试、测试。确保您的 UI 可以向用户呈现您不确定的任何内容,因为会有很多很多您无法确定的记录。(即使您手动操作也是如此。查看大量人工输入的标题并告诉我哪些是 100% 重复的,而无需听曲目。计算机在这方面不会比您做得更好.)
我不知道有任何公开可用的图书馆。很多人已经多次解决了这个问题(搜索“重复数据删除歌曲标题”或类似的东西)。但它通常是商业软件。
对此还有一条建议,因为这是一个巨大的 O(n^2) 或更糟的问题。寻找入桶机会。如果您可以先匹配艺术家,然后是专辑,然后是曲目,那么您可以在更短的时间内分而治之。