如何识别拼写不同的相似单词

问题描述 投票:6回答:8

我想从数据库中筛选出重复的客户名称。单个客户可能有多个具有相同名称的系统条目,但拼写上的差异很小。所以这是一个例子:一个名为Brook的客户可能有三个条目进入系统:

  1. 布鲁克伯塔
  2. 布鲁克伯塔
  3. 巴特贝塔

我们假设我们将此名称放在一个数据库列中。我想知道识别此类重复的不同机制,例如100,000条记录。我们可以在C#中使用正则表达式来遍历所有记录或其他一些模式匹配技术,或者我们可以将这些记录导出到最适合此类查询的内容(具有正则表达式功能的SQL))。

这就是我认为的解决方案

  • 编写一个C#代码来遍历每条记录
  • 只按顺序获取辅音字母(在上面的例子中:BrKBrt)
  • 从其他记录中搜索相同的辅音模式,考虑类似的声音字母,如(C,K)(C,S),(F,PH)

所以请转发任何想法。

c# sql linq-to-sql pattern-matching
8个回答
8
投票

Double Metaphone算法于2000年发布,是Soundex算法的一个新的改进版本,于1918年获得专利。

本文链接到许多语言的Double Metaphone实现。


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


2
投票

用于查找字符串相似性的明显,已建立(并且记录良好)的算法是:


1
投票

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

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

这将采用一个词,并根据缺失的字母,添加字母,交换字母等找到所有可能的替代方案。


1
投票

你可能想谷歌为phonetic similarity algorithm,你会发现很多有关这方面的信息。在Codeproject上包含关于在C#中实现解决方案的this文章。


1
投票

看看soundex。它是大多数语言中非常标准的库,可以满足您的需求,即通过算法识别语音相似性。 http://en.wikipedia.org/wiki/Soundex


1
投票

Record Linkage有一个非常好的R(只在Google中搜索“R”)包。标准示例完全针对您的问题:R RecordLinkage

Soundex等的C代码直接来自PostgreSQL!


0
投票

对于此解决方案,我建议使用Soundex和派生算法超过Lev距离。 Levenshtein距离更适合拼写检查解决方案imho。

© www.soinside.com 2019 - 2024. All rights reserved.