# Rime 词典管理及其自动化

> 本文公开全文。

原文：https://utgd.net/article/20126

如果说算法是输入法的骨架，词典（词库）就是输入法的血肉。健康的输入法，应当达到骨骼与血肉的平衡。

传统输入法往往预设庞大字库，机体容易僵硬，逐渐变成拖着大肚腩爬行的怪物；现代输入法通常骨骼精奇，可惜常常越俎代庖，对遣词造句干预过多。像 Rime 这样的开源输入法实属徐来清风，既能自动记住输入习惯、手动配置在自定义词典，又允许删除任何不再需要的词语。

当然，正如同身体锻炼，健康的输入法也是三分天注定，七分靠打拼。学会使用 Rime 的词典，才能发挥一款输入法的实力。

## Rime 中的两种词典：自动与手动

与“自动记忆”和“手动配置”相对对应，Rime 的词典也分为两类，一种是根据用户输入习惯自动存储，无法手动编辑，通常以 userdb 结尾（在 macOS 中呈现为文件夹）；另一类则需要手动输入，可以自由更改，包括 ‌某某输入法\.dic\.yaml 和 custom\_phrase\.txt 两种文件格式。

通常，这些字典文件位于 ~/Library/Rime/ 文件夹下，根据 Rime 的版本不同可能会再往里藏一个文件夹层级。一般来说，userdb 类型的文件无需改动（似乎也没有办法直接编辑），如果你想删掉被 Rime 自动记住的词语，可以先打出该词语——仅仅在候选词列表中打出，不要“上屏”——选中它后按下 ‌Fn\-⇧Shift\-D，即可让 Rime 忘掉它。

我偶尔也会打出一些错别字，一旦发现，马上就会将其抹掉，避免以后再犯。如今很多输入法有个糟糕的倾向，即“众口铄金”，大家都打错的词，它就将错就错、把错别字也推荐给你，甚至苹果原生输入法也喜欢干这种事情，多年来一如既往地向我推荐“一如继往”，这根本就是在怂恿大家使用错别字——而且，你没有“被遗忘权”。

不过，Rime 的删除方式仅对 userdb 中的词语生效，自定义词典有另一套使用方式，我也为它们制作了相应的自动化动作，以便简化这些词典的管理。

### 两种自定义词典：txt 和 yaml

Rime 中有两种用户自定义词典，分别是 custom\_phrase\.txt 和 ‌某某输入法\.dic\.yaml。在用户的层面看，前者更简单直白，本文也推荐使用 custom\_phrase\.txt。其中的数据非常简单，每行都是 词组 输入语 的形式（中间是制表符），和 macOS 系统自带的文本替换（Text）类似。

yaml 则多了一些配置代码，随后的词语数据基本和 txt 文件通用，你可以直接在两类文件之间相互拷贝。利用一些巧劲儿，还可以把其他输入工具里的用户词典提取到 Rime 中，包括之前提到的文本替换。

日常打字时，两种用户自定义词典的差别较小，主要体现在一些细节上。例如，txt 版的词语不用双击元音字母就能输入，像是输入 Excel，yaml 就要按两次 e，有时候脑筋会转不过弯；另外，txt 中的短语更靠谱，往往添加什么就能打出什么，而 yaml 文件中经常有词语发生冲突、打不出来。

不过 yaml 文件也有其优点，无需打完整串输入码，可以实现所谓的“首字母输入”，如果经常和英文词组打交道，yaml 更合适。另外，yaml 带有模块化设计的味道，不仅可以匹配特定输入方案，还可以“外挂”词库，适合同时使用多种输入方案或者跨学科工作的专业人士。比方说，张君原先使用双拼，最近正在苦练五笔，他可能需要为两种截然不同的输入法分开配置词典；再如，李君是一位专利代理师，可能需要分开维护法律词库、政策词库和技术词库等多个文件。他俩在 yaml 上花一点力气尚有必要，对于多数读者而言，yaml 的性价比还是低了一些。

