> soundex | 语音编码 | 模糊匹配 <
// Soundex —— 按发音为姓名建立索引的语音算法
基于发音
按姓名发音而不是拼写进行编码。
模糊匹配
能找到发音相近但拼写不同的姓名。
家谱与档案
适合家谱研究、人口普查与历史档案检索。
>> 技术说明
Soundex 的工作原理:
Soundex 保留姓名首字母,并把后续辅音根据语音分组映射为数字;发音相近的辅音使用相同数字,元音被忽略。American Soundex 结果固定为 4 位,而 Refined Soundex 使用更精细的分组和可变长度编码。
编码规则:
1 = B,F,P,V 2 = C,G,J,K,Q,S,X,Z 3 = D,T 4 = L 5 = M,N 6 = R Robert → R163 Rupert → R163 Rubin → R150
为什么要使用 Soundex?:
- >数据库去重与模糊搜索
- >族谱/家谱研究
- >人口普查数据分析
- >客户信息匹配
- >拼写错误的纠正
>> 常见问题
什么是 Soundex?
Soundex 是 1918 年提出的一种语音算法,用来根据发音为姓名建立索引。它最初用于美国人口普查,帮助在拼写不同的情况下找到发音相近的姓氏。
American 与 Refined Soundex 有什么区别?
American Soundex 生成 4 位编码(首字母 + 3 位数字)。Refined Soundex(如 SQL Server 中使用)采用更细的映射并生成可变长度编码,以提升匹配精度。
为什么不同拼写会得到同一个编码?
这正是 Soundex 的设计目标:把发音相近的姓名归为一组。例如 Smith 和 Schmidt 虽然写法不同,但读音接近,因此会获得相同或相似的 Soundex 编码,方便在数据库中检索变体。
Soundex 有哪些局限?
Soundex 主要针对英语姓名设计,对其它语言的姓名效果可能一般;而且同一姓名如果拼写差异过大,也可能得到不同的编码。
// 速查表
| Digit | Letters |
|---|---|
| 1 | B F P V |
| 2 | C G J K Q S X Z |
| 3 | D T |
| 4 | L |
| 5 | M N |
| 6 | R |
| — | A E I O U Y H W (skipped) |
// 代码示例
1. Keep the first letter. 2. Replace the other letters with digits (table above). 3. Drop vowels and Y; H and W are skipped (letters on both sides of H/W with the same code collapse into one digit). 4. Collapse adjacent identical digits. 5. Pad with 0 or truncate to letter + 3 digits. Robert -> R163 Rupert -> R163 Rubin -> R150 Ashcraft -> A261 Tymczak -> T522 Pfister -> P236
>> 更多问题
问:为什么 Robert 和 Rupert 的 Soundex 编码相同?
答:两者都以 R 开头,其余辅音按组编码:B/P → 1、R → 6、T → 3,得 R163。Soundex 把发音相近的辅音归为一组,因此同一姓名的拼写变体常能匹配。
问:Soundex 如何处理 H 和 W?
答:H 和 W 被跳过且不起分隔作用:两侧辅音编码相同时算同一个音。因此 Ashcraft 得 A261 而非 A226。元音则起分隔作用。
问:Soundex 有哪些局限?
答:它为英语姓名设计(Russell 与 Odell 于 1918/1922 年的专利),首字母之后的发音差异不予区分。首字母不同的名字,如 Catherine 与 Katherine,无法匹配。