无须联网的多平台开源输入法框架:中州韵输入法引擎,小众而深度
本文最后更新于 2024年7月13日 上午
输入法作为人与设备的重要交互形式,直接影响着人们的数字生活。同时,输入法普遍需要连接网络,以便在云端词库中检索候选词并计算用户的喜好,但也不可避免地导致个人隐私的泄露。
也许有些人会认为,个人隐私已经在互联网上形同“裸奔”,再多泄露一下又如何?尤其是大数据当道,可能当你刚刚在搜索引擎上搜索养猫指南,下一秒电商平台可能就推荐猫粮给你。
但是,如果还包括广告呢?之前百度输入法就在灰度测试(后来被取消,哈哈):
哈哈,有一说一,这个很“百度”。本以为百度会是国内的Google,但是现在看,举例Google还是挺远。
所以,这里给愿意折腾的小伙伴推荐:Rime 输入法引擎。
基于rime输入法引擎开发的rime输入法客户端,对于爱折腾、有个性化输入法的人来说,可以是神器;当然,对于不爱折腾的人来说,或许就是噩梦😈。
PS: 你可以直接查看并使用基于rime输入法引擎的输入配置: 薄荷输入法。
中州韵输入法引擎
中州韵输入法引擎/ Rime Input Method Engine,取意历史上通行的中州韵,愿写就一部汇集音韵学智慧的输入法经典之作的意思。笔者我一般喜欢称作: Rime 输入法引擎。
为什么是输入法引擎呢? 其实输入法的典型工作流程大致如下:
- 获取和解释按键动作,每个按键包含键值、按键状态等信息。
- 生成和分析按键序列,形成编码串。有时某些按键并不直接产生编码字符,有时组成输入串的文字不是按键所对应的字符本身。
- 查字典,获取输入码对应的同码词列表,并进行合并和排序等操作。
- 根据需要进行进一步的词组和句子构建。
- 可能需要对结果进行预处理修改,如繁简转换等。
- 完成从输入码到文字的翻译,得到一组候选文字,这些文字将在输入法界面上展示。
- 用户确认后,文字显示在屏幕上,完成一次输入。
将这个过程中纯粹的逻辑部分用程序编写出来,就是输入法引擎。其中不包括:
- 实现编码到文字转换的字典数据(字典、OpenCC 等),也称为”码表“。
- 与操作系统、设备和输入目标程序进行交互的组件(客户端界面UI)。
- 展示输入法信息的界面(输入法候选样式)。
- 配置工具,例如自定义快捷键、切换输入模式、选择字体大小等(配置输入法的UI界面)。
所以,其实 rime 输入法引擎,本质就是输入法的核心,类似于汽车引擎里的发动机: 汽车动力的核心,但一辆汽车整体的用户体验,和它的关系不大。
Rime 输入法引擎的核心,使用C++编写,源代码是:librime(Github)
基于输入法的核心,实现客户端UI等功能产生的发行版本客户端:
- 鼠须管/Squirrel: macOS上的 rime 客户端;
- 小狼毫/Weasel: Windows上的 rime 客户端;
- 小企鹅输入法/Fcitx5 For Android: Android上的Fcitx5输入法框架,其 rime 插件可以实现 rime 客户端;
- 同文输入法/Trime: Android上的 rime 客户端,也是意难平的一个客户端,新手不建议使用同文入门;
- 仓输入法/Hamster: iOS上的 rime 客户端;
- iBus、Fcitx5: Linux上的输入法框架,均有相关的 rime 插件实现 rime 客户端效果。
可以看到,除去 Switch、Play Station 等平台无法适配,其实基本已经覆盖到所有主流平台。你可以在你日常使用的设备上,都使用同一个输入法引擎框架的派生产品。
最后,配合用户自己配置的词典和相关配置文件,就是完整的输入法了。
那么,为什么不温不火呢?
其实…… 就是这个用户配置上……
配置概要
上文已经提及了,它是一个输入法的引擎。 这个引擎如何解析配置,达到最后的输入上屏(文字输出)效果呢?答案是: 解析YAML(YAML Ain’t a Markup Language)配置。
YAML的配置,是十分高效的、扩展性很高的配置语言、文本,它实际就是一个清单,供程序读取。
举个例子: 如果把平时通勤比作程序,那么通勤使用的交通工具抽象为YAML配置,就可以是:
1 |
|
当然,前提是程序,也就是你的大脑可以识别这个清单。 哈哈😄
换作 rime ,引擎内就会读取 YAML 配置,读取特定内容,编译出输入法内容程序。比如: 你可以设定每个按键的输入、在中文模式下,输入/
可以选择/
或÷
。
甚至可以配合正则,实现特定的效果: 默认情况下,句号是会直接上屏的,但是我们输入网址的过程中,希望句号组合为网址的一部分,而不是把第一候选项上屏,在输入字母后输入句号,就可以使用正则:
1 |
|
recognizer
配置是rime配置引擎内的一个配置项,更多的配置项,可以参考:
1 |
|
举个例子,你想设置参与组合输入法的字母(默认情况下,只有[a-z]
的字母参与输入法的内容组合,直接输入[A-Z]
是直接上屏)。那么你可以这样设置:
1 |
|
或者,你想扩写方案的配置:
1 |
|
如果想重写半角时候和全角时候,特殊符号的内容呢?
1 |
|
到这里,你是不是还有点晕了? 甚至,有些人可能对YAML
格式还是不了解,无法理解什么时候应该空格,什么时候应该 Tab 。尽管YAML并非复杂的编程语言,但由于 rime 其配置项繁多且深度细致,对于普通用户而言,理解和掌握所有配置细节可能会是一项颇具挑战性的任务。
Rime 作为一个输入法框架,用户可以通过定制词库、修改engine
内的配置项,达到多语种的输入。除了一些你能想到的,比如:韩语、俄罗斯语;还可以实现意想不到的闽南语、南京话、上海话等输入:
感兴趣可以看看这个仓库: awesome-rime
这里推荐参考内容:
- Rime 官方定制指南: https://github.com/rime/home/wiki/CustomizationGuide
- 薄荷输入法配置指南: https://www.mintimate.cc/zh/
- 雾凇拼音定制指南: https://dvel.me/posts/rime-ice/
推荐新用户可以使用开源的配置模板进行rime的初始化,比如上面的薄荷输入法(一套 rime 开发模板,嘿嘿,作者碰巧就是我)、雾凇拼音(薄荷大量参考这个哦)。
多设备同步
相信大家一定有疑问,既然不能联网。是否有动态调配词库、多设备同步功能呢?
动态调配词库,当然是有的;至于多设备同步,有点复杂。门槛有点高。
Rime 客户端配置目录下的installation.yaml
文件会在第一次部署后会自动生成;在这里可以编辑当前设备的ID和同步目录,如:
1 |
|
你可以追加一个sync_dir
配置:
1 |
|
将所有平台的sync_dir
设定为同一个目录,比如: iCloud、Dropbox、OneDrive的目录。
1 |
|
这个时候,再次同步,那么会把Hamster
和MacbookPro-M2Max
的内部用户数据进行同步合并。差异化增量更新后的结果,就会同步到sysnc
内。
强大的Lua扩展
如果读者们有从事运维的小伙伴,可能对 Lua 很亲切。Lua 的设计目标是作为一种嵌入式脚本语言,提供简单、高效、可扩展的脚本编程能力,很多 Nginx 的插件、NeoVim 的扩展,都可以使用 Lua 进行实现。
Lua 提供了 C API、嵌入式解释器和数据交换功能,Rime 核心 librime ,作为 C++ 项目可以轻松集成 Lua 。配合 Lua ,可以进一步扩展输入法的功能。比如:人民币的大写转换、中国农历转换等。
但是…… 这也是门槛最高的地方了。如果说上述的词库,可能还可以无编程入门,那么Lua部分,确实需要你有一定的编程功底。而且,在需要编程功底的同时,你还需要知道 rime 预留了那些接口,可以去自定义。
也就是,在懂 Lua 语法的情况下,还需要查阅 librime 的源码~~
高扩展,双刃剑
或许有些人看到这里,还是无法理解如何配置 rime ,但是一定已经了解到 rime 的高扩展。其复杂程度,可以比肩现在的任何大厂输入法。
Rime 每个地方都可以配置, 这无疑是把“双刃剑”。我认为,有两个最大的问题:
- 无法形成可视化配置 UI : 虽然我认为输入法工具,UI 其实不是很重要;但是 rime 没有配置UI,无疑加剧了新用户的入门门槛。当是如此宏大的配置,是无法使用 UI 实现的。
- 社区教程资源强大,但教程分散: 其实这一点也可以把原因归为第一点,虽然配置项那么多,但是强大的开源社区,有大量 rime 的教程填补其上。可惜的是,大部分人是不愿意折腾的,在“快餐时代”下,很难有人愿意花时间研究输入法的配置。
Rime的扩展性实在太高了, 设置你调整客户端的输入样式、外观,都需要使用 YAML 配置:
1 |
|
当然,外观定制涉及的配置比较少,还可以使用图形化配置并“代码生成”:
如果是为了调整输入方式,你可以按自己的喜好微调输入法,定制功能。比如:使用反查拆字功能:
或者特定符号的输出(比如我就很喜欢这个分数输出):
那么可以调整的内容过多,图形化 UI 就无法实现这么精确的内容了。不过,其实 rime 本身的配置不难,毕竟大部分都是配置。
总归一句话: rime扩展性极高,以至于让一般用户难以上手,适合喜好折腾的人;即使你不会编程,也可以入门,但是一定需要有耐心,开拓输入法可能性的边界。
快速配置
最后,如果你对 rime 感兴趣,并且喜欢折腾。可以先试着使用薄荷输入法配置,作为初始化的模板,之后配合网上的教程指南,进行客制化操作。尤其是雾凇的指南和薄荷输入法的文档哦。
举个例子,如果你想在 Windows 上基于薄荷输入法快速配置全拼输入法(薄荷输入法内包含: 小鹤双拼、全拼和五笔),那么只需要在安装小狼毫后,下载薄荷输入法的配置并解压小狼毫配置目录内:
之后重新部署,即可使用薄荷输入法的功能(其实与其说薄荷输入法,其实是薄荷rime配置比较好…… 但是还是薄荷输入法顺口一些~)。
有机会,下次给大家介绍一下薄荷输入法吧~~
支持创作
书写文章不易,如果热心的小伙伴,想支持创作,可以加入我们的「爱发电」电圈(还可以解锁远程协助、好友位😃):
当然,也欢迎在B站或YouTube上关注我们:
更多: