模糊音
模糊音让你用「不标准的读音」也能打出目标字词。平翘舌不分、n 和 l 不分、前后鼻音不分,都可以让它认。term-ime 把常见的口音做成可逐组开关的模糊音。
term-ime 自带明月拼音词库,共 67164 条 (词, 拼音) 映射(另有 437873 条词频表,词频与大部分词组只在这份表里)。词库与 librime 补丁在同一仓库维护(adam-ikari/librime-stl 的 dict/ 目录),随 term-ime 一起打包。模糊音在这套词库的读音上叠加变换,不改动词库本身。
模糊音开关
| 组 | 说明 |
|---|---|
| 平翘舌 | 不区分 zh/ch/sh 与 z/c/s |
| n/l | 不区分 n 与 l |
| r 系 | 不区分 r 与 l、y |
| h/f | 不区分 h 与 f |
| 前后鼻音 | 不区分 an/ang、en/eng、in/ing |
默认全开,全部关掉就是精确拼音。
两处边界,界面上那一行说不清楚,写在这里:
r 系只认一个方向。 它把 r 的音节另外记一份 l 或 y 的写法,所以敲 lan 能出「然」,敲 yin 能出「人」。反过来不成立:ren 的候选在开和关两种设置下一字不差,想按 r 的读音打出 l 声母的字,得开 n/l 那组。
h/f 不是所有 h、f 都互认。 方案里做的是 hu↔fu、hong↔feng、hun↔fen、hua/huo↔fa/fo 这几对,han 和 fan 不在其中。
在设置面板里改
Ctrl+A 然后 S 打开面板,↑/↓ 移到要改的那一行,←/→ 或 Enter 切换。焦点所在行的下一行就是它管哪些音:
╭──────────────────────────────────────────╮
│ │
│ 设置 │
│ │
│ 界面语言: [简体中文] < 2/2 │
│ 候选词数量: 9 │
│╭模糊音──────────────────────────────────╮│
││ zh⇄z: 开 ││
││ n⇄l: 开 ││
││ r⇄l: 开 ││
││ hu⇄fu: 开 ││
││ an⇄ang: 开 ││
│╰────────────────────────────────────────╯│
│ 面板和状态栏的文字语言 │
│ │
│ ------------------------------ │
│ 选择 ↑↓ 切换 ←→/Enter 取消 Esc/Tab │
│ │
│ 关闭 │
╰──────────────────────────────────────────╯
改完立刻生效,不用退出重开,也不用重启终端。
关掉之后
关掉某组,它带进来的字就没了,精确读音不受影响:
| 输入 | 五组全开 | 全关 |
|---|---|---|
lan | 让 男 难 蓝 南 烂 然 狼 兰 懒 浪 栏 … | 蓝 烂 兰 懒 栏 岚 拦 揽 篮 澜 … |
fan | 换 放 黄 方 饭 房 反 烦 翻 还 凡 防 … | 饭 反 烦 翻 凡 返 犯 范 番 繁 … |
zi | 之 只 子 至 字 自 值 指 知 直 纸 治 … | 子 字 自 紫 资 兹 仔 姿 梓 籽 … |
模糊音只往码里加读音,不删原来的读音,所以关掉一组不会让你打不出本来能打的字。
配置
配置文件在 ~/.config/term-ime/config.json,键是 fuzzy_groups:
{
"fuzzy_groups": ["zh_z", "n_l", "r", "hu_f", "nose"]
}
五个键对上面的五组:zh_z 平翘舌、n_l、r r 系、hu_f h/f、nose 前后鼻音。空数组是精确拼音。旧配置里的 fuzzy_pinyin(true/false)还认,读到时 true 展开成五组全开、false 展开成空。
实现
全开用打包好的 luna_pinyin_simp_fuzzy,全关用 luna_pinyin_simp,都是现成方案,启动就能用。
只开其中几组时,程序按开的那几组裁出一份新方案,名字带组的签名,比如只开 n/l 是 luna_pinyin_simp_fuzzy_n_l。第一次切到某个组合,librime 要在后台把这份方案的 prism 编译出来,落在 ~/.local/share/term-ime/(编译产物在它的 build/ 子目录)。编好之后同一个组合再切回来是即时的;机器忙的时候这一下会慢,候选栏可能短暂停在旧组合的结果上。
规则的来源是方案里的 speller/algebra,每组用标记行圈起来,裁剪时按标记整块保留或整块去掉:data/rime-data/luna_pinyin_simp_fuzzy.schema.yaml。