【发布时间】:2017-08-10 17:45:11
【问题描述】:
我们有一个贡献者数据库。贡献者信息是从多个来源导入的。每个人都贡献了几次,每次都输入他们的名字。一些贡献者拼错了他们的名字。要求是找出每个贡献者的总贡献。我们尝试了 SQL Soundex 和 Metaphone 3。Soundex 不准确,Metaphone 3 太耗时。有没有更好的方法来解决这个问题?
例子:
Sql Soundex
select soundex('Opacinch') returns O125
select soundex('Opancinch') returns O152
变音器 3
Metaphone 3 使用排名算法。应将每条记录与所有记录进行比较,这会导致分组过多。如果我们使用排名 2,下面的所有记录都将被视为相同
Chandaprakash
Chandaprakas
Chandapraka
Chandaprak
Chandapra
Chandapr
Chandap
Chanda
Chand
Chan
Cha
Ch
C
【问题讨论】:
-
是的 - 更改表格设计。听起来很可怕。
-
你怎么知道
Vivk和Vivek是同一个贡献者?遵循@juergend 的建议。 -
如果您没有具体说明“不准确”(显示输入以及预期和实际匹配)和“太耗时”(提及基准)的确切含义,我们将无法帮助您。正如目前所说,这个问题被解释为“把你最喜欢的全文搜索算法扔给我,我会弄清楚它是否满足我未公开的要求”,这不是本网站的工作方式。
-
每个贡献者每次都输入他们的名字 - NOOOOO!
-
Metaphone 尝试通过语音查找相似的单词。这与你的问题不同。大多数人可能拼错一两个字母。也许您可以获得所有不同名称的列表,将它们大写,将每个字母的 ASCII 值相加,然后按总数分组。这是一种简单的“聚类”技术,可以根据贡献者的数量以及他们的名字的不同而起作用。如有必要,您可以改进每个名称的值的计算,例如:赋予第一个字母更多的权重,因为人们很少会拼错它。