🐭 基本介绍

Rime是一个自由的输入法引擎,或框架,它在不同的平台有不同的发行版

⚙️ Rime的工作原理

工作流程

下面来看一下Rime输入法的工作流程,来更好的理解这个框架:

按键消息→后台「服务」→分配给对应的「会话」→由「方案选单」或「输入引擎」处理……

通过「方案选单」,Rime可以在不同的会话里选用不同的输入方案(e.g.雾凇全拼、小鹤双拼…),然后将相应的输入方案载入输入引擎,下面是输入引擎的工作流程:

加载输入方案、预备功能组件;各就位之后就进入处理按键消息、处理按键消息……的循环

处理按键消息并产生候选词的工作,就由下面四类组件来完成。

四类组件

响应各种按键、产生各类结果的工作,由四类不同的功能组件分担,这些组件被定义在输入方案的scheme文件中,如rime的默认方案luna,代码片段如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

luna_pinyin.schema.yaml

engine: # 输入引擎标签,下面在引擎上挂载所需组件 processors: # 一、这批组件处理各类按键消息 - ascii_composer # ※ 处理英文模式及中英文切换 - recognizer # ※ 与 matcher 搭配,处理符合特定规则的输入码,如网址、反查等 - key_binder # ※ 在特定条件下将按键绑定到其他按键,如重定义逗号、句号为候选翻页键 - speller # ※ 拼写处理器,接受字符按键,编辑输入码 - punctuator # ※ 断句处理器,将单个字符按键直接映射为文字符号 - selector # ※ 选字处理器,处理数字选字键、上、下候选定位、换页键 - navigator # ※ 处理输入栏内的光标移动键 - express_editor # ※ 编辑器,处理空格、回车上屏、回退键等 segmentors: # 二、这批组件识别不同内容类型,将输入码分段(e.g.分开123 abc , .) - ascii_segmentor # ※ 标识英文段落 - matcher # ※ 标识符合特定规则的段落,如网址、反查等 - abc_segmentor # ※ 标识常规的文字段落 - punct_segmentor # ※ 标识断句 - fallback_segmentor # ※ 回退标识未标记的段落 translators: # 三、这批组件翻译特定类型的编码段为一组候选文字 - echo_translator # ※ 没有其他候选字时,直接显示输入码 - punct_translator # ※ 转换标点符号 - script_translator # ※ 脚本翻译器,用于拼音等基于音节表的输入方案 - reverse_lookup_translator # ※ 反查翻译器,用另一种编码方案查码 filters: # 四、这批组件过滤翻译的结果 - simplifier # ※ 繁简转换 - uniquifier # ※ 过滤重复的候选字,有可能来自繁简转换

processors

Segmentors

Translators

Filters

「Filter」即过滤器,它会在当需要在界面上显示一页候选项时,从前面步骤已经收集到的翻译结果中进行筛选。然后从最后一个代码段的翻译结果集开始,一直向前挑选,直到满足设定的最大候选项数(页数限制)。

每从结果集选出一条字词,会经过一组「filters」过滤,多个「filter」串行工作,最终产出的结果哦进入候选序列

filter可以:

一些和输入法有关的名词

如你所见,这个自由输入法比起同类型的其他——多半是大厂开发的免费输入法相比,配置项繁杂许多,且这些配置没有任何GUI界面可供调参,而是需要你打开其配置文件,通过纯文本的形式修改,一旦填写不符合规范,重新部署的时候就会报错,“列之间须用缩进分开,列之内须用空格分开”,而你还必须阅读其冗长的文档,去搞清楚每个配置文件乃至每个配置项的功用,才能得心应手的调参…若不满足于挪用别人调试好的输入法方案,想要创造自己的方案,则要花更多时间去研究Rime的文档,而其文档在很多方面的描述令人困惑,要花些时间来理解。

我花了一个下午的时间去看关于Rime的各种博客和wiki、调整雾凇拼音的各项配置,最终得到了一个相对可用性比较高的效果,但还是不及我之前使用的微信输入法提供的免费且原生的体验,主要体现在Rime翻页候选词时,没有下拉菜单来展示更多页的候选词,其次还是微信输入法提供了更多好用的功能,而且都可以在一个简约的GUI界面上进行调整…

