好玩的拼音

最近在产品里要用到汉字转拼音的一个小功能,大牛征哥忙不得暇,我就一时技痒上手了。

首先是要找一个比较全的汉字和读音的对照表。征哥找到一个,结果仔细一看,里面有不少发音根本无法读,比如 dem 这样的,由于要支持 CJK 的 20902 个汉字,一个个去对是不现实的,一是时间不允许,而是水平也不够,自忖认识的人里面还没有谁能把两万多汉字都能念上来的。后来发现了一个国外的软件,可以查询汉字发音,从网站和产品看这个出品方,应该比较专业,因此将它的数据作为标准,整理了一份汉字读音对照表。

因为懒得统计对照表中到底有多少种发音了,我就在网上找到一个拼音发音表,心想这东西总不会出问题吧,可是偏偏就出了问题。征哥用我生成的库查询时发现,有好些个汉字没有发音或者发音少了,比如“得”,就没有 dei 的音,仔细一看,还有其他几个音(例如 pou)也没有。为了求全,只好又花工夫找了一个看起来很专业的拼音发音总表,共有发音 407 个。把所有汉字分配到这四百多个发音的过程中,又发现还有的读音是不在我的表里的,例如 m、n、ng 这三个古怪的音,根据我的记忆,声母是不可以作为独立拼音发音存在的。另外还有一个是 chua,不过这个至少还是可以拼读出来的。那三个音对应到两个汉字上,一个是“呣”,一个是“嗯”。前一个我本就不认识,所以无法用搜狗拼音输入法验证应该如何输入,反正只输入 m 肯定会翻屏翻得累死掉,读者之所以现在能看到它,是我总算找到它有另一个发音 mou。而“嗯”,我一贯以为它的拼音是 en,但在网上找了好几个在线词典和字典,包括我心目中极为权威的汉典网站(www.zdic.net),给出的拼音都是 n 和 ng,我起先还怀疑 n 和 ng 是 en、eng 的另一种形式,但是发音 en 的另有其字,比如“摁”,eng 的也有“鞥”。也就是说,我原来认为的同音字“嗯”和“摁”(不考虑声调),其实是不同音的。

仔细考虑也会发现,我妄图把 n、ng 作为 en、eng 的同音看待是不能解决根本问题的,因为无法照此处理 m 这个发音。真是晕死。

除此几例棘手的情况外,还有一些字也是费周章的。比如一个字,“扽”(以及我怀疑是其异体字的“扥”),我的数据源中将其发音标注为 dun,但我在其他地方查这个字的读音都是 den。再有“忒”,它应该有三个读音,te、tei、tui,可我的数据源里只有第一个。在网上找了个 GB18030 的汉字读音对照表,它的里面也缺中间的那个读音。这些问题又让我开始怀疑数据源的权威性来。神奇的是,在网上怎么也找不到国家的标准化部门制定的官方文件。

我只好和征哥发出无奈的感叹:水太深了。现在聊以自慰的是,我的方案:1、完美支持多音字;2、库体积很小;3、数据在文件中和内存中可以保持一致的形态,加载方便;4、检索速度很快;5、当前只支持 CJK 内的汉字,但是很容易扩展;。

另记,敬业的征哥经常在要下班的时候告诉我出问题了(因为他上班时间基本上都在各种会议里度过,哈哈),害得我多次加班,特此纪念。

—— 记于百度空间

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注