Soundex音似搜索的编码规则
Soundex是什么?
Soundex是一个将单词编码为1个字母+3个数字(不足部零)的算法,它将发音相近的单词映射到同一个编码,能有效地搜索到发音相似或相近的单词。
例如:love的编码为L010,live的编码为L010。
假设用户搜索"my love"却错误地输入了"my live",那么soundex依然能匹配到正确的结果。
编码规则
Soundex只能对字母进行编码,因此预处理掉单词中的非字母字符,如数字、特殊符号等,以及转换大写。
编码规则:
- 保留第一个字母,去掉所有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
- 编码去重,相邻编码相同(或中间被h、w隔开)则合并(含首字母),被其它间隔则保留。
- 取得1个字母+3个数字,不足补0
样例
1. 带有特殊符号的字符串
输入为:he1llo#abc1
输出为:H412
预处理: he1llo#abc1 -> helloabc -> HELLOABC
- HELLOABC -> HLLBC
- H4412
- H412
- H412
2. 短字符串
输入为:jk
输出为:J000
预处理: jk -> JK
- JK -> JK
- J2
- J (J对应2,即22,仅编码一次,故保留首字母即可)
- J000
总结
Soundex是一个简洁的发音相似的编码算法,它可以达到初级的模糊音效果。
如果需要更精准的发音映射,可以使用Metaphone算法,它使用了更高级的规则;或者改进版本的的Double Metaphone算法。