Skip to content

前缀编码

上一节中您学习了冰雪清韵的拼写规则,能够输入词语中每个字的声母和韵母来检索词语,或者输入单字中每个字的声码和韵码来检索单字。本节中我们将声母韵母以及声码韵码重新组合成前缀码的格式,以进一步提高输入效率。

词语的前缀编码

词语的前缀编码规则为:先打前四个音节的声母编码;少于四个音节时,追加末音节的韵母编码。在下面的例子中,sy 分别表示声母和韵母,下标表示音节的序号:

  1. 一音节词:格式为 s₁y₁,如「一」的编码为 yi
  2. 二音节词:格式为 s₁s₂y₂,如「可以」的编码为 kyi
  3. 三音节词:格式为 s₁s₂s₃y₃,如「为什么」的编码为 wsme
  4. 四音节词:格式为 s₁s₂s₃s₄,如「感同身受」的编码为 gtss
  5. 多音节词:格式为 s₁s₂s₃s₄,「科学发展观」的编码为 kxfz,「哀莫大于心死」的编码为 vmdy,「中华人民共和国」的编码为 zhrm

对于二音节词和三音节词来说,只输入声母(即 s₁s₂s₁s₂s₃)时系统也会检索对应的字词,可以用空格或选择键上屏。

单字的前缀编码

单字的前缀编码规则为:先打前三个字根和最后一个字根的声码;少于四个字根时,追加末字根的韵码。在下面的例子中,sy 分别表示声码和韵码,下标表示字根的序号,特别地 sₙ 表示最后一个字根:

  1. 一字根字:格式为 s₁y₁,如「日」的编码为 ri
  2. 二字根字:格式为 s₁s₂y₂,如「昌」的编码为 rri
  3. 三字根字:格式为 s₁s₂s₃y₃,如「晶」的编码为 rrri
  4. 四字根字:格式为 s₁s₂s₃s₄,如「𣊭」的编码为 rrrr
  5. 多字根字:格式为 s₁s₂s₃sₙ

一字根字的补码

由于本方案的字根大多数采用声母和韵母安排键位,几个一字根字对应同样的编码的情况比较多,还有一些低频的一字根字把自己的编码位置让出来给高频字。例如,「十」和「巳」的编码都是 si。为了让这些字也可以不需要选重就打出来,本方案为这些字设计了一些避重的编码,是在标准编码的前面加上一或二个 m(这个键称为「重 chóng」键):

  1. 属于《通用规范汉字表》的字根字,如果在「声韵」码不是首选,则具有「重声韵」码;
  2. 其他字根字,在「声韵」码必定不是首选,且具有「重重声韵」编码。

词语和单字的顶功编码

前缀码由于最大码长限制为 4 码,在检索大词库、大字集时有可能会遇到重码多的情况。为此,我们可以在标准编码的基础上加上一个或多个大写字母,用小写和大写互斥的特性来进一步扩大编码空间。在下面的例子中,SY 表示大写的声母和韵母,特别地 ;,./ 的大写分别是 :<>?

词语的顶功编码为:

  • 二音节词:格式为 s₁s₂y₂Y₁
  • 三音节词:格式为 s₁s₂s₃y₃Y₁
  • 四音节词:格式为 s₁s₂s₃s₄Y₄, s₁s₂s₃s₄Y₄Y₁
  • 多音节词:格式为 s₁s₂s₃s₄S₅..Sₙ, s₁s₂s₃s₄S₅..SₙYₙ, s₁s₂s₃s₄S₅..SₙYₙY₁

也就是说,在标准编码的基础上对于二、三音节词可以补首音节韵母,四音节词可以补末音节和首音节韵母,多音节词可以补第五个直到最后一个音节的声母再加上末音节和首音节韵母。

单字的顶功编码为:

  • 二字根字:格式为 s₁s₂y₂Y₁
  • 三字根字:格式为 s₁s₂s₃y₃Y₁
  • 四字根字:格式为 s₁s₂s₃s₄Y₄, s₁s₂s₃s₄Y₄Y₁
  • 多字根字:格式为 s₁s₂s₃s₄S₅..Sₙ, s₁s₂s₃s₄S₅..SₙYₙ, s₁s₂s₃s₄S₅..SₙYₙY₁

