数据质量 - 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 是答案吗?
SQL - 希望使用 soundex 来纠正拼写错误 [关闭]