本次部署的目标:安装小狼毫(忽略),启用雾凇拼音并导入搜狗个人词库,并实现「超级简拼」(如 key→可以),达到与搜狗输入法媲美但隐私安全性更好的输入体验。过程中超级简拼一度无法生效,最终通过 librime 实测定位到词库层面的根因并修复。本报告记录部署步骤、故障诊断与可复用经验。
一、部署流程概览
- 安装 部署雾凇拼音方案,将
default.custom.yaml的schema_list锁定为rime_ice。 - 导入 用 imewlconverter 把搜狗个人词库
sgim_gd_usr.bin转为 Rime 词库,生成cn_dicts/sogou_user.dict.yaml(115,683 条),挂进import_tables。 - 故障 超级简拼无法生效:输入
weix首选仍是weix,ky出不来「可以」。尝试压低英文权重(melt_eng/cn_en initial_quality: -1)也无效。 - 诊断 用 Python + ctypes 直连
rime.dll实测候选,系统性排除干扰项,二分定位到搜狗词库里的字母词条。 - 修复 清理 2,702 条字母词条 → librime 重新编译 → 重启 WeaselServer。ky→可以、weix→微信 等全部第 1 位,修复完成。
二、安装与词库导入
1. 启用雾凇拼音
将 iDvel/rime-ice 方案文件铺到 %APPDATA%\Rime,修改 default.custom.yaml:
patch:
schema_list:
- schema: rime_ice
2. 导入搜狗个人词库
选用长期积累的个人词库(非可下载细胞词库),用深蓝词库转换工具转为 Rime 格式:
ImeWlConverterCmd.exe -i sgpybin \ "%USERPROFILE%\AppData\LocalLow\SogouPY.users\<编号>\sgim_gd_usr.bin" \ -o rime -O sogou_user.dict.yaml
生成 cn_dicts/sogou_user.dict.yaml(115,683 条,sort: by_weight),在 rime_ice.dict.yaml 的 import_tables 末尾追加 - cn_dicts/sogou_user。原配置备份至 Rime.bak.20260530_0953\。
三、超级简拼故障诊断
1. 关键方法:用 librime 直接实测
为做到「真实验证到底出哪些字」,用 Python ctypes 直接调用 rime.dll 的 C API(RimeInitialize → RimeStartMaintenance → RimeCreateSession → RimeProcessKey → RimeGetContext),逐键喂入并翻页读取全部候选。诊断从「猜参数」变成「可复现实验」。
2. 实测出的故障特征
| 输入 | 音节构成 | 修复前 | 说明 |
|---|---|---|---|
weixin | 全拼 | 微信 ✓ | 全拼一直正常 |
wm | wo+men | 我们 ✓ | 含鼻音 m,正常 |
nh | ni+hao | 你好 ✓ | 含鼻音 n,正常 |
wx | wei+xin | 只出 wx ✗ | 两个纯声母,失败 |
ky | ke+yi | 只出英文 ✗ | 两个纯声母,失败 |
bj | bei+jing | 0 候选 ✗ | 两个纯声母,失败 |
规律:两个音节都是「纯声母」就出不来;只要有一个音节是 m/n/ng(合法成音节鼻音)就正常。
3. 系统性排除(逐一证伪)
| 怀疑对象 | 实测结论 |
|---|---|
| 自动纠错 derive 规则 | 注释后仍失败 — 排除 |
| 英文翻译器 melt_eng / cn_en | 禁用后仍失败 — 排除(最初假设方向) |
| 词库里的大写字母编码 A–Z | 删除后仍失败 — 排除 |
| 腾讯大词库 tencent | 单独移除后仍失败 — 排除 |
| 搜狗个人词库 sogou_user | 二分定位命中 — 真凶 |
4. 根因
word → w o r d pdf → p d f ok → o k easy → e a s y这些单字母音节让
w/k/b 等声母在 prism 里变成了「完整音节」,从而遮蔽了超级简拼的声母缩写展开,导致两个纯声母无法连接成词。这正是雾凇文档所说的「单字母编码会破坏超级简拼」。鼻音 m/n/ng 本身是合法成音节,不受影响——这解释了为何只有它们能用。
四、修复与验证
1. 修复操作
- 备份 →
sogou_user.dict.yaml.bak(3,069,602 字节)。 - 删除所有「编码含无元音单字母 token」的词条(保留 m/n/ng),保留 112,981 条正常中文词。
- 换行规范化为 LF(写文件时被 Windows 转成了 CRLF,已二进制修正)。
- 停掉 WeaselServer 释放 userdb 锁 → 用 librime
RimeStartMaintenance重新编译词典。 - 重启
WeaselServer.exe。
2. 修复后验证(真实配置目录实测,全部第 1 位)
| 输入 | weix → 微信 | ky → 可以 | wx → 微信 |
|---|---|---|---|
| 输入 | bj → 北京 | zg → 中国 | zgr → 中国人 |
五、踩坑与经验总结
① 用 librime 直测是最强诊断手段
ctypes 直连 rime.dll 逐键喂入读候选,把「玄学调参」变成「可复现实验」,二分定位词库问题极高效。
② userdb 被运行中的服务锁住
*.userdb(leveldb)被运行中的 WeaselServer 独占。需先 taskkill WeaselServer 再重建,或拷贝目录到临时位置测试。
③ 拼音词库不宜混入字母编码
英文应走独立的 melt_eng,不要把字母词条混进拼音词库——它会破坏超级简拼。搜狗个人词库导入时尤其要注意。
④ Windows 文本写入会变 CRLF
Python open(...,'w') 在 Windows 把 \n 写成 \r\n,导致文件变大、与原 LF 格式不一致。改词库用二进制写 LF。
⑤ Windows 路径 / GBK 编码
避免 MSYS 的 /tmp 路径喂给原生程序;中文控制台输出按 GBK 解码。git clone 也要落在用户目录而非 /tmp。
六、最终状态与维护建议
- ✔ 方案
rime_ice已启用,全拼 + 超级简拼均正常工作。 - ✔ 搜狗个人词库保留 112,981 条正常中文词;2,702 条字母词条已清理。
- ⚠ 词库中少量个人字母缩写词条随字母词条一并删除;经确认不再需要,手动输入即可。
- ⚠ 若以后重新从搜狗导入词库,字母词条会回来、简拼会再次失效,需按同样规则再清理一次(备份在
sogou_user.dict.yaml.bak)。 - ℹ 当前编译产物由 CRLF 源编译、源已规范化为 LF,逻辑内容一致;下次「重新部署」会无害地重建一次。