数据质量 - SOUNDEX 是解决方案吗?

Posted

技术标签:

【中文标题】数据质量 - SOUNDEX 是解决方案吗?【英文标题】:Data Quality - Is SOUNDEX the solution? 【发布时间】:2014-03-16 09:34:22 【问题描述】:

我所在的组织存在严重的名称数据质量问题。有十五个数据库包含有关人员的信息。例如:

Database 1
Name=Fre&d Blo-ggs DOB 01/01/1980

Database 2
Name=Freddy Bloggs DOB 01/01/1980

如果用户使用我的搜索工具搜索 Fred Bloggs,那么我希望找到两条记录。我在想这样的事情:

SELECT * FROM Person WHERE Soundex('Fred Bloggs') = Soundex('Fre&d Blo-ggs')

是否建议像这样使用 Soundex 而不是像这样使用替换语句:

select Replace(Replace(Replace(Name,',',''),'&',''),'@') from Person
 where Replace(Replace(Replace(Name,',',''),'&',''),'@') = @Name

@Name 是传入的变量。有没有更好的方法,例如使用正则表达式? Soundex 会影响性能吗?

【问题讨论】:

有一个更新版本的 SOUNDEX 称为 Metaphone,另一个称为 Double Metaphone。默认情况下,这些不在 SQL Server 中实现。它们都会为您提供更好的方法来按发音规则匹配名称。他们不会帮助您处理不良数据。 【参考方案1】:

好主意。我不建议使用它。我想“John Right”与“John Write”不同,尽管他们听到的相同。我的意思是最后,重要的是您要比较什么....如果您要比较名称听起来是否相同,那么SOUNDEX就可以了。

但是,我建议以某种方式更正您的数据。这将是一个真正的解决方案,尽管我可以想象这并不容易。

希望我能帮上忙!

【讨论】:

谢谢。您是否建议按照原始帖子使用 REPLACE 语句? +1 建议更正数据,因为我知道这是长期解决方案。不过短期内是不可能的。【参考方案2】:

soundex 是否优于 regex 取决于您的数据。例如,不同语言有不同的 soundex 版本。您必须检查您的数据,这更好..

当然,soundex 确实会像您调用的任何其他附加函数一样影响性能。如果性能成为问题,我建议添加一个包含已计算的 soundex 或规范化名称的附加列,并在其上创建索引。

根据自己的经验,我认为标准化/简化的搜索标准例如姓、名和出生月份的部分应该足以获取所有人,但不能太多,以便用户可以决定他真正想要选择的人。

【讨论】:

+1 表示计算的数据列。您是否建议使用 REPLACE 语句进行计算? 可能取决于您使用了多少替换。最好用你的真实数据进行测试。【参考方案3】:

Soundex 不会帮助您。如果名字中出现了错误的辅音,你会卡住。

最好选择字符串距离并指定百分比。一种模糊匹配。

查看下面的链接,使用 levenshtein 编辑距离算法进行模糊匹配。 Levenshtein edit distance - MS SQL SERVER

【讨论】:

以上是关于数据质量 - SOUNDEX 是解决方案吗?的主要内容,如果未能解决你的问题,请参考以下文章

比较不同语言的短字符串以获得相似的声音 - Soundex 是答案吗?

8 使用数据处理函数

SQL - 希望使用 soundex 来纠正拼写错误 [关闭]

「数据治理那点事」系列之三:不忘初心方得始终,数据质量管理要稳住!

SaCa DataQuality概述

基于快手直播场景聊一聊数据质量体系