### 导入文本替换到 Rime

不少用户可能已经在系统文本替换中添加过一些短语，可以在 macOS 的键盘设置中将其拖出——就是字面意思，比如拖到桌面——生成“Text Substitutions\.plist”文件，稍后加工为 Rime 可以识读的格式。

我本来可以做一个自动化工具，以便诸君将 Text Substitutions\.plist 文件直接转换为 Rime 词典格式，但苦于 macOS 的命令行工具 年久失修、连换行都不能处理，与其让诸位安装一个命令行工具，不如直接用支持正则表达式的文本编辑器来处理更简单（比如免费版的 BBEdit）。

首先在终端（Terminal）中提取半成品数据。假设现在 Text Substitutions\.plist 文件位于桌面，你可以使用以下命令从中获取输入语和词语数据：

```
grep string ~/Desktop/Text\ Substitutions.plist
```

随后，选择一款带有正则表达式替换功能的编辑器，图示为 BBEdit，其免费版已经提供了本文所需功能。首先通过 \<string\>\(\.\*\)\<\\/string\>\\n\<string\>\(\.\*\)\<\\/string\> 提取出所需数据，再用 \\2\\t\\1 将它们排成 Rime 所需的 词组 输入语 形式。

从其他输入法迁移过来的读者，只要能够导出原输入法的用户词典，总有办法将其导入 Rime。只需整理出 词组 输入语 的格式，就可以粘贴到 Rime 自定义词典文件的最下方。

## 通过自动化工具简化词典管理

不论把词典保存在 txt 文件还是 yaml 文件中，每次添加新词时还要编辑源文件，显然不方便（何况 Rime 的词典文件还保存在隐藏文件夹 Libraray 中）。在 Rime 中，由于中文词语会随着输入习惯而被自动记忆，所以自定义词典中主要是外文和中英复合的词语，比如 macOS、ISO 或 U盘，这些词语 Rime 的中文输入方案记不住，手打又要顾及大小写，更适合直接存入自定义词典。

词典必然会跟随用户一起成长，添加新词无法避免。单单是读一篇文章、听一场讲座，就可能学会一堆新词语（尤其是专有名词和各种缩写），这些词好不好另说，最起码，如果可能要重复输入它们，那就有必要将其存入自定义词典。为了减少打开源文件的操作，我做了一系列自动化添加/删除词语的操作。

提醒一下，进行本节任何一种修改操作后，都需要重新部署 Rime 以使新词典生效，可以使用快捷键 ⌃Control\-‌⌥Option\-~（~ 键即 ‌⎋Esc 键下方的按键）或在菜单栏 Rime 图标中选择“Depoly”。

下文所展示的截图主要来自 LaunchBar，其中代码可以改到其他自动化工具中。删除词条的动作比较容易维护，我也提供了 Keyboard Maestro 版。

### 捕获生词

主要针对英文单词，捕获后可以通过输入全拼来打出该单词，主要是省去大小写切换的麻烦，例如输入 ‌ffmpeg 打出 FFmpeg（一款视频处理工具）。更常用的单词还可以通过下一节的手动输入方式来设置缩写，进一步简化输入。

遇到一些常见的品牌时，我也会将其捕获到自定义词典中，下次再输入时就方便不少。各种大小写夹杂的品牌名、个性独特的网民，都可以通过“捕获生词”添加到用户词典。具体方法是，看到一个生词，比如 Osprey（一个美国背包品牌），就可以选中它、通过 Instant Send 发送到 LaunchBar 并运行，记得重新部署一下 Rime。看到部署成功的通知提示后，再打一下 osprey，首字母大写的 Osprey 就出现在了输入界面。

捕获生词的动作多用于捕获英文专有名词、缩写，但是不适用于词组，因为后者含有空格、没办法正常解析。词组可以通过下文的手动输入方式收入自定义词典。

