我想从数据库中过滤掉重复的客户名称。单个客户可能有多个具有相同名称的系统条目,但拼写上的差异很小。所以这是一个例子:名为Brook的客户可能有三个系统条目 有这些变化:
我们假设我们将此名称放在一个数据库列中。 我想知道识别此类重复的不同机制,例如100,000条记录。我们可以在C#中使用正则表达式来遍历所有记录或其他一些模式匹配技术,或者我们可以将这些记录导出到最适合此类查询的记录(具有正则表达式功能的SQL)。
这就是我认为的解决方案
所以请转发任何想法。
答案 0 :(得分:8)
2000年发布的Double Metaphone算法是Soundex算法的新版本,于1918年获得专利。
本文链接到多种语言的Double Metaphone实现。
答案 1 :(得分:2)
用于查找字符串相似性的明显,已建立(并且记录良好)的算法是:
答案 2 :(得分:2)
查看Soundex
Transact-SQL中有一个Soundex函数(参见http://msdn.microsoft.com/en-us/library/ms187384.aspx):
SELECT
SOUNDEX('brook berta'),
SOUNDEX('Bruck Berta'),
SOUNDEX('Biruk Berta')
为每个示例值
返回相同的值B620答案 3 :(得分:1)
我会考虑写一些诸如“着名的”python拼写检查器。
http://norvig.com/spell-correct.html
这将使用一个单词并根据缺失的字母,添加字母,交换字母等找到所有可能的替代方案。
答案 4 :(得分:1)
你可能想要谷歌phonetic similarity algorithm
,你会发现很多关于此的信息。在Codeproject中包含关于在C#中实现解决方案的this文章。
答案 5 :(得分:1)
看看soundex。它是大多数语言中非常标准的库,可以满足您的需求,即通过算法识别语音相似性。 http://en.wikipedia.org/wiki/Soundex
答案 6 :(得分:1)
Record Linkage有一个非常好的R(只在Google中搜索“R”)包。标准示例完全针对您的问题:R RecordLinkage
Soundex等的C代码直接来自PostgreSQL!
答案 7 :(得分:0)
对于此解决方案,我建议Soundex和派生算法超过Lev距离。 Levenstein距离更适合拼写检查解决方案imho。