9

下面是 SQL 中的 Soundex 代码示例:

SELECT SOUNDEX('Smith'), SOUNDEX('Smythe');
----- ----- 
S530  S530  

怎么'Smith'变成S530

在这个例子中,第一个数字是S因为这是输入表达式中的第一个字符,但是剩下的三个数字是如何计算的呢?

4

2 回答 2

12

看看这篇文章

代码的第一个字母对应名称的第一个字母。代码的其余部分由根据以下代码从单词的音节派生的三个数字组成:

  • 1 = B、F、P、V
  • 2 = C、G、J、K、Q、S、X、Z
  • 3 = D, T
  • 4 = L
  • 5 = M,N
  • 6 = R

具有相同 Soundex 代码的双字母 A、E、I、O、U、H、W、Y 和一些前缀被忽略...

因此,对于 Smith 和 Smythe,代码是这样创建的:

S  S   ->   S
m  m   ->   5
i  y   ->   0
t  t   ->   3
h  h   ->   0
   e   ->   -
于 2011-09-03T21:02:19.373 回答
4

什么是 Soundex?

Soundex是:

一种通过声音索引名称的语音算法,如英语发音;由 Robert C. Russell 和 Margaret King Odell 于 1918 年首次开发

它是如何工作的?

Soundex 有多种实现,但大多数实现以下步骤:

  1. 保留名称的第一个字母并删除所有其他出现的元音和h,w
    |a, e, i, o, u, y, h, w | → "" |
  2. 用数字替换辅音如下(在第一个字母之后):
    | b, f, p, v | → 1 |
    | c, g, j, k, q, s, x, z | → 2 |
    | d, t | → 3 |
    | l | → 4 |
    | m, n | → 5 |
    | r | → 6 |
  3. 用单个值替换相同的相邻数字(如果它们在步骤 1 之前彼此相邻):
    | M33 | → M3 |
  4. 剪切填充零或剪切以产生 4 位结果:
    | M3 | → M300 |
    | M34123 | → M341 |

这是jsFiddle中的交互式演示:

jsFiddle 演示

这是一个使用SQL Fiddle的 SQL 演示

在 SQL Server 中,SOUNDEX通常与 结合使用DIFFERENCE,用于计算结果数字中有多少是相同的(就像游戏策划者†</sup>),数字越大,匹配程度越高。

策划者

什么是替代品?

重要的是要了解 soundex 的局限性和批评,以及人们试图改进它的地方,特别是仅植根于英语发音并且还丢弃了大量数据,导致更多误报


Metaphone和Double Metaphone仍然专注于英语发音,但在英语语音的细微差别上增加了更多的粒度(即。→ )PHF

Phil Factor 在 SQL 中写了一个Metaphone函数,源代码在 github


Soundex 最常用于识别相似的名称,并且很难找到任何相似的昵称(即RobertRobBob)。根据关于人名别名/昵称数据库的这个问题,您也可以在匹配过程中加入针对相似昵称的查找。

以下是一些常见昵称的免费列表:

延伸阅读:

于 2018-08-22T00:27:00.760 回答