写在前面

输入法安全一直是被大众,甚至可以说是很多人忽视的问题。但恰恰相反的是,最了解你的产品,往往是你最信任的产品。输入法是我们每天都会用到的工具,它记录了我们的输入习惯,也记录了我们的一些隐私信息。

当然,针对输入法安全的考量是一部分,另一部分的考量就是输入法的词典了。

RIME - 中州韵 是一款开源的输入法引擎,它的词典是由用户自己维护的。正如中州韵官网主页所描述的一样:

聪明的输入法懂我心意。

这样的设计,一方面可以保证用户的隐私安全,另一方面也可以让用户自己定制自己的输入法。

RIME 横跨三大平台,在每个平台上都有开箱即用的软件。

但本文并不着重介绍 RIME 的安装和使用,而是介绍如何自己维护 RIME 的词典。

词典

正如前文所述,RIME 的词典是 RIME 的灵魂,只有适合自己的词典,才是真正“懂我心意”的输入法。为了兼和我平时的发言习惯,兼览各大佬们维护的词典,以及我自己的使用体验,最终挑选了以下词典:

  • base.dict.yaml
  • luna_pinyin.dict.yaml
  • zhwiki.dict.yaml
  • ext.dict.yaml
  • tencent.dict.yaml

这些词典的选用既能保证日常高频词的覆盖,又能保证专业词汇的覆盖,也能保证网络流行词的覆盖。

  • 中文维基百科词典

zhwiki.dict.yaml 是中文维基百科的词典,收录了非常巨量的专业词汇,比如各类书籍、人名、地名、机构名等等。

中文维基百科词汇 macOS 鼠须管

中文维基百科词汇 macOS 鼠须管

由于这个词 “新戈利斯科耶农村居民点” 比较特别,属于中文维基百科词典的专属词,也比较长,一般的词典没有收录,所以可以尝试能否打出来这个词可以用来测试词典是否生效。

  • 腾讯词向量词典

tencent.dict.yaml 来自 雾凇拼音 是腾讯词向量的词典,收录了一些网络流行词汇,比如各类网络用语、网络流行语等等。是 dvel 长期维护的词典。

  • 两字词

两字词统一放到 base.dict.yaml 中,便于平时修订和调频。

因为两字词的排序基本决定了词库舒适度,重码较多,所以都加上注音和权重,并大量增删和调频。

  • 扩展词库

主词库缺少了很多常用词和流行小短句,挂载扩展词库后体验会好很多。

ext.dict.yaml 一些平时随手的扩充。

扩展的词库默认权重为 100,因为不写权重时,Rime 默认给到的权重比 1 还小,输入长句时,初始的候选项有很大可能会被意料之外的两字词及单字挤占。比如想输入「抽根烟 / 再看看」,当「抽根烟」这个词没有权重时,默认候选项是「抽根 / 淹在 / 看看」。

词典的维护

有了这些大佬们维护的词典,就方便我们来组建适合自己的词典了。以上词典列表是我的选择,各位也可以有更多的选择。

由于各个词典来自不同的仓库,和不同的维护方式,比如 zhwiki.dict.yaml 是从 felixonmars/fcitx5-pinyin-zhwiki 来的,词典是放在 release 里面的;而 luna_pinyin.dict.yaml 则是从 rime/rime-luna-pinyin 来的,词典却是放在仓库的根目录下,其他的词典也是类似的情况。

这就导致每次更新词典的时候,需要手动去下载,然后放到 RIME 的配置文件夹下。非常繁琐。而且各个词典更新的时间和频率并不一致。而我有三台设备: macOS、Debian 以及 iOS 都在使用 RIME,于是手动维护词典成了一个繁琐的事情。

词典的自动化更新与获取

为了解决这个问题,我透过 GitHub Actions 来实现词典的自动化维护。GitHub Actions 每天自动运行一次,去检查我词典中词典维护者的各个仓库和 release 是否有更新,然后将更新的词典推送到我的仓库中,并最终将词典内容打包推到仓库的 release 中。

macOS

针对 macOS 设备的词典更新,我使用了 ShortCuts 来实现自动下载词典,并且将这个 ShortCuts 按钮放到桌面,只要点击即可更新词典。

ShortCuts 的脚本如下:

#!/bin/bash

# 获取当前日期(格式为 yyyyMMdd)
DATE=$(date +%Y%m%d)

# 构建 GitHub Release 下载链接
URL="https://api.bdim.moe/magic/https://github.com/bdim404/rime-dictionaries/releases/download/release-${DATE}/rime-dictionaries.tar.gz"

# 使用 curl 下载最新的 rime-dictionaries 文件
echo "正在下载 rime-dictionaries 文件..."
curl -L "$URL" -o rime-dictionaries.tar.gz

# 解压缩下载的 tar.gz 文件到 Rime 目录,注意!!请将 $username 更改为你的实际用户名。
echo "正在解压文件到 Rime 目录..."
tar -zxvf rime-dictionaries.tar.gz -C /Users/$username/Library/Rime

# 清理下载的 tar.gz 文件
rm rime-dictionaries.tar.gz

iOS

针对 iOS 的词典更新,我通过 macOS 更新时,使用 iCloud 的同步功能,将词典放到 iCloud Hamster 的路径下,即可完成更新。

如果你希望能够同步进行,那么 ShortCuts 脚本应该加上这几行:

# 复制字典文件到 iCloud 路径,注意!!请将 $username 更改为你的实际用户名。
cp /Users/$username/Library/Rime/cn_dicts/zhwiki.dict.yaml /Users/$username/Library/Mobile\ Documents/iCloud~dev~fuxiao~app~hamsterapp/Documents/RIME/Rime/zhwiki.dict.yaml

cp /Users/$username/Library/Rime/cn_dicts/tencent.dict.yaml /Users/$username/Library/Mobile\ Documents/iCloud~dev~fuxiao~app~hamsterapp/Documents/RIME/Rime/cn_dicts/tencent.dict.yaml

cp /Users/$username/Library/Rime/cn_dicts/base.dict.yaml /Users/$username/Library/Mobile\ Documents/iCloud~dev~fuxiao~app~hamsterapp/Documents/RIME/Rime/cn_dicts/base.dict.yaml

建议你根据自己的实际路径Hamster的实际配置来修改具体的路径以及所需要的词典。

Debian

针对 Debian 的词典更新,我也写了自动化脚本,脚本本身会安装 fcitx5-rime 以及相关库,但也可以单纯用作词典更新。

可以通过执行以下命令来使用:

curl -sSL https://api.bdim.moe/rime-deploy | bash

当然,你也可以将后续的词典更新编写为一个 systemd 服务,这样就可以实现每天自动更新词典。

#!/bin/bash

cd ~/.local/share/fcitx5

# 获取当前日期(格式为 yyyyMMdd)
DATE=$(date +%Y%m%d)

# 构建 GitHub Release 下载链接
URL="https://api.bdim.moe/magic/https://github.com/bdim404/rime-dictionaries/releases/download/release-${DATE}/rime-dictionaries.tar.gz"

# 使用 wget 下载最新的 rime-dictionaries 文件
echo "正在下载 rime-dictionaries 文件..."
wget -q --show-progress "$URL" -O rime-dictionaries.tar.gz

# 解压缩下载的 tar.gz 文件到 rime 目录
echo "正在解压文件到 rime 目录..."
tar -zxvf rime-dictionaries.tar.gz -C ~/.local/share/fcitx5/rime

# 清理下载的 tar.gz 文件
rm rime-dictionaries.tar.gz

echo "${DATE}字典更新完成!"

如果你和我的配置一样,那么你可以通过执行以下命令来一键部署:

curl -sSL https://api.bdim.moe/rime-update | bash

关于软件安装

个人词典仓库

以上拉取的词典文件均来自个人仓库,仓库地址为 bdim404/rime-dictionaries,非常欢迎你的 Star 和 Fork。构建属于你自己的词典。

参考链接