我们开发了一系列确定重复联系人记录的业务规则,这些规则的基础围绕着首先检查相同的姓名,然后比较电话号码、电子邮件、电话等其他字段。
问题是只有一小部分记录被捕获并自动清理/合并。
为了获取更多记录,我想包含或检查联系人姓名中的拼写错误(例如 Michael=Micheal)。
是否有一个很好的功能可以用来检查拼写错误,以便返回更准确的结果?我认为寻找比较两个字符串的单个字符差异的函数可以解决问题。
我们开发了一系列确定重复联系人记录的业务规则,这些规则的基础围绕着首先检查相同的姓名,然后比较电话号码、电子邮件、电话等其他字段。
问题是只有一小部分记录被捕获并自动清理/合并。
为了获取更多记录,我想包含或检查联系人姓名中的拼写错误(例如 Michael=Micheal)。
是否有一个很好的功能可以用来检查拼写错误,以便返回更准确的结果?我认为寻找比较两个字符串的单个字符差异的函数可以解决问题。
请记住,大多数字符串相似度测量算法都是计算密集型的,并且根据手头的工作量,T-SQL 在性能方面可能是一个糟糕的选择。
代替字符串相似性测量本身,考虑散列函数,特别是那些保留单词的主要“结构”的函数。哈希码的优点是它们只计算一次,只使用一个字符串作为输入,然后可以在具有普通等式谓词的 [TSQL] 过滤器中使用(不像相似度测量,这意味着您为每个可能的参考字符串运行算法)。一个合理的哈希码建议是SOUNDEX,它恰好特别适合个人和公司名称的典型变化,并且也作为TSQL 函数“本地”实现。
最好为名称字段中的每个单词计算 soundex 代码,例如为“Charles Darwin”等输入生成两个代码,为“Jean Jacques Rousseau”等生成三个代码,为了提高性能,您可能需要找到一种区分姓氏和给定名称的方法,以方便您的过滤条件。
如果您更喜欢使用字符串相似性方法,我发现Levenstein 距离或Ratcliff/Oberhelp度量在处理诸如拼写错误等小的变化时效果很好。与 Soundex 一样,您仍然可以考虑单独处理单词,这会带来处理给定名称条目的多个值的困难,但也允许更积极地处理具有名称的典型情况,其中一些实例是顺序名字然后是姓氏和其他实例以相反的顺序(或省略或缩写部分名称)。