Matrix 首页推荐 

Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。

文章代表作者个人观点,少数派仅对标题和排版略作修改。


开源输入法 RIME,配合雾凇拼音等精心开发的输入方案,本身就已经满足日常需求——往往这些输入方案都配备包罗万象的常用词库。

然而,这些面向日常输入的词库,不可能涵盖方方面面,对于一些专门领域的词汇则未必有收录。例如,我在写一些游戏、动画番剧的文章时,常常会碰到角色名、地名、术语等没有被输入法收录的情况。因此,我常常免不了在候选字里一顿选,不觉间,输入效率大大降低。

幸运的是,RIME 的用户,可以站在 MediaWiki 百科志愿者们的肩膀上1这些百科的词条名,本身就是非常丰富、专业的语料库。

MediaWiki 是一个百科平台,由维基媒体基金会开发,维基百科就是基于它构建。萌娘百科Bilibili 游戏百科(BWiki)等知名平台也是建构在 MediaWiki 之上。你可以借助 MW2Fcitx(MediaWiki To Fcitx)这款工具,将这些百科的词条名做成 RIME 词库,大大拓展你的 RIME 输入体验。

背景:我是怎么发现 MW2Fcitx 的?

我的主力笔记本用的是 Arch Linux。在配置好 Arch Linux CN 源后,我想安装 RIME 输入法,在 Pacman 中搜索。这时,搜索结果中好像出现了什么神奇的东西:

$ pacman -Ss fcitx rime
...
archlinuxcn/fcitx5-pinyin-moegirl-rime 20220218-1
    Fcitx 5 Pinyin Dictionary from zh.moegirl.org.cn
archlinuxcn/fcitx5-pinyin-zhwiki-rime 20210120-1
    Fcitx 5 Pinyin Dictionary from zh.wikipedia.org for rime
...

好家伙,它们是专为 RIME 打造的词库,分别采撷自萌娘百科和维基百科。百科平台的条目本身是个宝藏语料库,添加它们可以大大提升输入体验,不再苦苦一个字一个字地去拼、去凑。尤其是萌娘百科的词库,对使用中州韵的ACG爱好者来说,更是天大的福音,从此再也不用担心打不出番剧名、角色名了!

制作这些词库,显然用不着一个个去翻百科。它们都使用 MW2Fcitx 生成。

MW2Fcitx 能够调用 MediaWiki 的 API,从基于 MediaWiki 的百科网站中获取所有的条目标题,将它们汇编成各类输入法可用的词库。像维基百科、萌娘百科都是基于 MediaWiki 搭建的,MW2Fcitx 自然支持它们。

安装 MW2Fcitx

MW2Fcitx 使用 Python 开发。如果你的电脑没有安装 Python,可以参考菜鸟教程的文档

注意:

在Windows下,你只能使用 Python 的官方版本

已知,Msys2 的 Python 无法正确安装 MW2Fcitx 的依赖项,安装时会出错;Scoop 安装的 Python 不带 Pip 工具。

在 Windows、macOS 与 Linux 发行版(除 Arch Linux)中,借助pip即可轻松安装

# 在Windows平台上(请先确保你正确安装了官方版Python)
py -m pip install mw2fcitx

# 在其他平台上
pip install mw2fcitx

它会安装一个脚本程序mw2fcitx,pip 会将它放在正确的位置:

  • 在 Windows 下,pip会把mw2fcitx启动脚本安装到 Python 所在目录里。
  • 在 Linux 中则默认安装到~/.local/bin,你需要手动将该目录加入PATH中。做法是,打开~/.profile(若无该文件则请创建),然后加入代码:export PATH=$PATH:/home/<你的用户名>/.local/bin

正确的安装日志类似于下面这样:

Collecting mw2fcitx
  Using cached mw2fcitx-0.13.0-py3-none-any.whl.metadata (3.9 kB)
Collecting OpenCC>=1.1.1.post1 (from mw2fcitx)
  Downloading OpenCC-1.1.7-cp312-cp312-win_amd64.whl.metadata (12 kB)
Collecting pypinyin>=0.38.1 (from mw2fcitx)
  Using cached pypinyin-0.51.0-py2.py3-none-any.whl.metadata (12 kB)
Downloading mw2fcitx-0.13.0-py3-none-any.whl (14 kB)
Downloading OpenCC-1.1.7-cp312-cp312-win_amd64.whl (716 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 716.5/716.5 kB 1.8 MB/s eta 0:00:00
Using cached pypinyin-0.51.0-py2.py3-none-any.whl (1.4 MB)
Installing collected packages: OpenCC, pypinyin, mw2fcitx
Successfully installed OpenCC-1.1.7 mw2fcitx-0.13.0 pypinyin-0.51.0

[notice] A new release of pip is available: 24.0 -> 24.1.1
[notice] To update, run: C:\Users\AnClark\AppData\Local\Programs\Python\Python312\python.exe -m pip install --upgrade pip

对于 Arch Linux,由于系统限制,无法直接用 pip 安装。你可以使用我制作的 PKGBUILD 来构建、安装 MW2Fcitx 软件包。操作步骤如下:

# 安装依赖项
sudo pacman -Syu
sudo pacman -S python-hatchling pypinyin
git clone https://github.com/AnClark/mw2fcitx-arch-PKGBUILD

# 构建并安装MW2Fcitx软件包
cd mw2fcitx-arch-PKGBUILD
makepkg
sudo pacman -U python-mw2fcitx-3.10-1-any.pkg.tar.zst

寻找支持的 MediaWiki 站点

要想使用 MW2Fcitx,你首先需要找到一款使用 MediaWiki 搭建的百科平台,然后再找到该平台的 API 地址。

MW2Fcitx 通过调用 MediaWiki 的 API 来获取词条列表,API 调用的入口为站点上的一个 PHP 文件——api.php。通常绝大部分 MediaWiki 站点的 api.php 位于站点根目录(如中文维基百科)。同时,也存在特殊的例子:

  • 中文维基百科,API 地址为https://zh.m.wikipedia.org/w/api.php
  • BWiki,它由多个子百科组成,每个子百科都是独立的,因此 api.php 位于相应子百科站点的根目录。

一些百科网站的 MediaWiki API 路径如下表:

网站API地址
中文维基百科https://zh.wikipedia.org/api.php
萌娘百科https://zh.moegirl.org.cn/api.php
BWiki——明日方舟https://wiki.biligame.com/arknights/api.php
BWiki——原神https://wiki.biligame.com/ys/api.php
BWiki——崩坏星穹铁道https://wiki.biligame.com/sr/api.php
BWiki——赛马娘https://wiki.biligame.com/umamusume/api.php
神奇宝贝百科https://wiki.52poke.com/api.php

其他站点的 API 路径可以根据上面的例子推出。

通过直接在浏览器打开该路径的方法,你也可以判断一个站点是否为 MediaWiki 站点。如果是,则打开的网页将会是帮助文档,如下图所示:

若能显示这个页面,那么这个百科就是由 MediaWiki 构建的。

编写配置文件

MW2Fcitx 需要配置文件来工作。配置文件名为config.py,它将用于指定 MW2Fcitx 如何获取并生成词库。

首先,创建一个目录,作为 MW2Fcitx 的工作目录。

在工作目录下,创建一个文件config.py,填入下面的内容。请你根据文件中的中文注释,修改相应的字段。注意这些字段是 Python 字符串格式的。

# By default we assume the configuration is located at a variable
#     called "exports".
# You can change this with `-n any_name` in the CLI.

from mw2fcitx.tweaks.moegirl import tweaks

exports = {
    # Source configurations.
    "source": {
        # MediaWiki api.php path, if to fetch titles from online.
        # 【⬇️api_path这一项,指定百科网站的api.php⬇️】
        "api_path": "https://zh.m.wikipedia.org/w/api.php",
        # Title file path, if to fetch titles from local file. (optional)
        # Only works if api_path is absent.
        # 【⬇️file_path这一项,指定用于暂存获取内容的文件名⬇️】
        "file_path": "titles.txt",
        "kwargs": {
            # Title number limit for online fetching. (optional)
            # Only works if api_path is provided.
            #"title_limit": 120,
            # Title list export path. (optional)
            # 【⬇️output这一项是可选的,指定词条列表的输出路径。⬇️】
            #"output": "titles.txt"
        }
    },
    # Tweaks configurations as an list.
    # Every tweak function accepts a list of titles and return
    #     a list of title.
    "tweaks":
        tweaks,
    # Converter configurations.
    "converter": {
        # opencc is a built-in converter.
        # For custom converter functions, just give the function itself.
        "use": "opencc",
        "kwargs": {}
    },
    # Generator configurations.
    "generator": [{
        # rime is a built-in generator.
        # For custom generator functions, just give the function itself.
        # 【⬇️MW2Fcitx也可以为其他输入法生成词库。默认为RIME生成⬇️】
        "use": "rime",
        "kwargs": {
            # Destination dictionary filename. (optional)
            # 【⬇️output这一项,指定输出的词库文件名,建议以YAML为扩展名】
            "output": "wikipedia.dict.yaml"
        }
    }]
}

特别注意以下字段:

  • api_path,填写 MediaWiki 网站的 API 路径,通常指向站点的api.php找到百科平台的API路径后,请记得替换该字段。
  • generator/kwargs/output,是输出词库的文件名。建议以.dict.yaml为扩展名,因为RIME似乎会优先识别这个扩展名的文件。
  • source/kwargs/output,是输出词条列表的文件名,这个参数是可选的。默认为「titles.txt」

注意:Windows 在输出词条列表文件时会发生异常,因此笔者在上面的例子中,把"output": "titles.txt"这一行给注释掉了。

开始生成词库

配置文件编写完成后,我们就可以着手生成词库了。

在工作目录下,打开命令行,然后运行 MW2Fcitx:

# 直接运行,不带参数
mw2fcitx

稍等片刻,MW2Fcitx 就会自动从百科网站获取词条名称列表,然后经过一系列处理流程,生成 RIME 词库。

正确的执行日志就像以下这样(节选):

2024-06-30 17:20:01,969 [DEBUG] Fetching titles from https://somewiki.com/wiki/api.php
2024-06-30 17:20:02,280 [DEBUG] Got 10 pages
.....
2024-06-30 17:20:23,288 [DEBUG] Got 38452 pages
2024-06-30 17:20:23,288 [INFO] Finished.
2024-06-30 17:20:23,289 [DEBUG] 38452 title(s) imported.
2024-06-30 17:20:23,291 [DEBUG] 1 title(s) imported.
2024-06-30 17:20:23,292 [DEBUG] Running 7 pipelines
2024-06-30 17:20:23,292 [DEBUG] Running pipeline 1/7 (cb')
......
2024-06-30 17:20:23,835 [DEBUG] Running pipeline 7/7 (tweak_normalize')
2024-06-30 17:20:23,848 [DEBUG] Deduplicating 119528 items
2024-06-30 17:20:23,856 [DEBUG] Deduplication completed. 37118 items left.
2024-06-30 17:20:23,857 [DEBUG] Exporting 37118 words with OpenCC
2024-06-30 17:20:24,162 [DEBUG] 1000 converted
......
2024-06-30 17:20:24,687 [DEBUG] 7724 converted
2024-06-30 17:20:24,712 [INFO] Dictionary generated.

生成的词库位于工作目录下,文件名在配置文件中指定,例如wikipedia.dict.yamlGenshinImpact.dict.yaml

安装词库

词库生成后,我们就可以把词库安装到系统中,以供 RIME 调用。不同平台有不同的安装方法。

1)Linux

生成的词库通常安装在 RIME 的资源目录下,位于/usr/share/rime-data/。接下来我们把刚生成的词库复制到该目录下:

# 例如:生成的词库名为wikipedia.dict.yaml
sudo cp wikipedia.dict.yaml /usr/share/rime-data/

在 Arch Linux 中安装的fcitx5-pinyin-moegirl-rimefcitx5-pinyin-zhwiki-rime这两个包,也会直接把词库安装在上述目录下。

2)Windows

Windows 版的 RIME 是小狼毫(Weasel),一般我们把生成的词库放在它的用户文件夹。该文件夹集中存放用户的配置。

右击任务栏上的小狼毫图标(显示为黑色方框里一个「中」字,或红色方框里一个「A」字母),选择用户文件夹」。

小狼毫的右键菜单。

此时会在资源管理器里打开用户文件夹。把 MW2Fcitx 生成的词库粘贴到这里,例如我从 BWiki 获取的原神词库(取名为GenshinImpact.dict.yaml):

小狼毫用户文件夹。红框中的文件就是我刚刚添加的BWiki原神词库。

3)macOS

