关于c#:如何识别拼写不同的相似单词

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网站


    你可能想用谷歌搜索phonetic similarity algorithm,你会发现很多关于这个的信息。包括这篇关于在C中实现解决方案的代码项目的文章。


    我会考虑写一些诸如"著名的"python拼写检查器之类的东西。

    http://norvig.com/spell-correct.html

    这需要一个单词,并根据丢失的字母、添加字母、交换字母等找到所有可能的备选方案。


    我建议使用Soundex和派生算法来解决这个问题。水平距离更适合于拼写检查解决方案imho。