也就是说,在标准编码的基础上对于二、三字根字可以补首字根韵码,四字根字可以补末字根和首字根韵码,多字根字不再按前三末一取码而是输入所有字根的声码再加上末字根和首字根韵码。

音节码用户词典

音节码用户词典承载了动态调频、动态码长和自动造词的功能。用户不断输入的过程中,输入平台会记录用户输入各个词的频率,然后根据一定的算法来调整词在候选中的位置。结果就是,用户常用的词排在前面,或在顶功模式下需要输入较少的编码;不常用的词就排在后面,或在顶功模式下需要输入较多的编码。这个特性称为动态调频和动态码长。

自动造词的功能请参阅冰雪四拼中的介绍。在冰雪清韵中,我们不仅可以使用其中提到的选择法、定位法、概率法三种方法造词,还可以使用「形音替换法」这种独属于冰雪清韵的方法来造词。

在前三种方法中,造词时必须将词拆分为几个片段,然后使用拼音来输入每一个片段。在人名等场合下,这些片段的输入可能不是非常方便。由于我们已经掌握了低重的形码,这种情况下最适合的是使用形码输入每一个单字,然后让系统按拼音的规则造词;但形码输入不包含字音信息,因此需要特别注意多音字的问题。

「形音替换法」的原理如下:首先按 Control+j 进入缓冲模式,然后按形码输入各个单字,此时在候选中标注候选单字的拼音,而且如果该字为多音字就显示多项。选择相应的候选之后,空格结束缓冲模式,即完成造词,后续可用相应的拼音输入这个词。

下图中展示了输入 ppjgkvnagnpabw_ 再空格即造好「梦泽闲客」,下一次可以用 mzxk 输入。注意,在缓冲模式下前缀码的上屏规则仍然有效,以韵码结束或长度大于等于 4 的编码不需要空格。

rimerimerimerime

造词结果如下:

rime

方案码固态词典

在前面所介绍的前缀编码规则的基础上,我们一方面要定义一些便于提高输入速度的编码,另一方面要定义在特定编码上特定候选的排序。这些功能是通过方案码用户词典来实现的:

单字

在 GB2312 范围内,所有以形码编码的单字的候选位置是固定的,而且比词语更优先。除此之外,还定义了以下类型的编码:

  1. 「韵」码:7 个,的 e、我 o、是 i、不 u、了 a、在 ;、和 /。只有二根及以上字可能有此种编码;
  2. 「声空」码:21 个,取字的第一码加空格。只有二根及以上字可能有此种编码;家 b_、想 p_、些 m_、中 f_、也 d_、去 t_、看 n_、他 l_、之 g_、来 k_、生 h_、就 j_、有 q_、好 x_、第 z_、过 c_、都 s_、会 r_、对 v_、这 w_、能 y_
  3. 「声韵」码:80 个,第一码为字的第一码,第二码无理。只有二根及以上字可能有此种编码;
    1. 其中 49 个第二码是整个字的韵母:完 b;、定 b/、校 po、样 p;、吧 fa、吃 fi、跟 f.、嗯 f/、着 de、而 di、前 d;、很 d.、地 ti、国 no、四 ni、网 n,、用 n/、别 le、你 li、后 ga、所 go、质 gi、度 gu、问 g.、到 ko、天 k;、两 k,、自 hi、点 h;、种 h/、说 jo、以 ji、右 qa、左 qo、切 qe、等 z/、原 c;、成 c/、学 se、性 s/、最 re、电 r;、从 r/、给 ve、专 v;、经 v/、理 wi、变 w;、文 w.
    2. 其余 31 个为纯无理:分 bo、比 be、实 bu、公 b,、机 pe、相 pu、水 m/、得 do、为 d,、找 n.、做 lu、子 l;、那 l.、意 l,、再 ka、没 ku、事 k.、先 h.、业 h,、多 je、发 j/、要 xu、她 x;、感 ca、其 c.、期 c,、当 s.、时 ru、进 va、动 vu、高 w/
  4. 「声声空」码:403 个,取字的前两码加空格。只有三根及以上字可能有此种编码;
  5. 「声声声空」码:若干,取字的前三码加空格。只有四根及以上字可能有此种编码。

