如何确定两个相似的波段名称是否代表相同的波段?

我目前正在开展一个项目,要求我将我们的乐队和场地数据库与一些外部服务相匹配。

基本上我正在寻找确定两个名称是否相同的最佳方法的方向。 例如:

  • 我们的数据库地址名称 – “The Pig and Whistle”
  • 服务1 – “猪和口哨”
  • 服务2 – “猪与口哨”
  • 等等

我认为主要的不同之处在于缺少“the”或使用“&”而不是“and”,但也可能会出现不同命令中略有不同的拼写和单词的情况。

在这种情况下通常使用哪些算法/技术,我是否需要过滤干扰词或进行某种拼写检查类型匹配?

你在c#中看过任何类似的东西的例子吗?

更新:如果有人对ac#example感兴趣,你可以通过google代码搜索Levenshtein距离访问一个堆

规范(也可能是最简单)的方法是测量两个弦之间的Levenshtein距离 。 如果距离相对于字符串的大小较小,则可能是相同的字符串。 请注意,如果你必须比较很多非常小的字符串,那么就更难判断它们是否相同。 使用更长的字符串时效果更好。

一种更聪明的方法可能是比较两个弦之间的Levenshtein距离,但是将距离零指定为更明显的变换,例如“和”/“&”,“Snoop Doggy Dogg”/“Snoop”等。

我刚才做了类似的事情,我使用了Discogs数据库(这是公共领域),它也跟踪艺术家别名;

你可以:

  • 使用API调用 ( namevariations字段)。
  • 下载每月数据转储 ( *_artists.xml.gz )并将其导入数据库。 它包含相同的数据,但显然要快得多。

这相对于Levenshtein距离解决方案的一个优点是,您将获得更少的错误匹配。
例如, Ryan AdamsBryan Adams得分为2 ,这是相当不错的(较低的是更好的比赛, Pig and Whistle以及Pig & Whistle得分为3 ),但他们显然是不同的人。

虽然你可以制作一个更聪明的算法(例如,它也会查看字符串长度),但使用别名DB会更简单,更少错误的电话; 实现这一点后,我可以完全删除其他答案中建议的解决方案,并有更好的匹配。

soundex也可能有用

在生物信息学中,我们使用它来比较DNA或蛋白质序列。

有很多算法,您可能希望查看全局对齐

在这方面, Needleman-Wunsch算法可能就是您所寻求的。

如果您有特别长的重复字符串进行比较,您可能还需要考虑像BLAST这样的启发式搜索。