去年一年搞五笔输入法词库,除了大半年的实践,还始终伴有理论上的思考,目的是为词库的优化提供一种简单明了的规则,以便将五笔词库的效率提升到最优状态。这些思考,最终在我的极爽词库4.0发布前(2004年10月10日)的一篇文章“窝子三大定律”中得到比较全面而集中的总结,如下:
“窝子三大定律”——我的词库效率观及在极爽词库中的应用
比尔·盖茨在他的《未来之路》中说过一句经典的话:如果你手中只有锤子,你会希望你的所有问题都是钉子。自明媚四月我开始编制五笔词库以来,极爽4.0也行将于耕耘半年之后的金秋十月推出,至此我在五笔词库上的工作也该告一段落了。半年的词库工作和思考也使自己积累了一些关于中文键盘输入及词库方面的想法,这些想法逐渐形成明晰的理念,并且一步步地落实到自己编制的极爽词库中。在这里,让我回顾总结一下这些理性认识,让大家看看我是如何用词库这把“锤子”敲打一些输入方面的“钉子”的。
在开始正文前,首先说明两点:
1、引用我在极爽3.0发布帖中的一句话:由于五笔编码本身的技术局限性,意味着编制一个精品词库的过程是项综合各项要素考虑的妥协工作,是种“戴着镣铐跳舞”的自由。代价的牺牲总会发生,而“完美”也是个永远追求但永远无法企及的目标。
2、本篇文章中谈论词库效率的一般性问题,在此排除掉不同五笔用户不同需求的特殊情况,以及排除不同输入法的功能差异,以减少所讨论主题的复杂性,让焦点聚集在词库问题上。假如有朋友对本文中的观点持不同看法需要探讨,请在这个前提下进行。
“窝子第一定律”:
来到这个论坛的人,应该都是对中文的键盘输入比较有兴趣的朋友,都想追求较快的输入速度,提升自己的输入效率。那么如何提升输入速度呢?
对输入法有兴趣的朋友应该都知道“盲打”这个概念,但即使是这样一个常见的说法,居然也是众说纷纭。有人说“盲打”是不看键盘,有人说“盲打”是不看输入候选框。我想,其实不看键盘的所谓“盲打”只是输入的基本功,算不上真正的中文“盲打”。想提升输入速度的人首先要解决的是对键盘的熟悉,最起码能在不看键盘的情况下,至少能比较熟练快速地打出26个英文字母及一些常用标点符号。我所说的这点就是“纯击键熟练度” ,是输入的基本功,和是否中文输入无关。假如你还没具备这个基本功,我个人的建议是,到这里你是来错地方了,你首先要做的去练练敲键盘的基本功。
当然,英文字母盲敲得快不等于中文也打得快,否则前些时间获得世界英文打字冠军的捷克女人就是中文输入冠军了。不少打拼音的朋友打英文可能奇快无比,但要和身边打五笔的朋友比中文速度,可能就要自愧不如了,这里就涉及到一个非常重要的东西: “编码效率” 。王码五笔之能出现,是因为拼音打汉字的编码效率太低;而现在之有“万码奔腾”之说,也是因为不少人追求更高的编码效率之因。在同等“纯击键熟练度”的情形下,中文输入速度比拼中,编码效率高者胜。
在具体的输入实践中,单就作为一种编码的五笔来说,也有不同的效率表现,这就是我们这里要讨论的焦点主题—— “词库效率” 。现在词库不少,但除了因各个词库不同特色而适合不同用户群之外,就通用性而论,也有词库效率的高低之分,即用户感性的“词库好坏”之别了。
在这里就得出了“窝子三大定律”中的第一定律:
第一定律:中文键盘输入的速度,等于用户的纯击键熟练度和其所使用编码的词库效率的乘积。
“窝子第二定律”:
“第一定律”说的都是大道理,比较容易理解,下面就来具体深入一下,探究到底什么因素影响词库效率,或者说客观评价一个词库优劣的标准是什么?
作为一般的五笔用户来说,并不会去深思这个问题,他们只是感性地以自己的切身体验来评价一个词库:有的人说王码五笔自带的小词库好,因为重码低,而且通用;有人还说零重码的词库更好,又能打词又不用选重码;有人说中型词库好,够用就行;有人说大词库好,想打什么词就打什么词,就算重码多点也没关系。
从作词库这么长时间来的思考,觉得上面说的各种说法不无道理,但又是“只见树木,不见森林”,不乏偏颇和误导的地方,每一种说法都能轻而易举地举出反例。作为一个词库的作者,需要寻找出对词库来说最本质的效率元素,而不能被表面的概念所迷惑。
大多用过五笔的人都会说,五笔比拼音打得快,五笔比拼音可以盲打;五笔比拼音的击键数少。仔细追究来说,这里的快有两个因素:击键数少;可以盲打。具体来分析:
在同等击键速度下,击键数少自然能打得更快。从编码和词库的角度来说,击键数少是因为词库中的平均码长较短,在同样一篇文章中能用更少的码键“表达”出来。这点容易理解,而且确实是衡量词库效率的一个非常重要的因素。拼音之所以比较“低效率”,一个重要原因就是因其平均码长要比五笔长。五笔用户为什么要打词组而不仅仅打单字,原因也是这样可以降低均码长。有些朋友在五笔长码方面的尝试,之所以在目前支持者甚寡,一个致命缺陷就在于其比目前的标准四码编码增加而不是降低了均码长。
但事情还有另一面,就是怎样方便盲打——不少人把这一点归结为词库的重码率。这是一个重要因素,但,不完全。完整正确地说,影响能否盲打的真正因素,是对一个词库的熟悉程度,或者记忆程度。一个重码再少的词库,假如第一次用,还是可能不便盲打,而对于一个你非常熟悉的词库,即使它的重码很多,假如你能熟悉它的每一个位置的话,也是可以盲打的,当然这需要你更多的功夫去熟悉它。
那么在同等初次接触条件下,你就可以说,一个需要更少记忆量,更容易熟悉和上手的词库就是个相对较好的词库。需要明确和对不少用户澄清的一点(不假思索可能很容易认同)是,一个词库所需的记忆量并不简单取决于其收词的多少和重码率的高低,一个大词库不一定就比一个小词库需要更多的记忆量,一个零重码率词库也不一定就比一个有重码的词库更好熟悉和上手。具体道理可在“第三定律”一节中阐释,在这里,我把这个决定着词库记忆信息量的因素称为“确定性”——这是一个影响输入速度的一个非常非常关键的因素,高确定性可让你顺畅地输入,而低确定性(高不确定性)则让你举棋不定,严重影响输入的正确性和效率。
所以这里就有了“窝子三大定律”中的重要的“第二定律”:
窝子第二定律:词库效率与词库的确定性成正比,与词库的均码长成反比。
用公式来表示就是:
词库效率=确定性/均码长
这就是著名的窝子公式了。这个公式可作为用来评价一个词库的优劣标准。(什么,没听说过?太孤陋寡闻了吧。这也难怪,是我今天早上才想出的名称^_^)
“窝子第三定律”:
均码长的概念和原理容易理解,也能量化出来比较,而确定性这个概念,相信大多数人还缺乏理性的完整认识,有必要在这进一步深究其构成要素。
我们从多年的学生生涯中明白一个道理:学习一样东西,深入理解其道理比死记硬背重要的多,也省力得多。一个有规律(规则)的东西比无规律(规则)的东西容易掌握,而一个规律(规则)简单的东西又比一个规律(规则)复杂的东西容易掌握。
也就是说,一个有规律(规则)的东西比无规律(规则)的东西所需的“记忆信息量”少,而一个规律(规则)简单的东西又比一个规律(规则)复杂的东西所需的“记忆信息量”更少。
可以看出,记忆信息量的多寡已超出简单的对象的数量多寡了。这与其规则的明晰度有关。实际上,一个词库的记忆信息量是指这个词库中所需专门记忆的那部分的总和,而不是词库的词组数量本身。 (对于大词库还是小词库,同样需要记忆其重码的词组,另外,小词库需要记忆其所有的词组量,而大词库需要记忆其所无的词组量。我们大致可以把少量特别高频的常用词组排除出这个记忆信息量范围。)
对于两个同样初次接触的词库,这个决定着其熟悉上手程度的难易的元素就是其“确定性”,具体分析,这个词库确定性高低由以下三要素构成:词组重码率、词组打空率、词组单纯度。
词组重码率是三要素中最直观最容易看到和理解的概念,就是词库中在输入时需要按选择键才能使其上屏的词组占全部词组数量的比例。显然,重码部分的词组是需要专门记忆其位置的,这增加了一个词库的记忆信息量。在其它同样条件下,重码率越高,该词库所需记忆信息量就大,词库的确定性就越低。反之亦然。
词组打空率指在你不了解这个词库是否有某个词组的情形下,想当然地以词组编码的方式输入这个词组,没有打出来的数量占你全部的想以词组编码方式输入的词组总量的比例。可以打出来的词组不需要你记忆,而打不出来的词组则需要记忆,以免下回重新打空。显然,打空率越高,该词库所需的记忆量越大。词库的确定性就越低。反之亦然。
显而易见的是,打空率和词库中的收词量有直接的联系。但注意,两者并无绝对的必然关系。这点可能会出人意外,理由是这里有一个常人容易忽略和被误导,而对词库来说,又是决定其记忆信息量和科学合理性的重要要素:词组单纯度。
词库收录的全部词组有单纯词和复合词之分,这就象是原子和分子之分的概念一样,分子是由原子组成的。一个词库的词组单纯度就是指单纯词占全部收词中的比例。单纯词是个不可再分出词组而只能分出单字的词组,包括二字词、一些三字词、成语、音译词、专用名词等词组。复合词则是可拆分出多个单纯词组的多字词组,最常见的形式是“二字词+二字词”的四字构词形式,如“国际贸易”“对外开放”。
中文的语言要素可以这样等级来划分:单字、单纯词、复合词。严格来说,复合词并不算语言要素。在这些当中,单字最少,常用单字更少,三四千个左右;单纯词较多,常用单纯词虽多些,但数量也是有限的,个人主观估计是在五万左右,不超过十万个。而复合词则可以说是无限多了。
单字的编码容易记忆和熟悉,常用单纯词的编码也容易上手打出,复合词的情况就大相径庭了。复合词组数量无限,组词数量和长度无限,具有非常大的不确定性。 在词库中,单纯词数量和复合词数量的对比我称之为词库收词结构。在两个词库词组总量相当的情况下,显然,一个单纯词更多、复合词更少的词库显然要比另一个词库具有更高的确定性,更少的记忆信息量,从而也更科学合理些。
因为,输入复合词组,虽然有均码长短的优点,但由于其不确定性高,表现为你不能确定这个复合词组在词库中是否收录了,你打它的编码是否会打空,有这个是否就有另外一个类似的,加上复合词组用途更加专门,常用度更低,输入时编码规则和一般的单字和二字单纯词不一样等一大堆的原因,这些不确定性完全可能抵消了其均码长短的优点而过之,结果当你想以复合词组形式打出时,所耗时间完全够分开单纯词来打出而有余了。可以说,五笔(形码)打复合词组并不是个高效的输入方式——除了一种极其特殊的情形,你的输入法支持海量的巨型词库,使其拥有巨量的复合词组,(词库之所以海量主要原因就在于复合词组的无限多)而且你喜欢和习惯了打复合词组,且不讨厌重码选择(当然可以用长码规则解决,但那样连均码长短的优点也丧失了)。对五笔或其它一些形码来说,这种特殊情形几乎是不存在的,或者没有存在的必要理由——和形码快速盲打的理念背道而驰,与其这样,还不如用日益智能化的拼音输入方式。
所以就有了“窝子三大定律”中的第三定律:
第三定律:词库的确定性由其收词的打空率、重码率和单纯度构成。
“窝子三大定律”在极爽词库中的逐步落实
归纳以上的“窝子三大定律”是:
第一定律:中文键盘输入的速度,等于用户的纯击键熟练度和其所使用编码的词库效率的乘积。
第二定律:词库效率与词库的确定性成正比,与词库的均码长成反比。
第三定律:词库的确定性由其收词的打空率、重码率和单纯度构成。
窝子公式:词库效率=确定性/均码长
这些词库理念是我在半年的词库编制实践中逐渐思考成型的,并逐渐地一步步应用落实到极爽词库的编制实践中。
极爽词库追求的是高效的五笔输入效率,极爽的输入体验。这体现在词库上,就是要作到两点:低均码长,高确定性。
低均码长在极爽词库中通过两点达成:
1、在遵循王码五笔86的标准编码方案和编码规则的基础上,同时在兼容王码输入习惯的前提下,在五笔词库中首创添加编制了“一二级三重简码字”,在输入五笔单字方面缩短了均码长;
2、在词组输入方面,加大单纯词组的收录数量。在目前的多个常用五笔词库中,极爽词库的单纯词组数量是明显地领先于其它多个词库的。
高确定性通过贯彻词组收录的低重码率、低打空率、高单纯度来实现:
1、低重码率:极爽拥有相对大多数词库要低得多的词组重码率,该重码率比较接近最早的王码标准小词库——我所仅知的在极爽词库之前常用词库中唯一的个位数重码率。
2、低打空率:如前面提到的,极爽词库拥有领先于当前多个常用词库的最多的单纯词数量,只要遵循用极爽词库打单纯词不打复合词的简单规则,你将很少遇到词组打空的情形。
3、高单纯度:极爽词库4.0版本的修订升级,一大特点是全面贯彻落实我的单纯词原则,将词库中原来剩余不多的复合词组比较全面彻底地删除了。
我知道第三点做法会有不少人反对,但我去除的理由前面已经阐释得很充足和清楚了——为了提高确定性,或者说消除不确定性,把这些词组(极爽3.0中约有一两千个这样的多字复合词)去掉是值得的。道理很简单,举个例子,你在极爽词库3.0中可以直接以复合词编码打出“有期徒刑”,于是你想当然地想用词库以复合词编码方式打出“无期徒刑”。可是你打空了——因为“无期徒刑”和“载重”重码而没在词库中收录。你得重新一个词一个词地输入了。你打了一个复合词组会自然地想当然地打另外一个,但那个词有可能没有——可能是因为重码,也可能仅仅是因为词库作者的疏忽——这些都是一般词库中收录复合词组经常会遇到的情形。这增加了很多不确定性和打空的机率。
所以我的作法是彻底的,消除这种不确定性。我告诉用户一个非常简单的规则:你用极爽词库,就不要打复合词组,需要输入时主打单纯词,其次打单字就行了。这样你就可以很顺畅地输入而极少会碰到因打空而卡住的情形了。(实际上,据论坛上众多用户的反映来看,很少有用户喜欢打复合词组的)
有了这些,或许你就能较快地熟悉掌握极爽词库,较快地实现高效率的五笔盲打了。当然词库不会完美,总会有不足,完全掌握也需要过程,关于这点,请再看看我在文章开头时首先说明的第一点。
窝子草于2004年10月5日上午
——原载于 wozy's tianyablog 2005年1月16日
无期徒刑还是可以保留的.
ReplyDelete