本人的星空键道输入法中有不少设计让人不甚满意,今天调试了半天,作个笔记方便以后再需要查看。

Rime简介

在使用Rime输入法之前,我曾经短暂地使用过多多输入法后端的星空键道,但是在一次事故中多多输入法的词库损坏,由于不知道具体格式我没能抢救回我的用户词,因而转向纯文本的Rime后端。Rime是一个拓展性极强的输入法引擎,不仅对于中文输入的常见流程有原生支持和模块坏管理,还可以利用配置文档和lua脚本修改具体的运行逻辑,并且加上前端后可以支持多个系统。当然,Rime本身并不算一个相当智能的输入法,但这对于星空键道这种顶功输入法来说不是问题。

一个输入法所做的任务,无非是接受键盘输入,转换为文字后输出。由于很多输入法有重码的可能,输入法还需要展示候选项,并对这些候选项作恰当的注释。

在Rime中,一串按键处理的过程分为几步:

  1. processor负责处理键盘输入,将键盘输入转换为内部编码,或是处理上屏、选词等操作。
  2. segmentor将输入的内容打上标签,用以在后续分别处理。
  3. translator将特定的标签下的一段内部编码转换为文本。
  4. filter转换完后对文本进行最后的处理,包括简繁转换、加注释、排序等。

可以看到,第三个环节翻译器(translator)是输入法的核心,前两个环节都可以看作是从翻译器中抽象出的组件。对于中文输入,Rime内置了两种常见的翻译器:

  • 基于字表的script_translator,在输入法方案中指定了用拉丁字母(或者其他键盘上能直接输入的字符)序列表示汉字的方法(罗马字),在输入的时候将输入的一串按键分析为若干个音节,分别对应一系列汉字,再用基于自然语言处理的方法选择最合适的汉字。
  • 基于词表的table_translator,在输入法方案中直接指定了所有可输入的词语和字符对应的拉丁字母序列(码表),在输入时直接查找输入的按键对应的文本并输出。

Rime中为这几步所实现的常见模块都内置了实现,需要在配置文件中对应地声明。不过一般用Rime实现一个输入法方案,除了翻译器需要特意修改外,其他的方案基本上可以保持复制粘贴现成的样例。

关于鼠须管

鼠须管(Weasel)是Rime在Windows的官方前端,这个项目最新的版本仍停留在2019年。目前由fxliang维护着一个fork,支持彩色字体等特性,但由于不名原因输入延迟极高,键道输入时达到了体感可见的0.1s量级(0.14.3_dev_0.98),而官方的0.14.3体感没有延迟。

链接