我目前正在开展一个项目,要求我将乐队和场地数据库与众多外部服务相匹配。
基本上我正在寻找确定两个名字是否相同的最佳方法的方向。例如:
我认为主要区别在于缺少“the”或使用“&”而不是“和”,但也可能有不同的订单中的拼写和单词略有不同。
在这种情况下通常使用哪些算法/技术,我是否需要过滤干扰词或进行某种拼写检查类型匹配?
你有没有在c#中看到任何类似的东西的例子?
更新:如果有人对c#示例感兴趣,可以通过执行google code search for Levenshtein distance
来访问堆。答案 0 :(得分:14)
规范(可能是最简单)的方法是测量两个字符串之间的 Levenshtein distance 。如果距离相对于字符串的大小较小,则可能是相同的字符串。请注意,如果你必须比较很多非常小的字符串,那么就更难判断它们是否相同。使用更长的字符串可以更好地工作。
更聪明的方法可能是比较两个琴弦之间的Levenshtein距离,但是为了更明显的变换指定零距离,例如“and”/“&”,“Snoop Doggy Dogg”/“Snoop”,等
答案 1 :(得分:1)
我之前做过类似的事情,我使用了Discogs数据库(公共域名),它也跟踪艺术家别名;
你可以:
namevariations
字段)。*_artists.xml.gz
)&将其导入您的数据库。这包含相同的数据,但显然要快得多。这比Levenshtein distance)解决方案的一个优点是你可以减少错误匹配
例如,Ryan Adams
和Bryan Adams
的得分为2
,这是非常好的(较低的是更好的匹配,Pig and Whistle
而Pig & Whistle
得分为{ {1}}),但他们显然是不同的人。
虽然您可以制作更智能的算法(例如,也可以查看字符串长度),但使用别名DB会更加简单和简单。错误电话;实施之后,我可以完全删除其他答案中提出的解决方案。有更好的比赛。
答案 2 :(得分:0)
soundex也可能有用
答案 3 :(得分:0)
在生物信息学中,我们一直用它来比较DNA或蛋白质序列。
有很多算法,您可能希望查看全局对齐。
在这方面,Needleman-Wunsch algorithm可能就是你所寻找的。 p>
如果要比较特别长的重复字符串,您可能还需要考虑像BLAST这样的启发式搜索。