微信输入法和Rime都是免费的,但前者是专有软件,后者是自由软件;然而一个免费的专有软件如何为公司创造价值?恐怕答案只有获取用户信息来做个性化推荐和AI训练语料之类,资本不逐利就不是资本,虽然微信输入法推出了离线模式,不过大概多数人都会用隐私换便利,毕竟只要保持在线模式,就可以使用微信输入法免费提供的ai问答功能和多设备同步剪贴板/常用语,还可以获取实时的网络热门词库,这样不管网络上有哪些时髦的热词热梗,你都能第一时间准确打出来,而不用通过多次的输入来创建自造词并提升它的权重,听起来很美好,并且需要你支付的也只是不值一提的个人隐私罢了。

有人说「自由」软件才是真正的「免费」软件,虽然free一词在英文中有这二者的双重含义,但通常用libre一词来形容「自由」,「自由」软件不是简单的开放源代码的软件,根据自由软件基金会对其的定义,「自由」软件是一类可以不受限制地自由使用、复制、研究、修改和分发的,尊重用户自由的软件。这方面的不受限制正是「自由」软件最重要的本质。但是「自由」难道就没有代价吗?Rime的输入法方案配置就尽显「自由」,只要你的xxx.scheme.yaml中的配置项符合Rime文档的要求,那就可以随意配置,词库也是自由的,当你输入zy,首选候选词可以是自由也可以是专有,一切全看用户配置,如果想自己开发一个基于Rime的商业软件,也是允许的,例如ios平台上的仓颉输入法,它是有内购的。但这一切的前提是你需要花费阅读文档、编辑配置文件、配置词库的时间,而假使你选择用隐私去换国内大厂免费提供的输入法,上述的时间都可以省下来,如果你愿意,还可以轻松换上精美的皮肤,而不像Rime要自己通过代码制作。如果说「免费」的代价是隐式的分摊给用户的,那么「自由」的代价则直接由开发者承担,并通过价值差映射到用户。对于自由软件,用户有付费的自由,即使选择向开发者付费,也只是通过捐赠的形式,人的自私是写在基因里的,这就是为什么视频网站上的一众知识类视频的收藏数普遍比点赞数要高,大部分人只顾自己,这也是为什么自由软件永久无法流行起来,一个无法盈利的软件,开发者是没有动力去完善它的,而其门槛也注定很高,这种早期的软件分享的形式,其传播范围也只有程序员群体,因此注定是小众的,Rime得以为继的一个主要原因是它只是一个输入法框架,它只提供一个默认的输入法方案,并且称不上好用,最终还是需要用户基于此框架建立自己的输入法方案,所幸已经有了雾凇输入法这样的优秀全拼方案,其他人需要做的也只有安装对应平台的Rime,并将雾凇输入法的配置文件拖到自己的Rime用户配置里,然而要想媲美大厂输入法提供的体验还有些路要走,这也就是所谓的价值差,自由软件永远无法提供比商业化的私有软件更高的价值,这里的价值是这样计算的:受益人数、人均受益时间、单位时间价值,这个价值公式来自李沐,可以用来计算每件事的价值,即使并不具体,但是可以很轻易地判断二者之间的价值孰高孰低,我现在正在使用Rime,不过除隐私以外,我并不觉得它给我提供了比微信输入法更高的价值,在使用Rime之前,我就知道这是必然的,但我为什么还要使用它?是为了隐私吗?对于我来说不是的,虽然我很重视隐私,但这里有一个平衡,即绝对的隐私和互联网带来的便利是互斥的,前者最极端的情况是:注销所有的社交平台账号,用tor、librewolf这样极端注重隐私的浏览器,不使用任何联网的私有软件,etc… 可以想见这样的生活有多麻烦,所以对于我来说牺牲一小部分利益,来换取一定程度的便利,是划算的买卖。

天平一端高一端就低,不论倾向于哪边,在最理想的情况下,隐私和便利是等价交换的,也就是说所牺牲的隐私都会以相应的价值转化为便利,如果真是那样倒也不算太亏,然而大多数情况下,天平「便利」的那一端都被偷偷塞了吸铁石,你需要用更多的隐私来换取原本应该属于你的那部分便利,在这种情况下应该如何抉择?于是我选择了Rime。