下面是 SQL 中的 Soundex 代码示例:
SELECT SOUNDEX('Smith'), SOUNDEX('Smythe');
----- -----
S530 S530
怎么'Smith'
变成S530
?
在这个例子中,第一个数字是S
因为这是输入表达式中的第一个字符,但是剩下的三个数字是如何计算的呢?
下面是 SQL 中的 Soundex 代码示例:
SELECT SOUNDEX('Smith'), SOUNDEX('Smythe');
----- -----
S530 S530
怎么'Smith'
变成S530
?
在这个例子中,第一个数字是S
因为这是输入表达式中的第一个字符,但是剩下的三个数字是如何计算的呢?
看看这篇文章
代码的第一个字母对应名称的第一个字母。代码的其余部分由根据以下代码从单词的音节派生的三个数字组成:
- 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 -> -
Soundex是:
一种通过声音索引名称的语音算法,如英语发音;由 Robert C. Russell 和 Margaret King Odell 于 1918 年首次开发
Soundex 有多种实现,但大多数实现以下步骤:
h,w
:|a, e, i, o, u, y, h, w | → "" |
| b, f, p, v | → 1 |
| c, g, j, k, q, s, x, z | → 2 |
| d, t | → 3 |
| l | → 4 |
| m, n | → 5 |
| r | → 6 |
| M33 | → M3 |
| M3 | → M300 |
| M34123 | → M341 |
这是jsFiddle中的交互式演示:
这是一个使用SQL Fiddle的 SQL 演示
在 SQL Server 中,SOUNDEX
通常与 结合使用DIFFERENCE
,用于计算结果数字中有多少是相同的(就像游戏策划者†</sup>),数字越大,匹配程度越高。
重要的是要了解 soundex 的局限性和批评,以及人们试图改进它的地方,特别是仅植根于英语发音并且还丢弃了大量数据,导致更多误报。
Metaphone和Double Metaphone仍然专注于英语发音,但在英语语音的细微差别上增加了更多的粒度(即。→ )PH
F
Phil Factor 在 SQL 中写了一个Metaphone函数,源代码在 github
Soundex 最常用于识别相似的名称,并且很难找到任何相似的昵称(即Robert
→Rob
或Bob
)。根据关于人名别名/昵称数据库的这个问题,您也可以在匹配过程中加入针对相似昵称的查找。
以下是一些常见昵称的免费列表: