how to recognize similar words with difference in spelling
我想从数据库中筛选出重复的客户名称。单个客户可能有多个同名的系统条目,但拼写差别不大。下面是一个例子:一个名为brook的客户可能有三个系统条目有了这些变化:
假设我们将这个名称放在一个数据库列中。我想知道不同的机制来识别这样的复制形式,比如说100000条记录。我们可以使用C中的正则表达式迭代所有记录或其他模式匹配技术,或者将这些记录导出到最适合此类查询的位置(具有正则表达式功能的SQL)。
这就是我认为的解决办法
- 编写一个C代码来遍历每个记录
- 仅按顺序获取辅音字母(在上述情况下:brkbrt)
- 从其他记录中寻找相同的辅音模式类似的发音字母,如(c,k)(c,s),(f,ph)
所以请提出任何意见。
双变音算法出版于2000年,是Soundex算法的一个新的改进版本,于1918年获得专利。
本文链接到多种语言中的双隐喻实现。
看看Soundex
Transact-SQL中有一个soundex函数(请参阅http://msdn.microsoft.com/en-us/library/ms187384.aspx):
1 2 3 4 | SELECT SOUNDEX('brook berta'), SOUNDEX('Bruck Berta'), SOUNDEX('Biruk Berta') |
为每个示例值返回相同的值B620
用于查找字符串相似性的明显的、已建立的(并有良好文档记录的)算法有:
- 编辑距离
- 桑德克斯
有一个非常好的r(只需在谷歌中搜索"r")包,用于记录链接。标准示例正好针对您的问题:r recordlinkage
Soundex等的C代码直接取自PostgreSQL!
看看Soundex。在大多数语言中,它是一个相当标准的库,可以满足您的需要,即通过算法识别语音相似性。http://en.wikipedia.org/wiki/soundex网站
你可能想用谷歌搜索
我会考虑写一些诸如"著名的"python拼写检查器之类的东西。
http://norvig.com/spell-correct.html
这需要一个单词,并根据丢失的字母、添加字母、交换字母等找到所有可能的备选方案。
我建议使用Soundex和派生算法来解决这个问题。水平距离更适合于拼写检查解决方案imho。