LaunchBar 动作下载

### 手动输入

虽说捕获用起来方便，可惜基本只适用于英文，有些词条还是得用户自己添加，比如,\>\_\< o\_O 之类的颜文字，👈 🌝 👈 等常用 Emoji 表情，U盘 T恤 等中英文组合词组，\.com、\.cn 等域名后缀……手动输入就是为了给这些词语提供兜底方案，以添加 T恤 这一词条为例，其使用方式是：

- 启动动作，先输入词语，比如 T恤，按一下空格空开

- 接着录入输入码，接上上一条，可以根据拼音设成 txu

- 重新部署鼠须管

现在再用 Rime 输入 txu 试试，就能打出 T恤。不依靠词典的话，这类中英文复合词就显得特别麻烦，还有 U盘、A类执照、B型血……遇到它们时难免卡一下。对了，MP3、MP4 这类英文数字复合词也可以加入自定义词典，我的做法是将其英文部分作为输入语。稍有遗憾的是，A4纸、W3C 这类奥利奥夹心造型的词语，我至今没想出合适的输入方式。

LaunchBar 动作下载

### 删除词条

有时会发生重复添加或输错词语的情况，也可以通过 LaunchBar 快速删除。这个动作用起来是这样的：

- 启动动作，按空格，输入词条关键词

- 从 LaunchBar 列出来的匹配词条中选择一个，按下回车

- 选中的词条即被删除，LaunchBar 还会发送一条通知，显示刚才删除了哪个词条

- 同样，记得重新部署

这个动作也可以作为一个用户词语检索工具，有时我自己都不确定一个生词以前有没有添加过，就会启动 LaunchBar 先搜一搜，没有的话再加进去——只是要小心，别手抖删除原有词条，如果你真的不幸把它删了，可以看看刚刚发出的通知，手动把被删的词语加回去……某种程度上，通知提升了整个动作的“工程安全性”。

在没有输入任何关键词的时候，删除词条的动作会显示词典中最后 5 个词语，方便检查、删除最近添加的内容。很多错误是粗心所致（比如选词时少划了最后两个字母），往往刚添加完不久就会猛然意识到，这时候就用不着搜索，可以直奔最近词语，将其删掉。

- LaunchBar 动作下载

- Keyboard Maestro 动作下载

## 备份词典数据

Rime 的所有字典文件都对用户开放，备份工作说破了就是复制粘贴。Keyboard Maestro、Hazel 等自动化工具都有复制功能，你可以设置一个定时动作，将其上传到云端或者外置硬盘。

我也写了一个简单的通用脚本，适用于任何支持 Shell 的自动化工具，可以将整个 Rime 文件夹备份到任意位置，以备份到 iCloud 中的文档文件夹为例，代码如下（我的电脑名是 apple，你可能需要修改）：

```
rsync -av /Users/apple/Library/Rime/ /Users/apple/Documents/Rime/ --delete
```

Rime 文件夹体积非常小巧，没有巨大的缓存文件，我在五六年时间里不过囤积 13\.4 MB 的数据，完全可以整个文件夹一起备份，省心省力。

## 小结

刨去两种词典，Rime 的默认词库简直小得可怜，以至于在 OS X 时代，它还因为资源占用小而受到进阶用户的追捧。必须承认，随着硬件性能踩着摩尔的肩头一路高歌猛进，Rime 因词库小而“唯快不破”的优势已然不复。

现在的 Rime，是为这种人准备的：他们愿意忍受输入法最初打不出“唯快不破”，愿意花上几个月教会输入法日常用语，愿意花上半年甚至更久去培育一款输入法，让它打出、且仅打出自己需要的词语，成长为“张律师的输入法”“李医生的输入法”或“王编辑的输入法”，成为手指乃至大脑的延伸。

---

[前往标准阅读页](https://utgd.net/article/20126?audience=web)
