形码也需要选重吗?是的,尽管一般情况下这个问题并不突出。这里我们以小鹤音形为例来说明一下插件的基本使用和原理。
小鹤音形默认的词库不大(约 7 万左右),但是随着我们添加的用户词越来越多,难以避免的会有一些编码对应的候选项变多,从而再次陷入翻页选重的烦恼…… 有没有一种方式,可以在小鹤音形中进行辅助选重呢?是的,往下看~
更新日志
- 2025-08-02 21:47 添加针对虎码、五笔(前两码为形)支持更好的鹤音辅助表
- 2025-07-26 15:48 支持小鹤音形的辅助选重插件(主要适用前两码为音)
快速开始
先来看一下效果~
> 小鹤音形的辅助选重
![[assets/15002b9e8b9d1de99a14d9a867b548dc.gif|400]]
下载两个 lua 文件(码表按需选择即可),如下:
- rime-jk/lua/aux_code.lua
- rime-jk/lua/aux_code_hy_table.lua
- rime-jk/lua/aux_code_hx_table.lua
- rime-jk/lua/aux_code_tx_table.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 码 b
或 o
(实 → 宀b + 头t
、 时 → 日o + 寸c
)进行了选重,分别获取到自己想要的候选项。
用一张动图来演示以下吧。
![[assets/15002b9e8b9d1de99a14d9a867b548dc.gif|400]]
一句话总结,就是通过原候选项末字是否存在于第 5、6 对应的辅助单字集合 来决定是否保留该候选项 。
小结
如开篇所说的那样,一般情况下,使用形码是不用担心选重问题的。但又如实际应用中随着词库增长遇到的实际选重问题,说明“具体问题,具体分析”是永远的神~
五笔、虎码之类的形码,也会在使用中遇到同样的问题,感兴趣的朋友,可以自行扩展该插件进行处理,理论上只需要制作一份相应的 xxx_code_table.lua
就可以了。