macOS 下的 RIME 适配为鼠须管(Squirrel)。它的配置方法与小狼毫类似,只是用户文件夹位于~/Library/Rime

由于笔者没有 macOS 的电脑,因此无法演示。你可以参照这篇教程里的思路。

挂载词库

词库安装完成之后,我们还需要修改 RIME 输入方案的配置文件,以挂载词库。需要注意的是,每套输入方案选用的词库是独立的,这就意味着若你有多套方案,那么想给几套输入方案挂载词库,就要修改几套输入方案的配置文件

修改配置文件需要在用户文件夹中进行2

0)不同平台的用户文件夹目录

  • Fcitx4:~/.config/fcitx/rime/
  • Fcitx5:~/.local/share/fcitx/rime/
  • 小狼毫、鼠须管:请参照上一章。

1)RIME 自带方案(以朙月拼音为例)

  • 第一步,新建自定义词典文件。在用户文件夹目录中,新建luna_pinyin.mydict.dict.yamlmydict部分可任取),内容如下:
---
name: luna_pinyin.mydict    # 必须与文件名的相应部分保持一致
version: "1.0"
sort: by_weight    # 默认以词频排序
use_preset_vocabulary: true
# 此处为朙月拼音载入的词库列表
import_tables:
  - luna_pinyin      # 朙月拼音基本词库
  - moegirl          # 萌娘百科(由fcitx5-pinyin-moegirl-rime提供)
  - zhwiki           # 中文维基百科(由fcitx5-pinyin-zhwiki-rime提供)
  - GenshinImpact    # 在教程上文中生成的词库
