设计理念
冰雪四拼(又称声笔四拼)是一个带调拼音词顶功输入方案,它脱胎于声笔系列码中的声笔拼音方案,但是用声调取代了其中的笔画成分,使其不再涉及字形信息而是成为了纯粹的音码,从而探索了新的输入体验。其设计理念如下:
- 充分发挥带调拼音的离散能力,降低重码并在短码空间内容纳更多的词;
- 在声母和韵母不乱序的情况下尽可能优化键位的使用率以及双键组合的顺手程度;
- 根据「频率为主、语义优先」的思想设置固顶词,使得用户能够快速熟悉高频词的打法,同时大大降低了固顶词的记忆难度。
此外,本方案采用的声母和韵母的定义完全符合《汉语拼音方案》中的原始形式,没有受到全拼特有的正字法的影响。在这个意义上,本方案比一般的双拼方案更加规范。
拼写规则
本方案将汉语拼音的音节分解并依次编码为声码、韵码和调码。以下将一一介绍:
声码
《汉语拼音方案》中,如果不考虑零声母,则声母的数量正好为 21 个:
b p m f d t n l
g k h j q x
zh ch sh r z c s
而 26 个拉丁字母去掉 aeiou 之后也正好是 21 个。一种自然的想法就是让这 21 个非零声母与这 21 个字母一一对应,而零声母再另外想办法。本方案中,zh
, ch
, sh
这三个声母对应的声码分别为 w
, y
, v
,而其他的单字母声母对应的声码就是它们自身。注意,全拼中以 y
, w
开头的音节没有像一般的双拼方案一样看作是形式上的声母,而是作为零声母音节处理。
零声母音节则可以根据韵母的特点进一步分为 4 类:
- 全拼以
a, o, e
开头的音节是「开口呼」韵母,其声码规定为r
; - 全拼以
w
开头的音节如wa
,wai
, ... 本质上是「合口呼」韵母ua
,uai
, ... 的变形,其声码规定为s
; - 全拼以
y
开头的音节如ya
,yao
, ... 本质上是「齐齿呼」韵母ia
,iao
, ... 的变形,其声码规定为f
; - 全拼以
yu
开头的音节如yu
,yuan
, ... 本质上是「撮口呼」韵母ü
,üan
, ... 的变形,其声码规定为k
;
总结:零声母分为四份,分别与四个非零声母共用一个声码。
声码练习
韵码和调码
《汉语拼音方案》中的韵母在本方案中采用最多两个编码来表示,第一码称为韵头,第二码称为韵尾。而《汉语拼音方案》中的 5 种声调(阴平 1、阳平 2、上声 3、去声 4、轻声 5)用一个编码来表示。我们将韵头、韵尾和声调都分别对应到 a
, e
, i
, o
, u
五个字母,具体的安排如下表所示:
韵头 | a | o | e | i | u |
---|---|---|---|---|---|
韵头 | ü | io, uo, üa, üe | ie, ∅ | ua, er | ia, ue |
韵尾 | -m | -n | -ng | -i | -u |
声调 | 去声 4 | 轻声 5 | 阳平 2 | 阴平 1 | 上声 3 |
例如,韵母 an 由韵头 a 和韵尾 -n 组成,对应的编码就是 ao
;而韵母 uang 由韵头 ua 和韵尾 -ng 组成,对应的编码就是 ie
;韵母 ia 没有韵尾,所以编码就只有一码,为 u
。
上表虽然规律性不明显,但是可以通过下面的方式辅助记忆:
- ia, ua, üa 这三个含 a 的韵头并排位于
u
,i
,o
键上; - i 和其键上的 er 都可能来自中古汉语的止摄,例如「你 ni3」从「尔 er3」、「腻 ni4」从「贰 er4」;
- e 和其键上的 ie 都可能来自中古汉语的假摄,例如「谢 xie4」从「射 she4」
- o 和其键上的 io, uo, üe 都可能来自中古汉语的宕、江摄文读,例如「哟 yo5」从「约 yue1」、「略 lüe4」与「络 luo4」谐声,并且有些方言「学」读若 xüo2,和 o, io, uo 主元音也相同
- a 键上的 ü 有些字(如「鱼」)在上古汉语韵母为 /a/
- a, o, e 三个键按拼音表上的顺序排列的时候,上面的韵尾 -m, -n, -ng 的发音位置正好是从前到后(唇、舌尖、舌根)
总结
综上所述,声码为 1 码、韵码为 1 或 2 码、调码为 1 码,因此一个带调音节总共用 3 或 4 码来表示,这也就是名字「冰雪四拼」的由来。下面给出几个音节的示例:
音节 | 分解 | 编码 |
---|---|---|
白 bai2 | b + a + i + 2 | baie |
狗 gou3 | g + o + u + 3 | gouu |
声 sheng1 | sh + e + ng + 1 | veei |
笔 bi3 | b + i + 3 | bii |
调 diao4 | d + ia + u + 4 | duua |
庄 zhuang1 | zh + ua + ng + 1 | wiei |
而 er2 | 零开 + er + 2 | rie |
我 wo3 | 零合 + uo + 3 | sou |
有 you3 | 零齐 + io + u + 3 | fouu |
月 yue4 | 零撮 + üe + 4 | koa |
嗯 ng4 | 零开 + ∅ + ng + 4 | reea |
总而言之,这种拼写方案是基于实际发音来定义的,而不是基于全拼来定义的。对于习惯于全拼的用户,有以下几个难点:
- 韵母
iou
在全拼中经常缩写为iu
,但是本方案按照原形分析为io + u
,而韵头io
合并到了o
,所以韵码是ou
。如「就 jiu4」的拼写是joua
而不是jiua
,「有 you3」的拼写是fouu
而不是fiuu
。 - 韵母
ü, ün, üe, üan
在全拼的j, q, x, y
后面省略了两点,但是本方案按照原形编码,韵码分别是a, ao, o, oo
。 - 韵母
ao
,iao
实际上韵尾是-u
而不是-o
,只是因为避免手写时混淆所以改成了o
。例如,本方案中「好 hao3」的拼写是hauu
。 y
和w
常常被别的方案作为形式上的声母,但是本方案并没有这样做。附录中有这些y
和w
开头的零声母音节的拼写示例。- 纯鼻音韵母是没有韵腹的,本方案用 ∅ 来表示,放在 e 键上。比如「嗯 ng4」的拼写是
reea
,「哼 hng5」的拼写是heeo
,「呒 m2」的拼写是reae
。
韵码练习
基本输入
编码
本方案使用统一的规则来编码所有不同长度的词:
依次取词的各个音节的声码;如果首选未命中,追加末音节的编码直至三码;如果首选仍未命中,追加首音节的编码直至三码。
也就是说,把音节的前三码看作是「构词码」,每个词先打简拼然后逐渐补全末音节和首音节的完整构词码。以下针对不同长度的词分别举几个例子:
- 单音节词:「有」的编码为
f
,「又」的编码为fo
,「由」的编码为fou
,「右」的编码为foua
; - 双音节词:「你好」的编码为
nh
,「手机」的编码为vjii
,「元气」的编码为kqiaoo
; - 三音节词:「为什么」的编码为
svm
,「最低点」的编码为zdduo
; - 四音节词:「感同身受」的编码为
gtvv
,「附庸风雅」的编码为ffffuu
; - 以此类推,
音节词的编码可能为 码到 码不等。
对于大于等于五个音节的词语,进一步规定第五个声码以及之后的所有声码需要用大写字母来输入。例如「科学发展观」的编码为 kxfwG
,「哀莫大于心死」的编码为 rmdkXS
,「中华人民共和国」的编码为 whrmGHG
。
由于动态调频的存在,实际输入的编码可能与上述介绍有细微的差异。
顶功
本方案的编码具有很强的顶功特性。
对于单音节词、双音节词、三音节词来说,除了
对于四音节词以及更长的词来说,所有的编码种类都能在输入下一个词的首码的时候自动被顶上屏。这是因为前面规定了第五个声码以及后面的声码都用大写字母输入,和下一个词的首码没有重叠。
后置
在逐码输入的过程中,如果一个字词已经在首选出现过,那么在后续输入中它将不再位于首选,这可以充分利用编码空间,并且降低重码。
练习模式
在使用本方案的初期,为了尽快熟悉拼写,建议切换到「整句」模式,此时「顶功」和「后置」都不起作用,可以打全每个字的前三码(也即构词码)参与组句。这样做,可以更多地熟悉韵码和调码,同时不受到顶功和后置的影响。
高级功能
固顶
一般情况下,输入各种编码时候选的排序会随着用户的使用逐渐调整,以贴合用户的使用习惯。但是,如果高频词的排序常常变动,则难以熟练掌握。因此,本方案精心设计了一些固顶词,这些词在输入对应编码时总是处于首位,可以直接顶屏或者(在不能顶屏的情况下)用空格上屏,并且这些都定义在 snow_sipin.fixed.txt
中,可以自由修改。
相比于声笔简整和声笔拼音,本方案设计的固顶词更多,包括了 636 个单音节词和 510 个双音节词,而且进行了更加细致的优化。这使得在一般的连续性输入文本中固顶词的总频率已经达到了 70% 以上,所以掌握固顶词可以快速提高输入方案的熟练度。这些固顶词的规律是:
- 单音节词的一码(21 个)、二码(105 个)和三码(510 个)全部固顶;
- 双音节词的二码(441 个)全部固顶,而三码和四码选取了一部分(69 个)固顶;
为了减小固顶词的记忆难度,本方案选取固顶词的时候采取了语义优先的策略,也就是语义相关的词往往具有相同或相关的固顶码长,记住一个往往就记住了一大片。例如,
...
# 事物代词
wg 这个
ng 那个
nge 哪个
wr 这儿
nr 那儿
nri 哪儿
wl 这里
nl 那里
nli 哪里
...
在 snow_sipin.fixed.txt
中有很多像这样的语义集中的「区块」,看过一次之后就能留下比较深刻的印象。
另外,「的」和「了」两个字因为频率非常高,所以分别采用 ;
和 /
键输入,不占用常规固顶词的位置。如果不喜欢这个设定,可以在固顶词文件中自定义。作为替代,分号用 i
输入,顿号用 \
输入。
无理音节
在设置固顶词的时候,注意到「三」和「四」的声母都是 s,无法在「三个」、「四个」等词中保持同样的码长,而且因为「五」的声母「零合」也在 s 上,让这个问题更加严重了。另外,「日」和「二」的前三码都是 ria
,也破坏了一些词的整齐性。
为了解决这个问题,对「三」、「五」、「日」这三个字所在的音节增加了无理音节码:
san1
这个音节也可以用heu
打出来,同时也是「三」的固顶码wu3
这个音节也可以用gue
打出来,同时也是「五」的固顶码ri4
这个音节也可以用rii
打出来,同时也是「日」的固顶码
记忆的时候,可以把它们当成是一周中的三天,用「周三 wheu
」「周五 wgue
」「周日 wrii
」这三个固顶词来辅助记忆。另外,虽然这些音节的其他字也能用无理码打出来,但是并不推荐这样做,因为会干扰常规音节码的键位;如果反过来当成是改变了这三个字的读音,会更容易适应。
造词
有两种方式来造一个新词:
一是输入词的编码后,候选中会首先显示与输入编码音节数量相等的候选词,然后排在后面的是字数较少的候选词。此时可以直接通过数字键或翻页来选择字数较少的候选词,从而把词拆解成单字或较小的词依次确认上屏;这种造词方式和普通的智能拼音输入法是一样的。
但是,因为词的编码是以简拼为主,所以如果重码较多,比较难快速定位到想要的字词。这时候宜使用定位修改的方式快速把词拆解开来。按一下 1 定位到第一个音节后面,或者多按几次 1 定位到其他音节后面,补充笔画然后确认上屏。
英数混输造词
在科技文本中,经常出现混有英文、数字的词语的情况。为了让这些词也能够自动造词,本方案给所有数字和英文字母也指定了相应的音节码。其中,数字与相应中文数字相同,并且排在三码候选的第二位;英文字母的音节码是填在三码的空码内,但也有一定的规律,详见 snow_sipin.fixed.txt
。使用这些候选,就可以轻易造出如「5G通信」这样的词:
略码
略码是输入特定结构的词的办法,能够避免一些词带来的不确定性,同时明显减少输入单字的机会。以下我们用全角字母「ABC……」来表示词中的待定成分。
由于本方案中「的」和「了」是一键字,且可以标点顶屏,所以「A的」「A了」「AB的」「AB了」这样的词就不必按词打,打完前面的部分之后打相应的标点键就可以了,这也是一种特殊的略码。下面是更一般的略码形式:
完整重复
完整重复整个词的「AA」、「ABAB」、「ABCABC」……型:略码为 [
,如「吃吃」是 yi[
;双音节及以上的词,因为 [
已经被占用,所以略码为 A
,如「尝试尝试」是 yviA
。
对二字词来说,还有一种特殊的「AABB」型,略码为 O
,如「可可爱爱」是 krO
。
部分重复
重复词的首字或末字的「AAB」、「ABB」、「AABC」……型,略码为 E
(重复首字)和 I
(重复末字):如「打打牌」是 dpaiE
,「打打篮球」是 dlqouE
,「睡觉觉」是 vjuI
。
插入重复
「A不A」「A一A」「A的A」「A了A」「A了一A」「A啊A」「A呀A」型:略码分别为 B
, F
, D
, L
, K
, R
, U
,如「好不好」是 haB
;「AB不AB」以及更长的词也一样,比如「可爱不可爱」 krB
打出来。这里 B, F, D, L, R
表示的是相应插入成分的声码,便于记忆。
「A着A着」:略码为 W
,表示「着」的声码
「A来A去」:略码为 Q
,表示「去」的声码
其余略码形式
还有一些常见的略码形式没有安排,可以根据自己的需要来设计:
「A个B」:只插入不重复,如「吃个饭」
「A了AB」「A不AB」「A里AB」:既重复又省略了一个字,如「开不开心」
以词定字
虽然本方案在大多数情况下输入单字不需要选重,但是对于某些生僻字可能以词定字会更快一些。首先输入词的编码,然后按 [
上屏词的首字,按 ]
上屏词的末字。
辅助码
辅助码是另一种输入生僻字的办法,但是需要借助字形信息。
笔画辅助码
笔画辅助码是在单音节词的音节码输入完成之后直接继续输入笔画来筛选的办法,其中横竖撇捺折分别用 e, i, u, o, a
来表示,这与声笔系列码相同。笔画最多可以输入 4 笔。例如,输入生僻字「芫」,在音节码 kooe 输入完成之后继续加两个笔画 ei,即出现在首页。
不过,因为无韵尾音节编为 3 码、而有韵尾音节编为 4 码,所以无韵尾音节在补笔画的时候也可能会和其他音节冲突。为了改进选重体验,可以打一个 o
补全 4 码,然后再输入笔画,这样就没有歧义了。例如,输入生僻字「翊」,在音节码 kooe 输入完成之后继续加两个笔画 oe,即出现在首页。
笔画辅助码也能够顶功,在输入辅助码的过程中若所要的字为首选,继续输入下一个字的编码即可顶上屏。
部首辅助码
有些情况下,生僻字的笔顺可能不熟悉,或者不能很好地被笔画离散开,例如要输入「嶅」,但是声旁为「敖」的字笔画都一样:
为此,本方案还提供了另一套部首辅助码。这个辅助码基于 GF0012-2009 国家规范,每个字有唯一指定的部首,而字的辅助码就是部首的音节码。要使用部首辅助码,需要先按一下 1,然后再输入部首的音节码:
这里「嶅」的辅助码即「山」的音节码 vaoi,只输入一码就可以将所要的字提到首选:
另外,由于这种辅助码使用了 1 作为引导键,所以无韵尾音节不需要补 o 也可以使用辅助码,例如
在不清楚声调的情况下,也可以打完 2 码就加辅助码:
部首辅助码也能够顶功,在输入辅助码的过程中若所要的字为首选,继续输入下一个字的编码即可顶上屏。
反查
本方案提供两种反查方式:拼音反查和笔画反查
拼音反查
虽然本方案本身就是音码方案,但是考虑到用户可能忘记某个音节的拼写,或者知道其中一个读音想查询其他的读音,所以提供拼音反查功能。拼音反查需要用 a
键引导。例如,输入 ahe
,可以查询到「和」的 6 个读音对应的拼写:
笔画反查
笔画反查依赖于 Rime 自带的「五笔画 / stroke」方案。笔画反查需要用 u
引导,并用 e, i, u, o, a
来输入横竖撇捺折,这与辅助码是一样的。例如,输入 ueiuoa
,得到
重复上屏
若已经输入过一些内容,可以用 e
键来调出上屏历史,然后选择上屏。例如,使用 yfu
输入「重复」之后,「重复」就出现在 e
的首选:
符号
e
键同时还承担了输入特殊符号的功能。例如,输入 ea
可以得到 a 的各种变体字母:
具体的符号内容和 Rime 自带的 symbols.yaml
相同,只是引导键变成了 e
。
lua 脚本
o
键可以引导调用一系列 lua 脚本。例如,o 加数字可以转换中文数字:
还可以计算任意 lua 表达式:
评测
下列技术测试采用的词频为个人统计得到的社交媒体词频(语料来源:GitHub 仓库)经 jieba 默认词典分词得到的词频。
离散能力
以单音节词最长编码为 4 码(无韵尾音节补 o),统计《通用规范汉字表》中的 8105 字共 8773 字音,得到如下分布:
单音节词 | 长度 | 字音数 | 频率 |
---|---|---|---|
一键 | 1 | 6 | 17.01% |
二键 | 2 | 170 | 62.91% |
三键 | 3 | 510 | 12.69% |
四键 | 4 | 1123 | 5.57% |
页内选重 | 5 | 3524 | 1.74% |
翻页选重 | 6 | 3445 | 0.07% |
总和 | 8773 |
可见,即使不使用辅助码,单音节词的选重率也不到 2%,翻页率不到 0.1%。一键、两键占比 80%,前三键占比 92%。
以多音节词最长编码为 6 码,统计雾凇拼音词库中的词频前六万词,得到如下分布:
多音节词 | 长度 | 词音数 | 频率 |
---|---|---|---|
三键 | 3 | 2640 | 58.25% |
四键 | 4 | 23758 | 26.18% |
五键 | 5 | 17167 | 11.40% |
六键 | 6 | 12329 | 3.63% |
页内选重 | 7 | 4092 | 0.54% |
翻页选重 | 8 | 14 | 0.00% |
总和 | 60000 |
手感
单音节词当量为 1.286,多音节词当量为 1.333,总当量为 1.318。用指分布如图所示。除 a 键使用频率较高外,其余均较为合理。
附录
零声母音节的拼写示例
这个表格主要是为了让大家理解本方案对零声母的处理方式,需要注重观察规律,请勿死记硬背。
音节 | 声母 | 韵头 | 韵尾 | 拼写 |
---|---|---|---|---|
挖 wa | 零合 | ua | 无 | si |
歪 wai | 零合 | ua | i | sii |
弯 wan | 零合 | ua | n | sio |
汪 wang | 零合 | ua | ng | sie |
微 wei | 零合 | ue | i | sui |
温 wen | 零合 | ue | n | suo |
翁 weng | 零合 | ue | ng | sue |
窝 wo | 零合 | uo | 无 | so |
乌 wu | 零合 | u | 无 | su |
压 ya | 零齐 | ia | 无 | fu |
腰 yao | 零齐 | ia | u | fuu |
烟 yan | 零齐 | ia | n | fuo |
央 yang | 零齐 | ia | ng | fue |
椰 ye | 零齐 | ie | 无 | fe |
哟 yo | 零齐 | io | 无 | fo |
优 you | 零齐 | io | u | fou |
庸 yong | 零齐 | io | ng | foe |
一 yi | 零齐 | i | 无 | fi |
因 yin | 零齐 | i | n | fio |
应 ying | 零齐 | i | ng | fie |
迂 yu | 零撮 | ü | 无 | ka |
晕 yun | 零撮 | ü | n | kao |
渊 yuan | 零撮 | üa | n | koo |
约 yue | 零撮 | üe | 无 | ko |
非成字部首的读音
部首 | 读音 |
---|---|
一 | heng2 |
丨 | shu4 |
丿 | pie3 |
丶 | dian3 |
乛 | zhe2 |
匚 | fang1 |
冂 | jiong1 |
勹 | bao1 |
亠 | tou2 |
冫 | bing1 |
冖 | mi4 |
凵 | kan3 |
卩 | jie2 |
厶 | si1 |
廴 | yin3 |
艹 | cao3 |
廾 | gong3 |
囗 | wei2 |
彡 | shan1 |
夂 | zhi3 |
丬 | pan2 |
宀 | mian2 |
辶 | chuo4 |
彐 | ji4 |
屮 | che4 |
巛 | chuan1 |
攵 | pu1 |
罒 | wang3 |
疒 | ne4 |
疋 | ya3 |
癶 | bo1 |
虍 | hu1 |
纟 | si1 |
龺 | zhuo2 |
髟 | biao1 |
鬥 | dou4 |