Skip to content

About

A typo correction plugin for librime based on input string features.

Resources

Stars

4 stars

Watchers

0 watching

Forks

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

librime-typo 纠错插件

librime-typo 是一款专为 Rime 输入法设计的轻量级、低侵入式纠错插件。他依赖预设数据的键值对来对编码纠错,能够识别用户的输入错误,并在保持原生输入体验的同时,提供精准的纠错候选。


1. 核心特性

设计思路

  • 其实常规纠错本质上是构建一个错词库,但这样是冗余的,影响rime的性能;

  • 而采用拼写运算也只能实现单音节正确到错误的映射,设置的多了字典变大,寻路算法性能就会受到严重影响;

  • 像谷歌一样搞一套三位一体的模型>键盘空间矩阵>词库,显然对于rime来说是奢望。

  • 而我们这种设计,通过编码替换,我们既可以模拟错词库、又能能实现跨音节,又能适应全拼、双拼纠错的需求,且储存的数据量较小,最有意思的是,他完美适应了rime自己对自己的体验负责的逻辑,有耐心有毅力的朋友贡献他发现的纠错编码片段,有能力的朋友可以通过算法脚本批量获取可能的纠错编码。所以我认为是现阶段比较契合rime的一种方式,故开发此插件。

接力循环算法:

当命中第一个纠错的时候后续将基于纠错后的编码继续向后,保证了在句子中的持续纠错,也保证了我们在预设纠错编码中跨编码前缀是来自纠正后的编码,从而能稳定匹配。

dign xai lai 其中 nxai 不存在, gxai 存在, 因此用纠正后的 dingxai 末尾匹配 gxai

双模式判定

  • 弱判定(交错流):检测到轻微拼写失误时,编码小于3,且纠错key发生了跨音节,纠错词以第二位候选呈现,不干扰原生候选流,保留用户肌肉记忆。,例: xai > 相爱 小
  • 强判定(独占流):当检测到明显且长距离的拼写错误(长度 ≥4 或累计触发 ≥2 次纠错)时,自动接管候选流,提供纠错后的精准候选。

preedit空间映射

当发生强判定候选替换输入的时候,即便纠错,也能完美还原用户实际敲击的按键音节分布,参数:show_corrected_preedit: false(如 dignxailai 自动映射为 dign xai lai)

设为 true 则能按纠错后的编码显示 ding xia lai。

零侵入交互

纠错候选词自动继承原生词库的 comment 特效,外观与原生皮肤完美融合。


2. 部署与配置

2.1 方案配置 (schema.yaml)

  filters:
    # 其他
    - typo_filter
    - uniquifier

请在你的输入法方案文件中配置 typo 节点:

typo:
  tags: [abc]                   # 监听的标签,留空则自动跟随
  translator: translator        # 指定后端翻译器命名空间
  show_corrected_preedit: false # false: 显示原始错码(默认),true: 显示纠错后编码
  input_type: auto              
  # 预设:pinyin,zrm,flypy等待填充数据,auto自动检测模式,可以在拼写运算的地方设置一种标记,具有唯一性
  #让他与预设数据映射,也就是下面的markers节点就会被读取
  #这样配置可实现方案自动识别他是自然码还是全拼从而使用对应的预设数据。
  markers:                      # 自动检测标记规则
    "Ⅰ": "pinyin"
    "Ⅱ": "zrm"
  custom_file: ""               # 自定义纠错库文件名,设置后替换自带数据

2.2 纠错规则库 (.txt)

规则文件格式为制表符分隔 (TAB):正确码[TAB]错码

路径优先级:

User Data/typo_[custom_file].txt > Shared Data/typo/typo_[input_type].txt

热更新:修改文件后,点击 Rime 的“重新部署 (Deploy)”按钮即可生效。

示例内容:

ding	dign
#jei修正为jie
ajie	ajei
ijie	ijei
njie	njei
ojie	ojei
gjie	gjei
ejie	ejei
ujie	ujei
rjie	rjei
vjie	vjei

#刻意的保留构词前缀,通过脚本获取得到词库中词组结构
#跨音节能让其真正需要纠错的时候出现,避开了简拼引发的冲突。
  1. 未来技术演进路线图

为了追求极致的性能与交互体验,插件的开发计划将向以下深水区推进:

3.1 性能优化:二进制预编译字典

当前的 .txt 文本解析方式在纠错词量过万时存在内存开销。

演进方向:引入类似 Trie 树或 Double-Array Trie 的二进制存储格式。

预期收益:大幅压缩内存占用,将查询复杂度从 O(N) 降至 O(M)(M为错码长度),确保拦截判断在毫秒级内完成,彻底规避输入卡顿。

3.2 决策逻辑:置信度评分系统

解决 ce uo 与 ce ui 这类“音节边缘碰撞”带来的首选权衡问题。

判定依据:引入置信度评分。当原始输入对应的候选词属于“长尾(低频)”且与纠错词的语义距离过小时,插件主动“取缔”自动组合,强行提升纠错候选的顺位。

决策触发器:不仅依据长度(>=4),还将输入特征的合法性作为压制原生自动组合的权重依据。

3.3 测试矩阵:侵入性与稳定性验证

输入锁死测试:通过极端压力测试,验证插件在 Apply 循环中是否会因为句柄获取失败导致输入上下文锁死。尤其是在用户造词环境下。

边界细节验证:建立覆盖“音节边缘碰撞”、“全拼与缩写混合输入”及“Undo/Redo 行为一致性”的单元测试集。

度量指标:将插件引入的延迟增加量控制在 1ms 以内,并以用户手动选择“自动组合候选”的频率作为插件纠错权重调整的唯一优化基准。

设计哲学:代码应尽可能精简,交互应尽可能无感。此插件旨在弥补拼写失误,而非干扰表达。

About

A typo correction plugin for librime based on input string features.

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages