各种汉字形码编码方案的码元数有所不同,如5,6,9,10,25,26,28,30个等等,那么,多少个码元最合适呢?
首先通过以下4组数字,了解一下汉字集的大小,常用汉字的多少及其在文字资料中的覆盖率。
1、国家标准GB2312-80收集了6763个简体汉字,国家标准GB18030-2000收集有2万7千个中日韩(包括大陆,台湾,香港)的汉字。
2、《现代汉语常用字表》分常用字2500个,次常用字1000个,经计算机抽样检测,常用字在语料中的覆盖率达到99.48%,掌握了常用字就达到了利用汉语的基本要求。
3、据统计,红楼梦书只用了4200个字,毛泽东选集一至四卷也只用了2981个字。
4、著名计算语言学家冯志伟教授发表在《信息时代汉字的标准化和共通化》一文的统计数据:
7000通用汉字覆盖率和不足率
汉字数 | 增加字数 | 覆盖率 | 不足率 |
---|---|---|---|
1000 | 90% | 10% | |
2400 | 1400 | 90% | 10% |
3800 | 1400 | 99% | 1% |
5200 | 1400 | 99.9% | 0.1% |
6600 | 1400 | 99.99% | 0.01% |
从中可以看出,1000个汉字的覆盖率为90%,以后每增加1400字,覆盖率百分比的最后一个9字之后便增加一个9字。覆盖率达到99.999%的6600个汉字,就构成了现代通用汉字的主体,覆盖率达到99.9%的3800个汉字,就包含了全部现代常用汉字。
从上面的数据可以看到,汉字很多,但常用汉字并不多。常用汉字可以粗略地定为3800(或5200)个,因为其覆盖率达到了99.9%(或99.99%),因此汉字输入法只要能方便快速地输入这3800(或5200)个常用汉字就行了。
对于3800(或5200)以外的数目巨大的非常用汉字集,因其覆盖率只有0.1%(或0.01%),即通常情况下输入1千(或1万)个汉字,才会碰到非常用汉字集中的一个汉字,因此输入法不必追求对这些非常用汉字的输入速度,只要能输入就行(即允许重码)。
因此“多少个码元最合适”的问题,就可以表述为:为了方便快速地输入3800(或5200)个常用汉字,多少个码元最合适?方便快速,就是取码次数少,重码少。
如用10个码元对汉字编码,每个字4码,10*10*10*10 = 10,000(一万个码位),分配给这3800(或5200)个汉字,一字一码(无重码),还有很多码多余(空着)。
这看起来很容易,但因汉字结构的特殊性,实际编起来,无论你怎样在10个码元上排布字根,无论你想出什么规则对汉字进行编码,得到的结果都是重码太多。即使每个汉字用5个数字编码(码位有十万个),或每个汉字用6个数字编码(码位为百万个),3800(或5200)个汉字仍有很多重码。
10个码元的汉字形码,无论字根表与取码方法如何,都有重码太多,取码次数太多(6个)的严重缺陷,都不能实现对这些常用汉字的方便快速地输入。
和码软件在四个码的输入过程中,单字都有机会被选在待上屏位置,最常用的字,最早被选上。
输入第一个码,有25个字可被选在待上屏位置;
输入第二个码后,新增618个字(动态值:不包括第一码的25个字);
输入第三个码后,新增4301个字可被选在待上屏位置(动态值:不包括第一、二码的25+618个字)。
在三个码的范围内,和码能将25+618+4301 = 4944常用汉字先后放在待上屏位置,即能实现对3800(或5200)个常用汉字的方便快速输入。
虽然和码三个码内输入的4944个常用汉字,不可能就是3800(或5200)所含的常用汉字,但肯定包括了其中的绝大多数,且越常用的字,越可能被包括。和码三码内,没有输入的少数常用汉字,在输入第四个码时,极有可能被选在待上屏位置。
码元多,其编码的容量(码位数)就大,以25个码元为例:
一个码,编码的容量是25。
两个码,编码的容量是25 * 25 = 625个,还要加上第二码为零时的25个,两个码的总容量就是:25 * 25 + 25 = 25 * 26 = 650;
三个码,编码的容量是25 * 25 * 25 = 15625,还要加上第三码为零时的25 * 25 = 625个,三个码的总容量就是25 * 25 * 25 + 25 * 25 = 25 * 25 * 26 = 16250。
码元数增加,编码的容量也增加,以25与30个码元为例,容量的比较如下:
码元数 | 一码的容量 | 二个码容量 | 三个码的容量 | 总容量 |
---|---|---|---|---|
25 | 25 | 25*26 = 650 | 25*25*26 = 16250 | 16925 |
30 | 30 | 30*31 = 930 | 30*30*31 = 27900 | 28860 |
30比25增加了5个码元,总容量增加了28860 – 16925 = 11935;增幅为:11935/16925 = 70.52%。
但30码元比25码元,对提高3800(或5200)个常用汉字的输入速度的增加却很小,以下分析其原因。
在理想的编码情况下,用25与30个码元对3800(或5200)个常用汉字进行编码,再输入这些字,计算其最少击键次数。理想情况下的输入速度,也是汉字输入的极限速度。
理想的情况是:
1、所有的汉字都没有重码;
2、一码字与二码字的所有码位上,都能排上汉字,且一码字,二码字,三码字都不互相重叠。
理想情况下,用25个码元编码输入3800(或5200)个汉字,最少击键次数如下:
字数 | 最少击键次数 | |
---|---|---|
一码字 | 25 | 25 |
二码字 | 25*26=650 | 650*2 = 1300 |
余下的都是三码字 | 3800(或5200)- 650 - 25 = 3125(或4525) | 3125(或4525)*3 = 9375(或13575) |
总计 | 10700(或14900) |
理想情况下,用30个码元编码输入3800(或5200)个汉字,最少击键次数如下:
字数 | 最少击键次数 | |
---|---|---|
一码字 | 30 | 30 |
二码字 | 30*31=930 | 930*2 = 1860 |
余下的都是三码字 | 3800(或5200)- 930 – 30 = 2840(或4240) | 2840(或4240)*3 = 8520(或12720) |
总计 | 10410(或14610) |
理想情况下,25与30个码元,编码输入3800(或5200)个字,最少击键次数对比如下表:
最少击键次数 | |
---|---|
25个码元 | 10700(或14900) |
30个码元 | 10410(或14610) |
减少量 | -290(或-290) |
在理想的情况下,30比25个码元,输入3800(或5200)个汉字,总击键次数少:290(或290)次,即少2.71%(或1.95%)的击键数,输入速度增幅也是这个比例。这说明 25个码元后,再增加码元个数,对于提高的输入速度,作用很小,也说明对于3800(或5200)个常用汉字,输入法的速度有极限。
25到30个码元,码位的空间由16925增加到28860,增幅为70.52%,但输入速度的增幅仅有2.71%(或1.95%),重要原因是汉字常用字是有限的3800(或5200)个。
有人会说,理想的编码统计结果与实际编码有很大的出入,我们下面就来分析实际的编码情况。
实际的编码情况是:
1、有些汉字的编码完全一样,有重码;
2、二码字的码位上,有些排不上汉字,是空位。
这些实际情况对于25个码元与30个码元的方案都会出现。在前面已说明,对于GB2312-80 的 6763 个汉字,和码在二码位上排了618个字,只有32个空位, 已接近理想值了。因此不论30个码元的方案实际编码情况与理想值的差距如何, 即使是理想值,其输入速度与25个码的和码相比,都不会有明显的增加。
词组在日常汉字输入中非常普遍,对汉字输入速度有很大的影响。汉字词组与单字一样,也有常用词组与覆盖率。
商务印书馆的《现代汉语常用词表》收集现当代社会生活中比较稳定的、使用频率较高的汉语普通话常用词语56008个(约6万)。
由于词组的输入大多数都要用到第四个码,因此25个码元的词组容量为25 * 25 * 25 * 26 = 40万余条,30个码元的词组容量为30 * 30 * 30 * 31 = 81万余条。这些容量都远大于常用词组的数量。
与上面单字的分析一样,由25到30个码元,词组的码位容量由40万条增加到81万条,但对常用词组的输入速度不会有明显的增幅,重要原因是常用词组的数量只有6万,个码元的和码已经能方便快速地输入这些词组了。
1、与和码的5×5区位排布相比,6×5,5×6,6×6等区位排布都复杂难记些;
2、在现有的通用大键盘上,要使用非英文字母键做输入键,给输入带来不便。
从上面的分析可以看出,25个码元的和码之后,再增加码元的个数对提高汉字的输入速度影响很小。因此对于现有的汉字集与常用汉字集,25是最好的码元个数。只要汉字集不变,常用汉字不大幅增多或减少, 25个码元最好也就不会变。