汉字编码输入系统的编码器
汉字编码输入系统中的编码器是由输入人员来充当的。他把从信源来的消息用某类字符进行编码。由于消息所含的汉字个数不同,便形成了单字型、字词型和整句型三种类型的输入法。构成消息的所有字符(称为源字母)构成了源字母表,而编码用到的所有字符(称为码字母或码元)构成了码字母表。消息又称为源字,而将消息编码后形成的码字母序列叫做码字。码字将被直接或间接地作为信道的输入。如果码字母就是键盘字母,则码字母就直接被作为信道的输入。如果码字母不是键盘字母,就需要通用某种映射将其与键盘字母对应才能作为信道的输入。同时考虑信源和信道的特点来进行的编码称为信源信道联合编码。
由于非汉字符号的输入通常不是采用一般意义上的编码方法进行的,因此将其另做专题讨论。对汉字符号,结合研究汉字编码输入系统的需要,我们从理论和实际两方面来讨论其编码问题。
① 理论编码
从理论上,我们可以考虑编码时的极端情况。极端情况在实践中是不可能遇到的,但是却对实践具有方向性的指导意义。由于汉字编码输入法所用的码字母数多在26至36之间,因此我们的计算都只针对这两种大小的码字母表。
在论述信源时我们知道,不限制编码对象的长度时汉字极限熵为4.5比特,以词为单位计算的词零阶熵折合成汉字熵的结果为7.64,以单字为编码对象时汉字零阶熵为9.66。如果均衡地使用各个码字母进行编码且各码字母之间没有制约关系,则在码字母数为36和26时的最短平均码长(码字母数/字)如表3.2所示。
从表3.2中可以看出,码字母数越少最短平均码长越长,编码对象越小最短平均码长也越长。在构造编码时,对于极限编码来说不论是采用等长编码还是采用不等长编码其结果都是一样的,是编码效率的理论极限值。但对于编码对象的大小受限而且大小一定的编码来说,不等长编码的效率要比等长编码的效率高得多。
极限编码的构造方法已在3.1.2节中介绍过了。目前已有现成的字频表和词频表可供使用,因此平均码长最短的汉字信源字编码和词编码都可以采用N元Huffman编码来构造。如果考虑键位相关击键时间当量,则需要对编码字符在键盘上的分布进行调整才能充分地利用信道容量。
② 实际编码
在汉字编码输入实践中,对汉字信源进行编码时不可能只考虑编码对象的使用频率和键位相关击键时间当量表。由于编码工作需要人来完成,因此为了便于用户记忆,实际的汉字编码是分两步进行的,而不是直接用码字母对汉字编码。第一步是从汉字抽取特征信息元(又称字元),第二步是将字元映射到键盘字符。词组的编码一般是从单字编码根据一定的规则派生而来的。
③ 提取字元
在汉字编码实践中使用的最重要的字元是字音和字形。提取什么样的字元?怎样提取这些字元?这些问题在一定程度上决定着汉字编码输入法的成败。
(1) 字音
我国存在着北方话、吴语、湘语、赣语、粤语、客家话、闽语七大方言。这些方言区的人们虽然难以进行口头交流,但是却都使用着同一种以方块汉字为基础的文字。也就是说,同一个汉字在不同的方言区里可以能有不同的发音。如果以字音为字元为汉字编码的话,应该以哪种方言为准呢?
通过长期的努力,我国已经形成了民族共同语。这个共同语是以北京语音为标准音,以北方话为基础方言,以典范的现代白话文著作为语法规范的普通话。我国宪法第一章第十九条规定:“国家推广全国通用的普通话”。汉语拼音和普通话是我国基础教育的内容,加上市场经济导致的地区间交流的频繁,使得普通话普及得非常快。
在大陆,《汉语拼音方案》是普通话的法定拼写方案。在台湾,还在沿用注音符号拼写普通话。根据汉字拼音拼写规则,在拼写音节时,以韵头i和ü开始的零声母音节需要变为以y开始,而以韵头u开始的零声母音节需要变为以w开始,所以有时也将w和y看成是形式上的声母。
汉字的数量众多,仅GB2312字符集的汉字就有6763个,按新的GB18030字符集则汉字达27533个。同时,在输入法中采用字音时一般都是不标调的。这样,平均每个音节以GB2312为准有6763/400≈17个汉字,以GB18030为准则有27533/400≈69个,一音多字的现象非常严重。当然,实际上每个音节上分布的汉字数量并不均匀,有的音节(如ji、yi等)上的汉字多达100多个,而少数音节(如fo、dia等)上却仅有一个汉字。另一方面,又有不到20%的汉字对应多种音节,使得汉字与音节的关系更加复杂。更为重要的是,汉字本身的表音能力很弱,大部分汉字的读音都需要逐个学习。很多汉字又是罕见字,因此没有谁能认识所有的汉字,大多数文化人也只能识读3000多字。
(2) 字形
几千年来,汉字的书写形式发生了很大的变化,经历了甲(骨)文、金(钟鼎)文、篆书、隶书、楷书、行书、草书等阶段。目前,我国的汉字印刷体包括楷体、宋体、仿宋体和黑体四种。同一个字,书写形式和字体不同的话,在字形上也可能有很大的差别。在GF3001《信息处理 GB13000.1字符汉字部件规范》和GF3002《GB13000.1字符集汉字笔顺规范》中,都以楷书的宋体和楷体为准确定部件和笔画。
字形是构成方块汉字的二维图形。构成汉字字形的要素是笔画、笔数以及汉字部件的位置关系等。笔画是构成楷书汉字字形的最小连笔单位,笔顺是书写每个汉字时笔画的次序和方向,笔数是构成一个汉字或汉字部件的笔画数。汉字部件是由笔画组成的具有组配汉字功能的构字单位,传统上又称为字根。
汉字结构是部件构成汉字的方式和规则。最基本的汉字结构有四种:独体结构、左右结构、上下结构和包围结构。这些基本结构能够相互嵌套而形成更复杂的结构。例如,“照”的结构如图3.3所示。
与部件紧密相关的另外两个概念是部首和偏旁。部首乃一部之首的意思,它是一类汉字的共同特征,用于将汉字分类以后进行检索。《说文解字》将9353个汉字分类为540部,每一部类中都有同一个表意结构。这个表意结构是一个独体字,被排在这一部类汉字之首,故称部首。《康熙字典》采用214部首、《汉语大字典》采用201部首,而《新华字典》采用189部首。对于左右型结构的汉字,部首被特别地称为偏旁。
(3) 取舍
上述字音和字形信息非常丰富,优秀的汉字编码在决定提取什么字元和怎样提取字元的时候需要考虑到方方面面的因素。王力德通过对汉字属性的系统分析和评估得到了表3.3的数据[12]。
表3.3中,必修系数为某汉字属性对“中小学语文课所必修”的隶属度,必修者为1,非必修者为0。规范系数为某汉字属性对规范性的隶属度;完全明确且有公认的统一标准,不产生歧义者为1;基本有公认标准,但使用时存在比较大的模糊性为0.5;没有公认标准,无论范围或分类全部都是各家任意规定,模糊性相当严重者为0。简单系数为某汉字属性对简单性的隶属度;简单、直观、易掌握者为1,有一定难度者为0.5,难学者为0。记忆系数为某汉字属性对记忆性的隶属度;某属性种类少,记忆量少,无须强制记忆,回生率低则为1;反之为0;介于两者间的为0.5。
根据表3.3的合计栏,可以得到以下汉字属性易学性的综合排序:声母、笔顺(4);韵母、声调(3.5);字型结构(3);部首、笔画数、角形(2);字根(1)。可见,字根(或部件)的易学性最差,而声母和笔顺的易学性最好。
另一方面,从属性的可调整性来看,字根的灵活性最大。虽然国家出台了GF3001《信息处理 GB13000.1字符汉字部件规范》,但是目前流行的形码输入法几乎都没有完全遵循它,而且各种别出心裁的形码方案还在不停地产生。这是因为字根的模糊性使得编码的自由度大增,从而可以得到速度素质较好的方案。
采用尽量易学的字元做出速度素质最好的输入法应该是汉字编码键盘输入的最高目标。虽然达到这个目标是不可能的,但是尽量接近这个目标或者在易学和快速之间找到一个人们普遍接受的平衡点,却是能够实现的。
在汉字编码实践中,人们根据不同的设计理念而提取不同的字元。根据提取字元的不同,汉字编码可以分为音码、形码、音形混合码。音码需要考虑不认识的字如何输入。形码需要考虑不会写的字如何输入。音形混合码既要懂音又要懂形,需要考虑如何减轻记忆量。
在为单字编码时,音码一般取声母和韵母作为字元并按先声母和韵母的顺序提取,少数音码还后面附加声调;形码主要取部件或笔画作为字元,提取字元时一般按书写顺序,有的则以字元的几何位置为序,字元冲突时以大字元优先。
在为词组编码时,不论哪种编码都是从组成词组的字中按一定规则抽取部分字元。一般的情况是,二字词取各字的头两个字元,三字词取第一、二字的头一个字元和第三字的头两个字元,四字及四字以上词取前三字的头一个字元和末字的头一个字元。
④ 字元映射
目前汉字编码输入使用的键盘主要有通用键盘和数字键盘两种。注意,这里的通用键盘不包括101键盘右侧的小键盘,而数字键盘包括101键盘右侧的小键盘、财务用数字键盘小键盘、手机键盘、电话键盘等。将字元映射到通用键盘字母的汉字编码叫做“通用码”,而将字元映射到数字键盘的汉字编码叫做“数字码”或“数码”。
(1) 音码字元的映射
音码根据音节拼式与键盘字母的映射关系主要有全拼和双拼。
全拼完全以《汉语拼音方案》为准给汉字标注普通话读音,而拼音字母绝大多数就是键盘上的字符,只有两个特殊字符ü和ê需要用键盘上已有的符号来代替它们。另外,声调符号也是无法直接用键盘输入的,也需要变通表示。
GF 3006-2001《汉语拼音方案的通用键盘表示规范》规定用V表示ü,用组合EA表示ê,用1、2、3、4、5表示阴、阳、上、去、轻五个声调。现在,以全拼做汉字编码的输入法,如智能ABC和微软拼音等,都已按此规范设计了。在手机键盘上,虽然一个键对应了多个字母,但是由于字母都标在了键帽上,所以输入时也很直观。因此,会汉语拼音和普通话的人基本上不需要学习就可以使用全拼输入汉字,导致目前全拼成为用户最多的汉字输入法。同时,不会普通话或汉语拼音的人又可以通过用全拼输入汉字来学习它们。这样,全拼输入法就具有规范性、易学性和知识性三大优势。
但是,全拼的拼式很长,而且其字母在键盘上的分布很不均匀,使得其输入效率受到极大的影响。为了解决这个问题,便出现了双拼。双拼主要用于通用键盘,还没有用于数字键盘的。
双拼的实质就是用两个键盘字母表示一个普通话音节,从而压缩音节拼式。除零声母音节的表示特殊外,一般用前一个字母表示声母,用后一个字母表示韵母。同一个字母既可以表示声母也可以表示韵母,通过其在编码中的前后位置来区分它的作用。通过表示方法的变化,双拼还可以使其字母的键盘分布得到一定程度的优化。主要的双拼方案有自然码双拼、智能ABC双拼、微软双拼、刘氏双拼、四通双拼、声数码双拼等。目前,双拼方案的研究不少,但还没有得到统一[69]-[71]。值得一提的是,文字码拼音仅用22个字母就实现了双拼,剩下的4个字母则用来表示声调和进行重码选择,完全避免了使用数字键[72]。
除了全拼和双拼外,实际上还有介于它们之间的方案,不过其影响很小,没有主流输入法采用。
(2) 形码字元的映射
形码中的部件、笔画与键盘字母的映射方式主要有形托、音托和位托。
形托就是在形状上与键盘字母相似的部件或笔画安排在该字母所属的键位上,其代表输入法是表形码。但是,部件与字母的相似性毕竟是有限的。运用形托时,常常需要根据设计人的构思去领会这种“相似性”,从多角度进行联想,其中不免牵强附会。
音托就是通过部件、笔画本身或其名称的读音,取该读音的汉语拼音首字母作为中介,将部件、笔画对应到通用键盘的键位上,其代表输入法是大众音形码。但是,相当数量的部件没有读音和名称,需要采用其它对应方式或进行硬性的规定。另外,V、I、U和“,”等键位没有读音,音托无法利用它们。
位托就是通过将笔画按某种位置规律布置在键盘的键位上。一般将笔画分为横、竖、撇、捺、折五种并按此顺序排序。对于通用键盘来说,键盘先被分成五个或六个区,每个区再由外向内或由内向外细分为五个位。不单是基于笔画的形码才使用位托,基于部件的形码也经常使用位托。五笔字型的字根大都以其首笔确定字根在通用键盘上的区号,再以其次笔确定字根在通用键盘上的位号,区号和位号共同确定了字根所在的键位。但是,五笔字型的字根布局例外太多,所以很难掌握。二笔输入法则采用顺取两个笔画组成笔对以定其区号和位号,另外对不成对的单笔则在单笔画区定位,没有了字根这个中间层,易学性比五笔字型好得多。在数字键盘上,一般用1、2、3、4、5分别代表横、竖、撇、捺、折五种笔画,并且已写进GF3002《GB13000.1字符集汉字笔顺规范》中。
⑤ 重码及其处理
在实际的汉字编码中,不论是字元的提取还是字元向键盘的映射都受到规则的约束,同时一般的输入法对最大码长都进行了限制,以提高输入效率,因此重码是不可避免的。事实上,没有重码的输入法记忆量太大,是不实用的,例如区位码和电报码只能在极其特殊的情况下使用。
在通用键盘上,绝大多数汉字编码的最大码长为4,也有极个别的为3或5。在数字键盘上,一般汉字编码的最大码长为6,但也有码长更长的。基于拼音转化的语句型输入法,如智能ABC和微软拼音等,是一个例外,其最大码长可以很长。对一个非语句型的汉字编码来说,单字和词组的编码长度通常都达到了最大码长。例如,在五笔字型中除个别两个字根的汉字的编码长度为3外,其余所有字和词的编码长度都为4,而五笔数码的最长码为6。
重码虽然不可避免,但是重码太多则会导致过度的人机交互,从而严重地影响输入效率。除了在编码时采取的离散重码措施而外,对付重码的措施主要有:扩大上下文范围、动态地调整重码顺序和采用强制性简码。
语句型输入法将上下文范围扩展得很大,利用汉语音节之间的相互约束关系来限制音节所对应的汉字数,对现代汉语连续文本取得了极好的降低重码的效果,经过适当的训练准确率可达98%。拼音类字词型输入法则尽量采用词组进行输入,以避免遇到大量的单字重码。优秀的字词型输入法还会提供方便的词组自定义功能,以扩大用户在输入时能够使用的词汇量。
动态地调整重码顺序是指在输入过程中,遇到需要选择的重码字词时,则在下次输入同样编码时将选择过的字词提前到与其同码的所有字词的前面,从而节约一次空格键操作,同时也使输入者更容易将其定位。
简码是指对常用的字词用不完全编码输入,而强制性简码更进一步规定凡是能用不完全编码输入的就不能再用完全编码输入。这样,强制性简码不仅能够减少重码字词,同时还能缩短常用字词的码长,从而极大地提高输入效率。效率高的输入法都十分重视简码的设计。
一级简码字数量最少,一般只有20多个,但是使用频率很高,只需输入第一个码元加空格就可以录入。二级简码字数量也不多,一般可有400多个,使用频率也较高,用编码的前两个码元加空格录入。三级简码数量较多,可达数千个,用编码的前三个码元加空格录入。对于全码码长为四的汉字编码来说,三级简码字并不能节约使用的键数,但是如果使用强制简码的话,则可非常有效地减少四码码位上的重码。
不过,与最佳不等长编码相比,上述最流行的简码设计方法是有很大冗余的,有很大的改进余地。
⑥ 非汉字符号的处理
一个完善的输入法,不仅要能输入汉字,而且还要能输入非汉字符号。在最早的汉字编码输入法中,仅仅解决了汉字的编码输入问题,就连标点符号(如中文句号“。”)都需要用区位码来输入。现在的输入法都对常用非汉字符号的输入问题非常重视。
由于通用键盘上的按键有限,而许多非汉字符号都有全角和半角两种形式,所以为了便于选择使用同一字符的这两种形式,便在输入法中设置了全角状态和半角状态。传统上,在全角状态时可以支持中文标点符号的输入。但是,在输入实践中,对除标点外的所有ASCII字符,人们都倾向于使用其半角形式。于是产生了中文标点状态。在此状态下,除中文标点和个别常用符号外,其余的ASCII字符都是半角。
在输入中、英文混合文本时,需要频繁地进行中、英文状态之间的切换和英文大、小写状态之间的切换。Windows在操作系统一级提供的中、英文状态切换方法是使用Ctrl+空格复合键。复合键操作时不方便,于是新型的输入法竞相采用Shift或Ctrl进行单键中、英文状态切换。但是,英文大写状态、英文小写状态和中文状态三者中任意两者间的单键切换问题还没有得到很好的解决。
对于不常用的非汉字符号,如希腊字母、修饰符号、数字符号等,一般采用分类的方式用不同的软键盘输入。个别输入法提供了编码方式来输入非汉字符号。不幸的是,带调汉语拼音字母虽然已成为了中文里不可或缺的一部分,但是还没有输入法完美地解决其输入的问题。