2025-07-27    2025-08-02    1394 字  3 分钟

形码也需要选重吗?是的,尽管一般情况下这个问题并不突出。这里我们以小鹤音形为例来说明一下插件的基本使用和原理。

小鹤音形默认的词库不大(约 7 万左右),但是随着我们添加的用户词越来越多,难以避免的会有一些编码对应的候选项变多,从而再次陷入翻页选重的烦恼…… 有没有一种方式,可以在小鹤音形中进行辅助选重呢?是的,往下看~

更新日志

- 2025-08-02 21:47 添加针对虎码、五笔(前两码为形)支持更好的鹤音辅助表
- 2025-07-26 15:48 支持小鹤音形的辅助选重插件(主要适用前两码为音)

快速开始

先来看一下效果~

> 小鹤音形的辅助选重

![[assets/15002b9e8b9d1de99a14d9a867b548dc.gif|400]]

下载两个 lua 文件(码表按需选择即可),如下:

放到配置项目根目录,如 Rime/lua 中,然后在方案的 engine/filters 中引入,如下:

engine:
  filters:
    - lua_filter@*aux_code
    - ...

重新部署,即可。

实现原理

小鹤音形中,重码的重灾区集中在两字词。为什么?按照组词规则,两字词恰好是“双拼”,如:uiui

![[assets/Pasted image 20250727202133.png|286]] ![[assets/Pasted image 20250727202143.png|160]]

看,才加了几个同音词,你就已经需要翻页了~

你可能会想,那单字两码的时候不也是“双拼”吗?为什么不用担心重码呢?答案很简单,此时我们可以通过第三、四码(形的部分)用来选重。

但是默认你没有办法通过第五码(最大码长为 4)对两字词选重。

很早的时候了解过 RIME输入法辅助码音形分离插件 对拼音进行选重,它通过引导符来分隔辅助码部分对候选项进行筛选。

对于小鹤音形此类定长形码来说,可以不使用引导符,只需要截取第 5、6 码,如 o、ab ,通过制作好的表文件),找到对应的辅助单字集合。我们使用原始的小鹤音形拆分文件,转换生成了 aux_code_table.lua 文件,其内容格式如下:

local aux_code_table = {
  ["a"] = {"䲟", "䲠", "䴓", "一", ... },
  ["b"] = {"㿠", "䎖", "丕", "丫", ... },
  ["c"] = {"寸", "䓛", "䓨", "䓫", ... },
  ...
  ["o"] = {"日", "月", ... },
  ["z"] = {"劓", "勐", "孔", "孖", ... },
  ["aa"] = {"一", "与", "二", "互",... },
  ["ab"] = {"下", "百", "髭", "鬒",... },
  ...
  ["zz"] = {"孖", "跶", "跹", "踺", "道"},
}
return aux_code_table

我们在 aux_code.lua 中,预先缓存四码时的候选项。在输入第 5、6 码的时候,遍历缓存的候选项,取末尾单字,通过判断其是否在对应的辅助单字集合中,来决定是否存储当前候选项为新的候选集合。

![[assets/Pasted image 20250727205356.png|200]] ![[assets/Pasted image 20250727205441.png|120]]

如上,我们通过第 5 码 bo实 → 宀b + 头t时 → 日o + 寸c)进行了选重,分别获取到自己想要的候选项。

用一张动图来演示以下吧。

![[assets/15002b9e8b9d1de99a14d9a867b548dc.gif|400]]

一句话总结,就是通过原候选项末字是否存在于第 5、6 对应的辅助单字集合 来决定是否保留该候选项 。

小结

如开篇所说的那样,一般情况下,使用形码是不用担心选重问题的。但又如实际应用中随着词库增长遇到的实际选重问题,说明“具体问题,具体分析”是永远的神~

五笔、虎码之类的形码,也会在使用中遇到同样的问题,感兴趣的朋友,可以自行扩展该插件进行处理,理论上只需要制作一份相应的 xxx_code_table.lua 就可以了。