UP | HOME

▼ 本文更新于 [2025-04-12 六 10:57]

使用rime的万象拼音方案

[2025-04-10 四 19:44]

今天将rime的拼音方案从之前的白霜拼音换到了万象拼音。两者的主要差别在于,白霜(以及雾凇拼音等)的原理都是基于词库,需要开发者手动维护更新词库;而万象拼音主要维护的重点在于一个组词模型。也正因如此,前者体积小许多,后者需要加载一个100—200M不等的模型,且资源占用也会大一点。

不过我更看重的是后者强大的造句能力,所以切换了过来。简单记录关键操作如下。

1. 下载万象拼音

进入万象拼音pro的release界面,下载想采用的辅助码对应压缩包及语法模型,将语法模型放在rime文件夹首层。我用的小鹤方案,以下均以此为例。

2. 配置万象拼音

rime的各种方案配置其实很简单。只需要记住两个规则:

  1. 对于 default.yaml 文件,需要在 default.custom.yaml 文件中使用 patch: 相关指令才可覆盖;
  2. 对于 *.schema.yaml 文件,需要在对应的 *.custom.yaml 文件中使用 patch: 相关指令才可覆盖。

所以我们要做的就是打开方案内置的各个yaml文件,然后按照注释复制一份之后在新的custom.yaml文件里通过 patch: 方式进行覆盖式修改。

3. 取消万象拼音的辅助声母

[2025-04-12 六 10:53]: 之前写这篇文章的时候,万象拼音普通版的readme还未更新,误以为其不支持拼音+`的反查。现在直接使用万象拼音普通版就好, 以下内容不再需要

万象拼音有一个自带的辅助码功能,其中第一个选项会默认启用:

辅助码它可以在输入一个确定得拼音后面继续输入一个部首的读音,使得这个字出现在靠前甚至第一位。这种方式易于理解,无须记忆字根,一切基于拼音得基础上。例如:

功能1 如果想要 镇 字显示在前面 那么在本方案下提供两种方式,第一种就是辅助码声母,vf继续输入j 也就是金字旁得声母即可出现结果,如果还是出现不了你要的结果,可以输入另外主体字的声母来继续缩小范围。

这个的意思是,想找 的时候可以输入 vfj ,这样就会在候选栏里出现拼音为 zhen 而且又带 金 字旁的候选字了。

但是这个输入方式会出现一个问题,那就是如果相关的拼音没有这个声母的候选词,那么整个输入框就会完全消失。所以如果你默认启用这个选项,就会发现打字的时候候选词框是一闪一闪的,非常不习惯。

我们可以在 wanxiang.custom.yaml 中如下设置:

patch:
    speller/algebra:
    - xlit/āáǎàōóǒòēéěèīíǐìūúǔùǖǘǚǜü/aaaaooooeeeeiiiiuuuuvvvvv/
    - xform/^ng(;.*)/eng$1/
    - xform/ńg|ňg|ǹg/eng/
    - xform/ń|ň|ǹ/en/ 
    - derive/^([jqxy])u(;.*)$/$1v$2/
    - derive/^([aoe])([ioun])(;.*)$/$1$1$2$3/
    - xform/^([aoe])(ng)?(;.*)$/$1$1$2$3/
    - xform/^(\w+?)iu(;.*)/$1Ⓠ$2/
    - xform/^(\w+?)ei(;.*)/$1Ⓦ$2/
    - xform/^(\w+?)uan(;.*)/$1Ⓡ$2/
    - xform/^(\w+?)[uv]e(;.*)/$1Ⓣ$2/
    - xform/^(\w+?)un(;.*)/$1Ⓨ$2/
    - xform/^(\w+?)uo(;.*)/$1Ⓞ$2/
    - xform/^(\w+?)ie(;.*)/$1Ⓟ$2/
    - xform/^(\w+?)i?ong(;.*)/$1Ⓢ$2/
    - xform/^(\w+?)ing(;.*)/$1Ⓚ$2/
    - xform/^(\w+?)uai(;.*)/$1Ⓚ$2/
    - xform/^(\w+?)ai(;.*)/$1Ⓓ$2/
    - xform/^(\w+?)eng(;.*)/$1Ⓖ$2/
    - xform/^(\w+?)en(;.*)/$1Ⓕ$2/
    - xform/^(\w+?)[iu]ang(;.*)/$1Ⓛ$2/
    - xform/^(\w+?)ang(;.*)/$1Ⓗ$2/
    - xform/^(\w+?)ian(;.*)/$1Ⓜ$2/
    - xform/^(\w+?)an(;.*)/$1Ⓙ$2/
    - xform/^(\w+?)ou(;.*)/$1Ⓩ$2/
    - xform/^(\w+?)iao(;.*)/$1Ⓝ$2/
    - xform/^(\w+?)[iu]a(;.*)/$1Ⓧ$2/
    - xform/^(\w+?)ao(;.*)/$1Ⓒ$2/
    - xform/^(\w+?)ui(;.*)/$1Ⓥ$2/
    - xform/^(\w+?)in(;.*)/$1Ⓑ$2/
    - xform/^sh/Ⓤ/
    - xform/^ch/Ⓘ/
    - xform/^zh/Ⓥ/
    - xlit/ⓆⓌⓇⓉⓎⓊⒾⓄⓅⓈⒹⒻⒼⒽⒿⓀⓁⓏⓍⒸⓋⒷⓃⓂ/qwrtyuiopsdfghjklzxcvbnm/
    - derive|^(.+);.*$|$1| # 纯双拼的情况
    - erase/^(.+);(.+)$/    # 删除原始编码加速检索

上面这段代码实际上是对原方案的一个覆盖。在原始的 wanxiang.schema.yaml 中, speller/algebra 的内容如下:

- set_shuru_schema     #拼音转双拼码
- fuzhu_flypy           #辅助码部分

辅助声母的代码就在下面的 fuzhu_flypy 内容里:

fuzhu_flypy:     ########################################位于词库第七个分号后
  __append:
    - derive|^(.+);.*$|$1| # 纯双拼的情况
    - abbrev|^(.+);(\w).*$|$1$2| # 双拼+一位辅助码的情况
    - derive|^(.+);(\w).*$|$1$2/| # 双拼1位辅助码+/
    - abbrev|^(.+);(\w)(\w).*$|$1$2$3| # 双拼+2位辅助码的情况
    - derive|^(.+);(\w)(\w).*$|$1$2$3/| # 双拼+2位辅助码+/
    - derive|^(.+);(\w)(\w).*$|$1$2$3o| # 双拼\+2位辅助码\+o,主要用来应对小企鹅这类输入法没法使用符号的场景,但同时有些辅助码会出现异常,如:ui uio>uiuio,手机小企鹅使用时开启
      #分号后面第二组辅助码
    - abbrev/^(.+);.*?,(\w).*$/$1$2/
    - derive|^(.+);.*?,(\w).*$|$1$2/|
    - abbrev/^(.+);.*?,(\w)(\w).*$/$1$2$3/
    - derive|^(.+);.*?,(\w)(\w).*$|$1$2$3/|
    - derive/^(.+);.*?,(\w)(\w).*$/$1$2$3o/
    - xform/◯/;/  #对于微软双拼、搜狗双拼,前面将分号保护了起来,现在放出来让其发挥作用
    - erase/^(.+);(.+)$/    # 删除原始编码加速检索

可以看见,从第二行到倒数第二行,都在处理双拼+辅助码的情况。所以我们可以在 wanxiang.custom.yaml 中把这几行移除掉,只剩下第一行和最后一行。

© Published by Emacs 31.0.50 (Org mode 9.8-pre) | RSS 评论