Replies: 1 comment
-
可以通过lua_filter来实现 —— 例如单字优先、词组在单字后,或者前多少候选项(比如一页的数量)里允许单字和词组混合,超过的部分所有词组都排到单字之后,应该都可以通过编程来实现。 我下面放了一个简单的单字完全先于词组的lua_filter的示例,可供参考 --[[ 在.schema方案文件的filters里声明要使用此lua_filter,注意filters是顺序执行的,需要一个合适排序
...
engine:
...
filters:
- ...
- lua_filter@char_first_cands_sort_filter #单字优先
- ...
]]--
-- rime.lua (在Rime用户配置文件夹下,与.schema方案文件放同一级,如果没有这个文件可以新建一个,然后把下面的内容复制进去)
function char_first_cands_sort_filter(cands) --声明了一个函数作为lua_filter,被调用时传递进来的参数是待过滤的候选项流,方案里@符后面调用函数名,两边名称要一致,不然会找不到和报错
local phrase_cands = {} --声明了一个空的表,用来存储不是单字的候选项
for cand in cands:iter() do --循环 遍历每一个候选项对象,注意其使用迭代器来遍历,
if utf8.len(cand.text) == 1 then --如果 ( 该候选项对像的文字属性的值(字符串),以utf-8方式计算字符串长度 ) 为1,则
yield(cand) --发送该候选项对象,filter的默认行为是将所有候选项滤除,需要将要保留的候选项发送至候选栏
else --否则,也就是长度非1
table.insert(phrase_cands, cand) --将该候选项塞入前面声明的
end --(注意符号类的大多都是长度1,但像破折号这种长度也可以不为1,总之如果遇到特殊情况可能需要额外判断处理)
end --结束对所有候选项的循环遍历,此时所有的单字已经进入候选栏,词组都在空表里
for i, cand in ipairs(phrase_cands) do --对词组所在的空表进行遍历,注意遍历方式为使用ipairs包装,遍历每一个候选项对象
yield(cand) --将词组候选项发送至候选栏
end --结束对词组表的遍历,此时应该所有候选项都发送至候选栏,且词组全都在单字之后
end --函数结束 |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
想一次把拼音输入、再挨个选单字时,会被几十页词库词语和自动组词轰炸
搜狗输入法有此功能
Beta Was this translation helpful? Give feedback.
All reactions