个人在很长的一段时间里都在尝试各种中文输入法,全拼、双拼,再到音形,之后是字形。想寻找一种能自由且准确的输入方法。自由在这里指,字符集比较大,能输生僻字和繁体字,因为有时候会查一些古诗词和史料。准确更多的是希望不用翻页选字,甚至不选字。
在这个过程中,了解到了很多开源的输入方案,软件,认识了许多优秀的作者。他们或独创或改进,或激进或平和,每个人都对如何输入中文这个问题,提供了自己独立而巧妙的答案。有的答案是如此的精巧,但在我决定尝试除全拼外的其他输入法之前,却从未听闻,甚至许多都是我在特定输入法提供的比对测评表中发现的。
这也是本篇文章的由来。我想记录下中文输入法的折腾过程,给大家推荐一些有意思的输入方案,或者相关的开源的软件和配置技巧。如果有闲的话,我会尽量多写几篇,介绍我个人喜欢的、学习过的或者觉得思路清奇输入方案。
本篇不会涉及详细的输入方案实现,而是想介绍各种输入方案的设计思路,以及它们想要解决的问题。因为很多输入方案的区间就在于,它们如何看待和解决这些问题。
如果你是一台电脑,输入法对你来讲是啥
这是我频繁切换输入法之后,想到的一个问题。我在键盘上输入 『shurufa』,根据你选择的输入法,你可能会得到 shurufa(英文)、输入法(拼音)、桑栓神啊(小鹤双拼)等等,所以输入法的核心其实就是一个关系映射表 ,把26个(也可能是25个)排列字母组合,对应到具体的字符集(为了简单,我们之后都特指汉字)。如果我们不用字母,更直接一点,给2013版《通用规范汉字表》8105个字编号,通过输入编号查找和输入汉字,这也一种输入方案,只不过几乎没有任何人愿意并且能够使用,因为门槛太高,至少要记8105组编码字对。
拼音,现成的方案
汉语拼音是中国的的汉字拉丁化方案,1958正式公布。这是一套既有的字母汉字映射表,而且自颁布后就逐步纳入了小学教材。对于学过拼音的人来说,拼音,更确切地说是全拼中文输入法,没有任何门槛,可谓首选。
那为什么会出现其他方案呢?
重码
汉语拼音的形式构成分为声母、韵母和声调三部分。全拼输入法只有前两者,更何况中文还包括许多同音字,如果只是单字输入,大多数情况下,你得选字,甚至得翻页选字。这不是一个愉悦的体验,特别是你迫切地想写点什么的时候。
码长
码长在这里指,输入一个字需要用到的按键数量。即使如今的全拼输入提供了高频字前置、常用字前置、用户习惯记录,动态词频调整、自动纠错,模糊匹配等等优化措施,它的平均码长依然可观(相较于其他字形和双拼输入法而言)。
双拼,再进一步
这是缩短拼音输入码长的一种方案。它引入了声母和韵母,把它们而不是单个字母视为编码的基本单位,每个字母代表一个声母和至少一个韵母,所有声母和韵母被映射到26个按键。例如下图所示的,小鹤双拼。『量』,这个字,编码组合从全拼下的『iang』变为『ll』。
辅助码,缩小范围
我们已经缩短了码长,但频繁翻页选字的问题依然存在。有方案改进吗?当然有,辅助码。
我所了解的双拼辅助码有四种:
- 音托:编码是部件的发音(通常是声母)。如自然码和小鹤双形。
- 形托:编码是和部件形状相似的英文字母。如基于表形码的小牛字根。
- 行列:编码是部件的行列坐标,和英文字母无关。如基于二笔的星笔辅码。
- 顺序:部件类按顺序排好然后和英文字母顺序对应。如基于仓颉的辅助码。
可见所有辅助码方案,都是通过添加额外的过滤条件(通常是字形),来减少同音字可选项数量。还是选小鹤输入法开启音托辅助码举例。
假定我想输入『河』字,双拼输入『he』,音托辅助码是『d』。使用辅助码前后的可选数量差距见下图。
至此,一切似乎已经趋于完美,码长和重码率都达到了一个可接受的程度。
所以我个人把双拼+辅助码(小鹤音形)方案,作为主输入法使用了一年。但渐渐的,左右手的小拇指开始酸疼,甚至我常常觉得无名指和中指在围观我的打字过程。因为按我的日常用字习惯,『a s z x p o』是高频按键。
仔细想想,这其实是必然的,声母和音托辅助码,已经决定了按键的使用频率,它们取决于字的读音而不是按键触发的难易度。
虎码,换个思路
既然以读音为拆分依据,无法规避按键分布问题,我们可以换个思路。汉字还可以拆分为具体的笔画,特定子符集内的通用笔画集合又可以组合成部首或字根。
这类输入方案里,最为大家熟知的应该就是五笔86。但这里我想拿虎码作为示例,如果只谈解决按键分布导致的手感问题,虎码的设计更具代表性。
假设我已经对特定的字符集进行了拆分,得到了几百个字根,要把他们映射到26个字母键。必然一个按键(大码)需要包含多个字根,为了更加准确地识别位于一个按键里的单个字根,可以再添加一个字母(小码)来定位。这样一个字根就由两个字母表示。在这个基础上,通过算法(目前并未查到具体的算法原理),将字根随机分布在26个键位上,并将字根编码的第二位限定为音托,即字根的声母或者韵母。
以上就是虎码输入法的核心设计思路。余下的无非是最多输入四码,拆字后,取前3根 + 末根的大码,若不足四码,则补小码。
我使用了3个月,克服乱序字根的记忆困难后,确实感觉到小拇指的酸痛得以缓解。高频输入集中在键盘中下部食指和大拇指区域。
折腾到这里,“自由而准确”的目标已经达成,唯一体验不太好的部分就是前期记字根和繁体字切换。对于前者,我确实没在官网找到明确的字根划分规则,在这个前提下记忆字根总是有点”虚“,为什么要这么分,当然这全属个人主观感受。对于后者,纯属锦上添花。
宇浩,也许是归宿
也是最长四码,也是分大小码,也是大字根。区别在那里?
官方主推的区别是简繁通打,也就是说字根集甚至包括了繁体字。确实厉害。但我更在意的是详尽的文档,这里面就包括,明晰的字根拆分依据。所以我在背这个方案的字根时反而感觉更轻松。
而且官方提供高频字根,以及高频字拆分图,降低了入门门槛,十分友好。
最后
也许永远也不会有最好的输入法,但你一定能找到最合适自己的。