【问题标题】:Check for typos comparing two strings in T-SQL检查在 T-SQL 中比较两个字符串的拼写错误
【发布时间】:2013-02-19 03:34:49
【问题描述】:

我们制定了一系列确定重复联系人记录的业务规则,这些规则的基础是首先检查相同的姓名,然后比较电话号码、电子邮件、电话等其他字段。

问题是只有一小部分记录被捕获并自动清理/合并。

为了获取更多记录,我想在联系人姓名中添加或检查拼写错误(例如 Michael=Micheal)。

是否有一个很好的功能可以用来检查拼写错误,以便返回更准确的结果?我认为寻找一个比较两个字符串的单个字符差异的函数可以解决问题。

【问题讨论】:

    标签: tsql pattern-matching data-scrubbing


    【解决方案1】:

    请记住,大多数字符串相似度测量算法都是计算密集型的,并且根据手头的工作量,T-SQL 在性能方面可能是一个糟糕的选择。

    代替字符串相似度测量per-se,考虑散列函数,尤其是那些保留单词的主要“结构”的函数。哈希码的优点是它们只计算一次,仅使用 one 字符串作为输入,然后可以在具有普通相等谓词的 [TSQL] 过滤器中使用(与暗示您运行的相似性测量不同)每个可能的参考字符串的算法)。一个合理的哈希码建议是 SOUNDEX,它恰好特别适合个人和公司名称的典型变化,并且也作为 TSQL function “本地”实现.

    最好为名称字段中的每个单词计算 soundex 代码,例如为“Charles Darwin”等输入生成两个代码,为“Jean Jacques Rousseau”等生成三个代码,以提高性能,您可能需要找到一种区分姓氏和给定名称的方法,以方便您的过滤条件。

    如果您更喜欢使用字符串相似性方法,我发现Levenstein distanceRatcliff/Oberhelp measure 可以很好地处理诸如拼写错误之类的小变化。与 Soundex 一样,您仍然可以考虑单独处理单词,这会带来处理给定名称条目的多个值的困难,但也允许更积极地处理具有名称的典型情况,其中一些实例是顺序名字然后是姓氏和其他实例以相反的顺序(或省略或缩写部分名称)。

    【讨论】:

    • 我使用 Levenstein 距离非常适合我。如果 OP 对它感兴趣,我有 C# 而非 TSQL 中的算法。
    猜你喜欢
    • 1970-01-01
    • 2015-12-11
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    • 2015-05-08
    • 2014-05-08
    相关资源
    最近更新 更多