我想从数据库中筛选出重复的客户名称。 一个客户可能有不止一个进入该系统具有相同的名称,但在拼写差异不大。 所以这里有一个例子:一个名为布鲁克客户可以有三个条目与这个变化的系统:
- 布鲁克伯塔
- 布鲁克伯塔
- Biruk伯塔
假设我们在一个数据库列把这个名字。 我想知道不同的机制来识别这种重复形成说10万分的记录。 我们可以使用正则表达式在C#中通过的所有记录或其他一些模式匹配技术进行迭代,我们也可能这些记录导出到此类查询什么都最适合(SQL正则表达式的能力))。
这是我认为是一个解决方案
- 写C#代码通过记录每个迭代
- 获取只有辅音字母排序(在上述情况下:BrKBrt)
- 搜索从考虑发音相似的字母像(C,K)(C,S)其他记录相同的辅音模式,(F,PH)
所以,请转发任何想法。
该双音位算法,发表于2000年,是在1918年获得专利Soundex算法的一个新的和改进的版本。
文章在许多语言中的链接双音位实现。
看一看探测法
有在Transact-SQL(见探测法功能http://msdn.microsoft.com/en-us/library/ms187384.aspx ):
SELECT
SOUNDEX('brook berta'),
SOUNDEX('Bruck Berta'),
SOUNDEX('Biruk Berta')
返回相同的值B620对于每个示例值
查找字符串相似性显而易见,建立(有据可查)算法是:
我会考虑写东西,如“著名的”蟒蛇拼写检查器。
http://norvig.com/spell-correct.html
这将需要一个单词,并寻找基于丢失的信件所有可能的选择,添加字母,交换信函等
你可能想谷歌的phonetic similarity algorithm
,你会发现很多这方面的信息。 包括此文章CodeProject上关于实现在C#中的解决方案。
考虑同音。 这是一个在大多数语言中一个相当标准库已经做了你需要的东西,即算法识别语音相似。 http://en.wikipedia.org/wiki/Soundex
有一个非常漂亮的R(只要搜索“R”在谷歌)包记录链接。 该标准针对的例子恰好您的问题: [R RecordLinkage
在C-代码探测法等直接取自PostgreSQL的!
我会建议探测法和派生的算法在列弗距离该解决方案。 编辑距离更适合拼写检查解决方案恕我直言。