冰雪奇缘
本文将从大家所熟知的全拼输入方案出发,逐渐引入各种冰雪拼音中的方案,重点阐述每个方案设计时的出发点、核心理念以及优势劣势。虽然采取这样的顺序引入,但这些方案并无低级与高级之分,每个方案都有其独到之处,希望大家可以根据自己的兴趣和实际需要来选择。
若您此前是全拼用户,您可以直接使用「冰雪全拼」输入方案开始打字,它和全拼的唯一区别在于在每个音节后面可选地用 12345 分别标注一二三四声和轻声(也可以不标),而选择键改为 67890。初步领略带调拼音的魅力之后,您可以继续查看各个方案的介绍。同时,冰雪全拼也作为各个方案的反查方案。
冰雪四拼:合理分词,简拼顶功
现今的拼音输入法大多鼓励用户整句输入,并使用语言模型和云输入的方式来提高整句识别的准确率。但是,当用户输入自己个性化的内容时,难免会遇到识别不准确的情况,且在一整句中间出现错误的时候,通常将其改正的操作很繁琐。另外,输入引擎通常会记录下用户输入的每一句话,但不会学习这句话中的个别词语,用户下次使用类似的词汇输入略有不同的一句话时,引擎不一定能识别准确。
鉴于这两个问题,冰雪四拼提出:拼音输入宜采取分词打法,按照词的自然界限输入。这样,用户可以及时通过选择候选来确认想要的词语,输入引擎也能准确地针对用户输入的每一个词来造词、调频,而不是只记住复用性差的句子。当然,如果分词仅仅是增加了上屏次数那无疑是一种倒退,为了让分词打法也像整句打法一样顺畅,冰雪四拼还做了以下两件事:
- 压缩拼写,用 1 个辅音字母表示声母,用 1 ~ 2 个元音字母表示韵母,再加上 1 个元音字母表示声调,这样共用 3 ~ 4 码就可以完整表示一个带调音节;
- 简拼优先,规定所有词都先打声母简拼,若首选不是想要的词则给末字追加两码,若还不是想要的词则给首字追加两码(输入引擎此时会自动把用户的输入挪到首字的声母后面)。这种打法充分利用用户和候选栏的交互来缩短码长,同时解决了很多全拼用户「什么时候能打简拼,什么时候不能」的不确定感。
这两者结合起来,产生了更加奇妙的效果:由于所有词的编码都是几个辅音字母开头然后接着几个元音字母,那么当元音字母后面出现辅音字母时,输入引擎可以判断这是下一个词的开始,从而自动把上一个词顶上屏幕。这节省了大量的空格,使得分词输入也可以像整句一样流畅。
此外,冰雪四拼没有丢掉全拼的一大优点:打空后能够无缝自动造词。这是指,当用户发现他打的词在词库里没有时,只需要追加编码来完成造词,而不需要清空已经输入的编码。例如,用户试图用 bxspio 来输入「冰雪四拼」,发现候选栏中没有时,只需要按一下定位键定位到 bx 后面追加编码确认「冰雪」,然后再确认「四拼」就完成了造词。这大大降低了打空的成本,使得用户可以像整句一样肆无忌惮地打很多长词甚至常用短句,进一步缩短了码长。
因此,冰雪四拼不愧为冰雪拼音系列中既最接近全拼(容易上手)、又在用户的常用文本上取得最高的编码效率的方案,是大道至简的存在。
为了方便和后续的其他方案比较,我们这里引入一种比较简洁的记法来描述输入规则:当我们把所有用于编码的字母分为 2 个集合时,大集合记为 A,小集合记为 B,而空格记为 _
。对于冰雪四拼来说,辅音字母是大集合 A,元音字母是小集合 B,因此规则为:
- 一字词:A_, AB, ABB, ABBB
- 二字词:AA_, AAB, AABB, AABBB, AABBBB
- 三字词:AAA_, AAAB, AAABB, ...
- 四字词及以上:AAAA, AAAAB, AAAABB, ...
冰雪三拼:四码为主,提升节奏
如果我们仔细研究分词输入,会发现用户通常输入二字词的数量频率最高,一字词次之,三字词和四字词再次。上述冰雪四拼的规则虽然优雅,但在二字词的处理上不尽如人意:由于二字词的完整打法是「AABBBB」,导致它实际可能会用 2 ~ 6 码输入,情况较多,需要不断和候选交互。有没有办法提升输入的节奏感呢?
冰雪三拼采用另一种拼写的策略:声母和韵母都用一个大集合 A 里的字母表示,而声调用小集合 B。而在组词规则上,三拼采用简拼与全拼混合的方式,二三四字词的编码分别以「声韵声韵」「声声声韵」「声声声声」开始,如首选不是想要的词则可以补加末字声调和首字声调。这样一来,他们的完整打法都是 AAAABB,而前四码 AAAA 由于空间较大可以容纳绝大多数词,后面的 B(声调)仅用于少量重码的区分。这样一来,大部分情况下(95% 以上)都是四键出一词,节奏大大统一了。其规则汇总如下:
- 一字词:A_, AA_, AAB
- 多字词:AAAA, AAAAB, AAAABB
冰雪三拼的缺点则是相比于冰雪四拼,缺少了二字词 AA_, AAB 自然形成的简码空间,如果想要缩短码长则需要另起规则来记忆简词(如利用 AB 和 ABB 空间),这样的简词因为编码不是全码的前缀,掌握难度相对比较大。一字词也缺少了 AB 这样的两键空间。另外,三拼无法做到无缝自动造词。例如若发现 bxsp 的候选中没有「冰雪三拼」,此时 bx 并不是「冰雪」编码的前缀,若逐个插入韵母完成造词操作将过于复杂,不如直接清空采用连打的方法来造词。
虽然不优雅,但冰雪三拼是「实用」的方案,特别是对于传统四码定长的用户来说这种打词规则会感到熟悉。另外,冰雪三拼的声韵部分与星空键道完全相同,如您喜欢星空键道但觉得键道的形码辅助码过于复杂,想用声调来完成顶功,则冰雪三拼就是适合您的方案。
冰雪双拼:单字盲打,字词双全
上述两种方案主要以现代汉语的词为单位来考量,而若以字为单位来看,则并没有试图去区分汉字中的同音字。这是由于在现代汉语中,大部分汉字基本上只能组成多字词使用,而能作为一字词单独用的汉字数量较少。例如,国家语委统计的现代汉语词频中,就只包括了 2000 多个一字词。因此,冰雪四拼和冰雪三拼考虑上简码之后,所能提供的 1500 多个一字词首选的位置已经足够使用,经过调频用户基本上不需要担心同音字的问题。
但是,仍然有少量的用户比较注重汉语表达的灵活性,特别是在文学创作当中,其汉字的组合方式会比其他类型现代汉语语料来得更加自由。传统意义上,这种注重单字的输入体验是由形码(以字形为主的编码)来完成的,但是我们将会看到,以字音为主来编码反而相比形码将有独特的优势。冰雪四拼和冰雪三拼理论上可在输入完带调音节后追加基于字形的辅助码来区分同音字,不过那样码长将太长,效率不高,不如另起炉灶重新设计。
冰雪双拼,正如其名,只使用两码就完成了带调音节的输入,然后使用两个基于字形的辅助码来区分同音字,从而完成单字的精准输入。考虑到韵母和声调的组合太多,为了减少记忆量,冰雪双拼将声母和带调韵母重组为「声母·介音」加上「韵腹·韵尾·声调」两部分,但简便起见我们下面仍然简称「声」和「韵」,各对应一码。声采用大集合 A 共 18 键,辅助码采用小集合 B 共 10 键,而韵采用 A + B + ,. 两个标点键共 30 键,记为 U。尽管辅助码只用了 10 个键,但经过精心设计,它的单字重码率已经可以与四码定长的双拼双形或纯形码比拟,并大大优于传统二码顶(小集合只有 5 个键)。
除一字词外,其余部分和冰雪三拼类似:二三四字词分别以「声韵声韵」「声声声韵」「声声声声」开始,如不出则补加尾字和首字辅助码,取决于用户的偏好,冰雪双拼可以采取以下两种方式之一来输入:
主单打法
- 一字词:A_, AU, AUB, AUBB
- 多字词:AUAU_, AUAUB_, AUAUBB_
主词打法
- 一字词:A_, AU_, AUB, AUBB
- 多字词:AUAU, AUAUB, AUAUBB
可以看到,这两种打法的唯一区别在于:是两码一字词后面加空格,还是多字词后面加空格。若一字词不加空格,则一字词比多字词好打,鼓励用户保守分词。反之,若多字词不加空格,则多字词比一字词好打,鼓励用户激进分词。
冰雪双拼是第一个真正意义上的字词双全顶功方案,它的单字码长像二码顶一样低、单字重码像四码定长一样低、词组码长像星空键道、声笔飞码一样低(用辅助码的方式实现超大词库容量,可打大量词)、词组重码与声笔飞码相当(优于 86 五笔)。当然,由于需要同时掌握带调双拼和辅助码,其学习难度也高于一般的不带调双拼双形方案以及一些简单的纯形码方案。
冰雪一拼:一击一音,重剑无锋
在冰雪双拼中,无论是主单还是主词模式,一码的一字词仍然需要空格上屏。此外,由于完整的带调音节数量多于两键能组合出来的数量,有大量音节的首选被合并掉而无法作为两码打出。要在这些方面做出突破,必须另辟蹊径,用并击的方式来增加编码空间。
冰雪一拼采用了和冰雪双拼相同的「声介」+「韵调」的分解方式,但规定左手单指或双指打出声介,右手单指或双指打出韵调,双手同时按下,在一击内完成带调音节,且按键组合和音节的对应关系是唯一的。由于编码空间大大提升,单字只需要加一个辅助码就能达到相当令人满意的重码水平,而词组仅仅是拼音部分就已经与蓝宝石等重码率相当低的乱序形码相当,因此也就不再需要辅助码。
对于并击来说,我们需要改动一下标记集合的方式:单手并击和双手并击类似于串击里的「大集合」,这里记作 a 和 A,而单手带空格并击和双手带空格并击类似于串击里的「小集合」,这里记作 b 和 B。和冰雪双拼一样,冰雪一拼有主单和主词两种打法(主词打法即 zhz 的拼读并击):
主单打法
- 一字词:a, A, Ab
- 二字词:AB
- 三字词及以上:ABB
主词打法
- 一字词:a, B, Aa
- 二字词:AA
- 三字词及以上:ABA
可以看到,主要的区别在于主单打法打一字词不需要带空格,而主词打法打二字词不需要带空格。因此在其中选择的标准也与冰雪双拼类似。
总结
汉语拼音的灵活度使得我们基于它来实现多种不同的输入体验成为可能。冰雪拼音以声调为特色,其中声调在各个方案中都扮演了重要的角色,也成为各个方案制胜的关键:冰雪四拼改编自声笔拼音,正是声调使得那些韵母只有一个字母的音节在补码时不用打笔画;冰雪三拼改编自星空键道,用简单的声调取代了复杂的形码来实现词顶功;冰雪双拼把声调融入前两码,使得前两码相同的字比不带调双拼少了很多,这才使得 10 键的低重辅助码成为可能;冰雪一拼一一对应的带调音节码使得词组的重码率可以和乱序形码媲美。
除了方案上的创新,冰雪拼音在输入引擎上的创新也值得一提:得益于 Lua 对 Rime 的扩展,冰雪拼音可以使用 Lua 实现几乎全部编码逻辑,将各个方案共用的带调拼音词库转换为各不相同的输入体验,不仅减小了安装包体积,省去了维护各个码表的负担,还使得不同方案中的用户词可以互通。也就是说,您可以使用冰雪全拼或者最容易上手的冰雪四拼来积累词库,后续学习了其他方案后迁移到其他方案中使用。如果您之前使用的是 Rime 上的其他音形类字词方案,冰雪拼音基于脚本翻译器的精准造词体验也会让您眼前一亮。
有诗赞曰:
冰轮破夜驰星海,雪刃裁云落玉京。
弹指流光追日月,连珠妙语转阴晴。
数键能擎天地阔,千言可待鬼神惊。
寒锋淬就春秋笔,欲作诗书半卷成。
——《七律 · 冰雪奇缘》