本文相较上一篇,重点介绍常见的形码。主要针对刚入坑或想入坑但还不确定哪个形码方案更前(sàng)途(xīn)光(bìng)明(kuáng)的小伙伴。
盲打 60 字/分钟以上的老鸟可以低空掠过了……
如果现在问我,玩过的玩具里哪个最好玩?我会说,有俩,一个是小时候的乐高,另一个就是 RIME。本文就主要介绍几个前两年在折腾 RIME 的过程中我用过的形码方案。
不扯那么远,先说一下最常见的音码方案,在中国大陆,提到汉字录入就绕不过「拼音」二字,这是基于汉语拼音方案输入的,键位跟英文键盘没有区别,可以说基本做到了「无门坎、零添加」,只要会拼音规则就能打字,现在四十岁以下的人一般鸭梨不大。如果存在困难,也多是两点造成的,一是方言与官话差异较大,而自己普通话发音不准,二是键位不熟悉,击键的时候按错了。归于一句话就是,没有深刻领会「唯手熟尔」。海峡对岸还使用的一种叫「注音符号」的方案,跟「汉语拼音方案」本质上是一脉相承的,在拼写的时候声介韵母都能做到互相对应。而输入时最大的区别是键位布局不同,且输入零声母的字时不需要将「i」「u」写做「y」「w」。
基于发音的方案最大的缺点应该是重码造成的不便,因为汉语同音字太多了。比如「高校」和「高效」拼音编码完全一样,即使加入声调也不能有效加以区别(gāo xiào),输入时至少需要再按一个键才能区分两者。现在的输入法软件大都借助大词库,云计算等成果的帮助,输入化学名、历史年号等专有名词不那么费劲了,但是看到「分命羲仲,宅嵎夷,曰晹谷。寅賓出日,平秩東作。」这样的文章,恐怕不少人依然会比较头大。
为了达到降低重码、提高打字准确性的目的,有人设计了区分尖团音的方案(ziam_tuan);有使用「国语罗马字」(Gwoyeu Romatzyh)或「通字罗马字」(tungdzih lomaadzih)等相比汉语拼音来说拼写区分度更高(甚至带有入声)的方案;还有各种爱好者做的方言方案,比如粤语(jyutping)、吴语(soutzoe、wugniu)、中古汉语拼音(triungkox zyenpheng/sampheng)等,都是比较成熟的方案。而我只用过佛振做的中州罗马字(zhung),重码降低了不少,不过在普通话多年的冲击下,有些读音拿不准甚至不会说了。
另外再次安利一波宫保拼音方案,详情见宫保拼音推荐。
但是不要忘了,汉字是表意为主的,不少歪果仁第一印象说咱是 draw(画)汉字的,能不能根据字形打字呢?
终于说到了本文的正题,形码。
根据字形输入的方案,最常见的要数「五笔字型」了,80 后回想一下,有多少小伙伴是以学五笔打字为理由让家长给买小霸王学(yóu)习(xì)机(jī)的。我最早见识这种打字方法时刚上小学,观摩高手把纸质书转换成电子版,相比当时流行的另一种铅字排版(再次暴露年龄),这真算是飞越了。当时看高手打字,多数时候我还没有听清楚键盘响了几声,字就在屏幕上一行一行蹦出来了。我那时候连字都没认识多少,跟我说拆分?还是玩乐高去吧……直到高二时无意中看到一本讲五笔规则的书,才算是入门了。这是方知道「五笔」是五种笔画的意思,压根也不是打五下出一个字。
五笔字型方案用「12345」表示「一丨丿丶乙」,对应「横竖撇捺折」五种笔画,字根分布也都是有规律的。如下图:举个栗子,1(一)区第二个键,记为「12」,对应于英文键盘的「F」,其中「12」的意思,既表示在 1 区排第二位,在这个键上的字根拥有双倍(1×2)的「一」(二/干),也表示兼有 1 区和 2 区的笔画(1+2),即以「一」开头且第二笔是「丨」(土/十);同样,字母「W」对应「34」,那么先丿(3)后丶(4)的字根(人/八)就在「W」上了;「Y、U、I、O」都在 4 区,他们最大的区别就是各自的字根里包括几个点了,即「丶冫氵灬」。
我猜五笔在设计之初,考虑输入速度时优先级大于其他方面,忽略了一些字的细节和扩大到更大字库的问题。所以一些字比如「贏赢嬴羸」编码都是「ynky」,词语「老师」「教师」不仅意思相近,而且有着同样的编码,「深度」「浓度」和「尝试」都是「ipya」……况且「识别码」对于新手也是非一般地不友好。
不少人吭哧瘪肚背会了字根口诀,最后死在了识别码上。识别码用来区分字根编码相同而结构不同的字。比如「詧、信、隹」三个字,「詧、信」的字根编码都是「wy」,无法区分,只好求助于识别码。因为最后一笔是「一」,那么识别码就在 1 区。这两个字分别是左右结构和上下结构,识别码就对应 1 区的第一和第二个键,即「G、F」,所以「wy+g」得「信」,「wy+f」是「詧」。再说「信、隹」这两个,编码都是「wyg」,这又是怎么回事,识别码也一样?这还真不是。因为「信」是「亻+言+识别码」,「隹」是「亻+亠+圭(去掉一横)」,如此一来编码就又一样了,只好人工选择了,「酒」和「洒」也是这样的情况。那识别码的规律是啥呢?除了左右、上下、其他这三种结构对应最后一笔所在区域的第一、第二、第三个键以外,没有规律!你问我为啥不是上下在前左右在后的顺序,我也不知道,兴许是王永民先生抓阄的结果也说不定。正因为识别码除了记忆与练习以外毫无捷径,不少人对此可以说是「深恶痛绝」,但识别码也不是一无是处,人家还是有优点的,比如「峯」「峰」、「群」「羣」和「员」「呗」这三组,多数形码因为这些字的字根相同而成为典型的重码组合,但是五笔却能根据字是左右还是上下结构加以区分。
想想在使用 1.44M 软盘+电话线拨号的年代,没有大数据支撑的算法,没有光纤也连不上云端,这样一种极低重码,可以盲打,词库小且毋须不断扩增的输入方案,还是非常有吸引力的,当年一些单位还有一个充满时代特征的工种——打字员。
刚入门还不清楚原理的阶段,不用死记硬背字根,估计背了也得忘。但是想把录入速度提高到 120+/分钟,多背背口诀没坏处。
那有没有不用识别码的方案呢?
答案是:针式打印机最标志性的特征是工作时「刺啦刺啦」的声音。
仓颉的这种拆分规则还可以理解为扫描,可以大概类比于常见的如扫描仪、针式打印机、CT 机之类的工作方式,取码的顺序并不按照书写笔顺,而是按照上下左右外内的顺序依次进行,把字一刀刀切开,遇到谁就取哪个根,比如「內」是「人+冂」,「两」是「一+人+人+冂」,因为从上到下一刀刀横着切分的话,先是框上露头的部分,最后才会切到那个框框。
仓颉还有一个缺点,字的最长编码是四个或五个不等,而朱邦復先生公布的官方版本也不支持打词,一些网友发布的取词规则虽然重码不多,但是每个字在词语中的编码与单字的编码不一致,不如五笔那种在词语中也是从头取码的规则直观。以「倉頡」两字的仓颉五代与五笔 86 规则为例,单字「倉」分别被拆分为「人+丶+曰+口」和「人+丶+彐+口」,「頡」分别是「土+口+丆+目(下面没有封口的一横)+八」和「土+口+丆+貝」;词语则分别是「人+口+土+口+八」和「人+丶+土+口」。
不过仓颉以其开发时间早,又不涉及版权问题等优点,依旧成为电子设备默认搭载最广泛的中文输入法,而且支持的字库非常大,据说可以支持八万以上汉字的超大字库,天生不怕生僻字。
那有没有一种最长四码,默认支持打词,又没有识别码的方案呢?请看:在非精简版的 Win 系统里,Win10 之前的版本都有另外一种默认形码输入法,郑码。郑码也叫「字根编码输入法」,类似王码五笔,郑码也是以五种不同笔画将字根区分到各自的「区位」,以各种字根搭配组字。比如「远」就是「土+口+衣(下半部)+辶」,依次键入「bjrw」即可。再比如「輸」,编码是「fkqk」,「fk」是「車」这个好理解,「qk」从何而来?这就不能不说郑码的规则。
郑码最大的特征是「双编码」,可以说也是「毁誉参半」。何谓双编码,郑码既然把字根分配到了各自的区位,那么每个字根就应当有区码和位码两个编码。郑码的区码类似五笔,根据横竖撇捺折的顺序从 a 到 z 排布到 26 字母上,而位码排布都是有联系的,比如「牛」(mb),区码是「m」,这个键上都是撇打头的,位码是「b」,因为两横开头的字根在「b」上;两横开头的「示」(bk),位码是「k」,因为「示」拆开就是「二(b)+小(k)」啊;「k」上有「小」(ko),位码「o」对应的就是一撇一捺开头的字根;所以「o」上有「食」(ox),而他的位码是艮(x)。以此类推……
前面不是有个「远」的栗子么,怎么没有打位码?那啥时候需要用到位码,啥时候不用咧?有人总结为「前二后二」原则,关于首根的位码:一,当首字根为双代码字根时,取该字根的双代码;二,当首字根为单代码字根时,取该字根代码,再取第二字根的区代码。说人话就是,背!所以对于双编码,就像鱼腥草,爱的人,恨不能天天搂着睡,恨的人,光想将其斩草除根、挫骨扬灰。
有没有更友好一点的方案呢?
有,山人全息码。山人虽然也有「小码」这一概念,但多是对应字根的拼音声母,相对更好记一点,而且山人第一码不需要既打区码又打位码,不追求完全盲打的话,不去记忆小码,打字的时候用数字进行选字也是可以的。对于区码规则,不像五笔是 123+末,仓颉 2+3,郑码前 2 后 2,山人是顺序区码,从头至尾不重不漏。那么可能有人会问,满四码还没有取完怎么办?——山人是大字根,四个都取不完的情况太少了。
如何理解大字根?比如动物类的「K」上,「龙、虎、象」这样在别的形码中通常都被拆分的字也是一个字根,所以不需要记住字的细节,而且这么大的部件作为一个字根,总体需要的编码数当然会少了。
那何谓「全息」?如果说仓颉是平面的,山人就是立体的,不管字在二维的书帛上笔画如何,在按键上的分布都根据其意义来。比如「U」上的字根都跟吃有关,不论是「禾、竹、米、麦、瓜、豆」各种粮食,还是「匕、鼎、缶、臼、鬲」这些跟吃沾边的容器,都能在这儿找到;「E」上所有的字根都跟生老病死有关,比如各种(不仅限于人的)身体结构「目、耳、鼻、舌、身、面、毛、皮、血、肉、骨、牙、齿、角」等。显而易见,「辞」的基本构成就是「舌」+跟味道有关的「辛」,即「E」+「U」。
如果也要像其他的方案一样找出点不完美之处的话,山人在实际使用过程中左手的击键负担明显多余右手,布局可以再优化一下;另外部分小码用的是拼音的声母或介音,虽是跟拆分无关,还是会给人以音形码的印象,而且相互之间不如郑码位码间的联系紧密。还有一个不算缺点的副作用就是字根太大,容易忘记细节,当然也可以说是字根优化得好。
通用性的问题早就跟方案本身的优劣没有多大关系了,现在早已不是万「码」奔腾的年代了……况且,有了 RIME 这等神器还不是想用啥码用啥码,还要啥自行车?!比较常见的还有「张码」「徐码」「希码」等,我没实际作为主力方案用过,就不多说了。
那么,敲黑板:总结上面这么多,想入形码大坑的话:平时打字简体为主,选五笔或郑码,通用性最强的是五笔,受不了识别码用郑码;平时用繁体或生僻字较多,也许仓颉会有意外的惊喜;不拒绝尝鲜和折腾,致力于更「科学」的方案的话,山人值得一试。如果想突破 60 字/分钟的瓶颈,还不赶紧关了这个页面,快去练习啊!
如果已经学过一种形码,轻易不要入第二个坑。血的教训告诉我们:在成为燕南天之前,就别考虑「嫁衣神功」了……