---

注意:必须保留 YAML 正文前后的各 3 个横杠,这是词库的固定语法。

  • 第二步,新建自定义拼音方案文件。在 RIME 中,用户修改拼音方案并不是直接修改源文件,而是以「打补丁」的形式进行。在配置文件目录中,新建luna_pinyin_simp.custom.yaml,内容如下:
# luna_pinyin_simp.custom.yaml
patch:
# 指定自定义词库,字段值就是第一步中"name"字段的内容
  "translator/dictionary": luna_pinyin.mydict
  • 第三步,重新部署。右键点击系统托盘的 RIME 图标,选择「重新部署」,稍等片刻即可使用。

2)第三方拼音方案(以雾凇拼音为例)

  • 第一步:新建/打开配置文件。在用户文件夹目录中,打开rime_ice.dict.yaml。如果你是在 Arch Linux 发行版中安装雾凇拼音,那么用户文件夹目录里是没有该文件的,你需要从/usr/share/rime-data/中复制一份过来。
  • 第二步:修改配置文件。找到import_tables字段,在文件注释「建议把扩展词库放到下面...」3下方加入我们的词库。如下所示(下面为该文件的节选):
# Rime dictionary
# encoding: utf-8

---
name: rime_ice
version: "2023-11-13"
import_tables:
  - cn_dicts/8105     # 字表
  # - cn_dicts/41448  # 大字表(按需启用)
  - cn_dicts/base     # 基础词库
  - cn_dicts/ext      # 扩展词库
  - cn_dicts/tencent  # 腾讯词向量(大词库,部署时间较长)
  - cn_dicts/others   # 一些杂项

  # 建议把扩展词库放到下面,有重复词条时,最上面的权重生效
  # - cn_dicts/mydict
  # 【⬇️在下面添加你的词库。注意每一行前面有两个空格缩进。⬇️】
  - GenshinImpact     # 在教程上文中生成的词库
...

# 以下部分省略。
  • 第三步,重新部署。右键点击系统托盘的 RIME 图标,选择「重新部署」,稍等片刻即可使用。

友情提示:如果加载了中文维基百科(rime-pinyin-zhwiki)等大容量的词库,那么重新部署的过程会比较长。请耐心等待。

添加词库后的效果

最后,笔者给大家演示添加词库前后输入体验的对比。

我的测试环境是 Windows 11,安装小狼毫,启用雾凇拼音输入方案。添加的词库是 BWiki 原神词库。

添加前的输入效果如下,可见原神的一些词汇没有收录4,例如:

从上往下:枫丹、尘歌壶、芙宁娜、行秋、璃月。

添加词库后,上面的原神词汇都已经收录。笔者自己在做测试的时候,几乎感觉不到词库的完善,直到顺畅输入这些词汇后才反应过来(确信):

添加词库后,上面的原神词汇都出现在了候选列表中。

写在最后

对于专门性强的词汇,尤其是游戏、动漫相关的词汇,RIME 的词库未必有收录。幸运的是,热爱相关领域的志愿者们,一直在各个基于 MediaWiki 的平台中做出贡献,他们创建的词条名称就是非常专业和宝贵的语料资源。

运用 MW2Fcitx 来获取这些百科的词条名,制成 RIME 词库并加载,就可以极大地充实我们的词库,满足这些专门领域的输入需求。从此,在撰写文章,尤其是相关领域的文章时,你再也不用一个个地找候选字来造词,想要的词汇都能信手拈来。你的 RIME 输入体验,从现在起,如虎添翼。

> 关注 少数派小红书,感受精彩数字生活 🍃

> 实用、好用的 正版软件,少数派为你呈现 🚀