各大输入法分类词库内部格式的简单比较

2022-06-16 14:55:22 浏览数 (1)

之前一直利用闲暇时间做深蓝词库转换,对各大输入法的分类词库有了一些大概的了解,下面来比较下各个词库格式的特点:

1.搜狗细胞词库scel格式

scel格式是采用Unicode编码了汉字、拼音。整个scel格式的内容是:头信息、词库简介、拼音组合列表、词条列表。scel格式的词条的数据结构设计的还是比较好的,它使用了拼音指针来避免在词条中出现重复的拼音来占据内容,也会把同音词合并在一起,节省空间。基本结构如下:

该拼音对应的词条数、拼音指针、词条列表。

2.QQ分类词库qpyd格式

qpyd格式是我一直很头疼的格式,原来是采用了zip压缩词条列表。qpyd格式的内容是:头信息、词库简介、压缩的词条列表。qpyd格式由于采用了zip压缩,所以在同样词条数的情况下,整个文件会显得比其他格式的词库小。但是与搜狗的scel格式不同的是,qpyd格式中,每个词条都对应了其拼音,词语是使用UTF8编码,但是拼音是使用Unicode编码,真是很奇怪。

3.百度分类词库bdict格式

百度的bdict格式算是比较简单的,它其实和搜狗的scel格式很相似,主要不同是使用了默认的声母和韵母列表,而不是写在词库文件中。整个bdict格式的内容是:头信息、词库简介、词条列表,词条中的汉字是使用Unicode编码。词条列表的内部格式如下:

拼音长度、(分母序号、韵母序号)列表、词语

这里的分母序号和韵母的序号是在词库中找不到的,需要通过几个实际的bdict词库解析,一个个的归纳出来。

4.紫光分类词库uwl格式

uwl格式的词库并不是很多,所以我现在还不支持对该词库格式的转换,但是使用了WinHex大概看了下,该格式的词库和scel也比较类似,没有使用压缩,但是编码上好像UTF8和Unicode的都有,词条之间的距离很稀疏,也就是说在文件中,词条和词条间有很多0000,实在是浪费空间。

5.触宝备份词库bak格式

触宝输入法的备份文件格式是我觉得数据结构上最复杂的,里面使用的是一个树结构来表示。树结构中的上一层节点和下一个节点还是双向指针,我花了很多的时间来解读,终于能够实现对该文件的解析,但是有些字节不明白是什么意思,没办法根据词库生成对应的bak文件。触宝使用的是Unicode编码来保存汉字,拼音和bdict做的有点类似,也是用的默认的拼音列表,不同之处是,触宝没有将分母和韵母分开,而且把声韵母的组合作为一个列表。

总结下:

这几种词库格式中,感觉scel是比较清晰的,也比较节约空间,而且容易理解,如果能够像QQ词库那样压缩的话,就更节省空间了。qpyd格式把每个词的每个拼音都记录在词后面,实在是浪费空间,还不如scel格式这样方便,而且拼音和汉字使用了2中编码,真是没必要吧。bdict格式把声母和韵母拆开,以默认列表进行检索,这样也比较好,空间利用已经比较充分。紫光的uwl格式就实在不敢恭维,里面充斥着大量的0000,实在太浪费空间了。触宝词库备份文件数据结构太复杂太复杂,一般难以理解。

若要了解具体每种格式的解析办法,可以参加我的项目代码,项目地址:http://code.google.com/p/imewlconverter/

0 人点赞