词语

定义了 535 个二字词位于「声声韵」的首选。除此之外,还定义了以下类型的编码:

  1. 「声韵」码:19 个,第一码为首字的声母,第二码无理。一个 yo、自己 zu、这个 z;、就是 j,、没有 mi、可以 k/、什么 su、我们 wa、但是 du、因为 y;、如果 ro、还是 hu、知道 ze、所以 sa、现在 x.、他们 te、然后 r,、这样 za、起来 q/
  2. 「声声韵」码:46 个,第一码为首字的声母,第二码为次字的声母,第三码无理。每个 mg;、这些 zxi、那些 nxi、这么 zmi、那么 nmi、怎么 zmo、其他 qto、任何 rhi、从而 cvo、因此 yco、可是 ksa、同时 ts;、即使 js/、基于 jye、还有 hyi、只有 zyi、存在 cz;、应该 ygo、只要 zy.、需要 xye、可能 kni、还能 hni、怎能 zni、后来 hlo、认为 rwi、明白 mba、下面 xmi、以后 yh;、之前 zqi、之后 zhi、上午 swi、中午 zwi、下午 xwi、前天 qti、当时 ds/、特别 tbi、超级 cjo、简直 jzo、其实 qse、确实 qsu、开始 kse、一些 yx;、一定 ydi、最后 zhu、一起 yqu、真正 zzo

方案码用户词典

用户可以利用方案码用户词典来对方案码固态词典中的条目进一步自定义。与音节码用户词典不同的是,音节码用户词典存储在 snow_pinyin.userdb 文件夹中、并同步到 snow_pinyin.userdb.txt 中;方案码用户词典存储在 snow_qingyun.userdb 文件夹中、并同步到 snow_qingyun.userdb.txt 中。也就是说,用户同样可以利用 Rime 的同步机制来在多个设备之间同步方案码用户词典。其操作方式如下:

固定和取消固定

在有编码且选中了一个未固定的词时,Control+; 可以固定该候选至当前位置。例如,当 bma 的第一候选词为「编码」时,按下 Control+;,该词出现「📌」标志,表示已经固定到第一位: rime

在有编码且选中了一个已固定的词时,Control+; 可以取消固定该候选。例如,当 xsi 的第一候选词为「现实」且被固定时(这是内置的固顶词),按下 Control+;,该词「📌」标志消失,表示不再被固定到第一位: rime

自由加词

在有编码时,按下 Control+' 之后候选框消失,以任意方式输入想加的词,再按一下 Control+' 即将词加到该编码第一个可用的候选位置上。例如,按下 cctvControl+' → 输入「中国中央电视台」→ Control+',则「中国中央电视台」添加为 cctv 的第一候选词。 rime 再例如,按下 dnaControl+' → 输入「脱氧核糖核酸」→ Control+',此时 dna 已经有固定的第一候选词为「半」,则「脱氧核糖核酸」添加为 dna 的第二候选词。 rime

前移和后移

在有编码且选中了一个已固定的词时,按 Control+[ 将已经固定的候选前移,Control+] 将已经固定的词后移。如果前移和后移的过程中遇到其他已经固定的词,则会交换位置。例如,这里 fmje 对应「吧」和「邑」两个候选, rime 但「吧」已经有了 fa 编码,所以可以在编码为 fmje 时按 Control+] 把「吧」往后移一位。结果如下: rime

重置

在有编码时,按下 Control+\ 将当前编码上所有的自定义取消。


用户可以使用 snow_qingyun.custom.yaml 定制上述几种操作的快捷键:

yaml
patch:
  translator/fix_key: "Control+semicolon" # 固定和取消固定
  translator/add_key: "Control+apostrophe" # 自由加词
  translator/up_key: "Control+bracketleft" # 前移
  translator/down_key: "Control+bracketright" # 后移
  translator/reset_key: "Control+backslash" # 重置

采用 VitePress 构建