首页
/ Rime-ice 实现中英混合词汇自动造词的技术方案

Rime-ice 实现中英混合词汇自动造词的技术方案

2025-05-21 17:56:00作者:余洋婵Anita

背景介绍

Rime输入法引擎以其高度可定制性著称,而rime-ice作为其优秀配置方案之一,为用户提供了开箱即用的输入体验。在实际使用中,用户经常需要输入中英混合的词汇(如"老ass"、"VIP会员"等),但默认配置下rime-ice无法自动将这些混合词汇加入用户词典。本文将详细介绍如何通过Lua脚本扩展实现这一功能。

技术原理

传统Rime输入法处理中英混合输入时存在两个主要限制:

  1. 中文方案通常不会将包含字母的词汇加入用户词典
  2. 英文方案默认关闭用户词典功能

解决方案的核心思路是:

  1. 利用Lua脚本监听用户提交的文本
  2. 检测文本中是否包含中英混合内容
  3. 将符合条件的词汇写入英文方案的用户词典
  4. 通过自定义编码实现混合词汇的快速输入

实现步骤

1. 准备Lua脚本

创建cn_en_filter.lua文件,内容如下:

-- cn_en_filter.lua
-- 将上屏的中英混合词汇写入词典
-- 英文方案(主方案、副方案)的用户词典需要打开

local F = {}

function F.init( env )
    local config = env.engine.schema.config
    local schema = config:get_string( 'en_schema' ) or 'melt_eng'
    F.en_dict = Memory( env.engine, Schema( schema ) )

    if F.en_dict then
        env.commit_notifier = env.engine.context.commit_notifier:connect(
                                  function( ctx )
                local commit_text = ctx:get_commit_text()
                if utf8.len( commit_text ) ~= #commit_text and commit_text:find( '%a' ) then
                    local commit_text_en = commit_text:match( '%a+' )
                    local commit_code = ctx.input
                    if commit_code:find( commit_text_en ) then
                        F.update_dict_entry( commit_text, ctx.input )
                    end
                else
                    return
                end
            end
                               )
    end
end

function F.update_dict_entry( text, code )
    if #text == 0 then return end
    local e = DictEntry()
    e.text = text
    e.custom_code = code .. ' '
    F.en_dict:update_userdict( e, 1, '' )
end

function F.func( input, env ) for cand in input:iter() do yield( cand ) end end

function F.fina( env ) if F.en_dict then env.commit_notifier:disconnect() end end

return F

2. 修改配置文件

在rime-ice的配置文件中进行以下调整:

  1. 确保英文方案的用户词典功能已开启
  2. 在中文方案的过滤器中添加Lua过滤器

示例配置片段:

# 在中文方案的配置中
filters:
    - lua_filter@*cn_en_filter
    - uniquifier
en_schema: melt_eng

# 在英文方案的配置中
melt_eng/+:
  enable_user_dict: true

3. 部署应用

完成配置修改后,重新部署Rime输入法即可生效。

功能特点

  1. 智能检测:自动识别包含字母的中英混合词汇
  2. 编码保留:记录用户输入时的完整编码,便于后续输入
  3. 无缝集成:与现有输入流程完美融合,不影响其他功能
  4. 性能优化:仅在检测到混合词汇时才进行词典更新操作

使用示例

以输入"老ass"为例:

  1. 首次输入时通过全拼或双拼逐字选择
  2. 脚本自动将"老ass"加入用户词典,并记录输入编码(如双拼的"lc ass")
  3. 后续输入时可直接通过编码"lc ass"快速输入该词汇

注意事项

  1. 确保英文方案的用户词典功能已开启
  2. 脚本需要放置在正确的Lua脚本目录下
  3. 不同Rime版本可能需要微调脚本实现
  4. 大量混合词汇可能会增加用户词典体积

总结

通过这个Lua脚本扩展,rime-ice实现了中英混合词汇的自动学习功能,大大提升了输入效率。这种方案展示了Rime输入法强大的可扩展性,用户可以根据自身需求灵活定制输入体验。对于经常需要输入专业术语、网络用语等混合内容的用户来说,这一功能尤为重要。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
docsdocs
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
153
1.98 K
kernelkernel
deepin linux kernel
C
22
6
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
503
39
communitycommunity
本项目是CANN开源社区的核心管理仓库,包含社区的治理章程、治理组织、通用操作指引及流程规范等基础信息
331
10
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
146
191
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
992
395
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
8
0
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
193
277
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
938
554
金融AI编程实战金融AI编程实战
为非计算机科班出身 (例如财经类高校金融学院) 同学量身定制,新手友好,让学生以亲身实践开源开发的方式,学会使用计算机自动化自己的科研/创新工作。案例以量化投资为主线,涉及 Bash、Python、SQL、BI、AI 等全技术栈,培养面向未来的数智化人才 (如数据工程师、数据分析师、数据科学家、数据决策者、量化投资人)。
Python
75
70