Lazywang's Tech Blog
Lazywang's Tech Blog

小狼毫 · 雾凇拼音部署报告

本次部署的目标:安装小狼毫(忽略),启用雾凇拼音并导入搜狗个人词库,并实现「超级简拼」(如 key→可以),达到与搜狗输入法媲美但隐私安全性更好的输入体验。过程中超级简拼一度无法生效,最终通过 librime 实测定位到词库层面的根因并修复。本报告记录部署步骤、故障诊断与可复用经验。

一、部署流程概览

  • 安装 部署雾凇拼音方案,将 default.custom.yamlschema_list 锁定为 rime_ice
  • 导入 用 imewlconverter 把搜狗个人词库 sgim_gd_usr.bin 转为 Rime 词库,生成 cn_dicts/sogou_user.dict.yaml(115,683 条),挂进 import_tables
  • 故障 超级简拼无法生效:输入 weix 首选仍是 weixky 出不来「可以」。尝试压低英文权重(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.yamlimport_tables 末尾追加 - cn_dicts/sogou_user。原配置备份至 Rime.bak.20260530_0953\

注意:导入后超级简拼始终不生效。最初尝试的方向是「降低英文候选权重」——方向看似合理但没打中靶心,真正的拦路虎不在英文翻译器,而在刚导入的搜狗词库里。

三、超级简拼故障诊断

1. 关键方法:用 librime 直接实测

为做到「真实验证到底出哪些字」,用 Python ctypes 直接调用 rime.dll 的 C API(RimeInitialize → RimeStartMaintenance → RimeCreateSession → RimeProcessKey → RimeGetContext),逐键喂入并翻页读取全部候选。诊断从「猜参数」变成「可复现实验」。

2. 实测出的故障特征

输入音节构成修复前说明
weixin全拼微信 ✓全拼一直正常
wmwo+men我们 ✓含鼻音 m,正常
nhni+hao你好 ✓含鼻音 n,正常
wxwei+xin只出 wx ✗两个纯声母,失败
kyke+yi只出英文 ✗两个纯声母,失败
bjbei+jing0 候选 ✗两个纯声母,失败

规律:两个音节都是「纯声母」就出不来;只要有一个音节是 m/n/ng(合法成音节鼻音)就正常。

3. 系统性排除(逐一证伪)

怀疑对象实测结论
自动纠错 derive 规则注释后仍失败 — 排除
英文翻译器 melt_eng / cn_en禁用后仍失败 — 排除(最初假设方向)
词库里的大写字母编码 A–Z删除后仍失败 — 排除
腾讯大词库 tencent单独移除后仍失败 — 排除
搜狗个人词库 sogou_user二分定位命中 — 真凶

4. 根因

搜狗导入的词库里有约 2,702 条英文/字母词条,编码被逐字母拆成了单字母音节,例如:
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,逻辑内容一致;下次「重新部署」会无害地重建一次。

Lazywang's Tech Blog

小狼毫 · 雾凇拼音部署报告
本次部署的目标:安装小狼毫(忽略),启用雾凇拼音并导入搜狗个人词库,并实现「超级简拼」(如 key→可以),达到与搜狗输入法媲美但隐私安全性更好的输入体验。过程中超级简拼一度无法…
扫描二维码继续阅读
2026-05-30