前言
接手的项目需要做一个中文首字母的模糊查询匹配功能
踩坑
百度一下,网上很多帖子的实现思路都和下面链接思路一样
刚开始以为可以投机取巧,直接将别人的代码拿来就用。
刚开始是美滋滋的,可是后面在使用过程中发现有部分文字的首字母识别不出来。
然后去细究代码,然后发现是作者实现思路里面包含的中文识别根本不全,只有一部分,连GB2312编码表的中文字都涵盖不全
填坑
没办法,BUG怎么也得修,是伐。搞一轮编码表,整理出如下区间
* 根据GB2312的编码表
* B0A0 - B0C4 A
* B0C5 - B2C0 B
* B2C1 - B4ED C
* B4EE - B6EA D
* B6EB - B7A0 E
* B7A1 - B8C0 F
* B8C1 - B9FE G
* B9FF - BBF6 H
* BBF7 - BFA4 J
* BFA5 - C0AB K
* C0AC - C2E7 L
* C2E8 - C4C2 M
* C4C3 - C5B5 N
* C5B6 - C5BD O
* C5BE - C6D9 P
* C6DA - C8BA Q
* C8BB - C8F5 R
* C8F6 - CBFA S
* CBFB - CDDA T
* CDDB - CEF3 W
* CEF4 - D1B8 X
* D1B9 - D4D0 Y
* D4D1 - D7FA Z
整理完发现,在D7FA之后的,仍有部分中文字,整理之后,发现不是后面中文的字母都不是连续的,故而放弃整理区位码的方式。
接着百度,发现一个在线汉语词典网站,测试了一下,发现该网站可以直接将中文翻译成拼音,而且效率奇快。F12跟进分析,找到该网站的字库文件
该字库支持中文字转换全拼音,但是项目只需要用到首字母,然后下载回来,用Python整理一下对应的数据格式,插入数据库,后面PHP里面要翻译直接’like ’ 模糊查询数据库便可。Python在整理格式的时候,顺便统计了一下字数,该字库文件包含20850个中文字,而GB2312编码表只有6763个中文字,初步估计,字库文件里面的中文字应该能满足日常使用。
PS:“人生苦短,我用Python”,这话一点不假
抛砖引玉
考虑过直接将对应的字符串贴到PHP页面里面,然后用字符串查找的方式,但是字库整理过后的大小也有41K,不知道贴到PHP页面里面,会不会影响效率。如有知悉的小伙伴,留言告诉我吧~~灰常感谢