rime-ice
rime-ice copied to clipboard
如何降低emoji的权重
emoji临时关闭以及长期关闭我都看到了方法。emoji很好用,我日常会用到,不想关闭,目前emoji在候选中是第二位,目前需求只是想降低emoji的权重,让它在后面显示,这样怎么改?
某个编码下,降低权重可以用 pin lua;
整体降低权重可能要另外写一个 lua 去排序。
emoji在候选中是第二位
在没有其他 lua 的影响下,emoji 是在对应中文的后面而不是候选第二位。
对的,是在对应中文后面。那这个现在最好的解决方法就是关闭,没办法其他修改的办法了吗?
你想改成什么样子的?
你想改成什么样子的?
现在的情况是输入某个关键字词,有emoji的话,一般后面候选就对应表情。 我期望的是输入某个关键字词,emoji可以排在候选最后面,在候选栏能看到即可。
好奇怪的需求,如果排在后面几页,要翻页好几次才能看到,不如用快捷键直接关掉,用的时候再开。
能想到的场景就是鼠须管和移动平台的弹性盒视图下,好找一点。
硬要实现:
- 写 lua filter 降权。
- 或者将 emoji 改为一个 translator 挂载,统一设置一个比主翻译器低的权重。
参考long_word_filter.lua 这个是遇到长词 提到前面 你可以改成遇到是emoji的时候 给它挪到后面
@Chengxcy 你要的效果不是这样的,
参考: reduce_emoji.lua
对的,这样看着很不错
@Chengxcy 你要的效果不是这样的,
参考: reduce_emoji.lua
对的,这样看着很不错
在您的指导下基本上实现了我的需求,感谢。
@Chengxcy 不客气,我也是有类似需求,看到你的想法,就尝试实现一下。抛砖引玉而已,主要还是你提出了一个很棒的想法。
@Chengxcy 你要的效果是不是这样的,
参考: reduce_emoji.lua
大佬,请问这个脚本是属于filter脚本吗?
我在文件rime.lua添加一行 reduce_emoji = require("reduce_emoji")
然后在方案文件rime_ice.schema.yaml里面的engine/filters下面添加一行- lua_filter@reduce_emoji
最后把reduce_emoji.lua文件放到lua文件下下面
重新部署小狼毫以后,直接不显示候选字了😭
@Chengxcy 你要的效果是不是这样的,
参考: reduce_emoji.lua
大佬,请问这个脚本是属于filter脚本吗? 我在文件rime.lua添加一行
reduce_emoji = require("reduce_emoji")
然后在方案文件rime_ice.schema.yaml里面的engine/filters下面添加一行- lua_filter@reduce_emoji
最后把reduce_emoji.lua文件放到lua文件下下面 重新部署小狼毫以后,直接不显示候选字了😭
是这位boomker大佬写的,无私奉献,感谢,我只是使用者。将大佬仓库里的该reduce_emoji.lua文件放到自己的lua文件夹里,在rime.lua里添加这两行代码,local emoji_reduce = require("reduce_emoji") emoji_reduce_filter = emoji_reduce.filter 在自己使用的方案里的engine/filters下添加-lua_filter@emoji_reduce_filter。重新部署就能实现大佬截图的效果了。
@Chengxcy 你要的效果是不是这样的,
参考: reduce_emoji.lua
大佬,请问这个脚本是属于filter脚本吗? 我在文件rime.lua添加一行
reduce_emoji = require("reduce_emoji")
然后在方案文件rime_ice.schema.yaml里面的engine/filters下面添加一行- lua_filter@reduce_emoji
最后把reduce_emoji.lua文件放到lua文件下下面 重新部署小狼毫以后,直接不显示候选字了😭是这位boomker大佬写的,无私奉献,感谢,我只是使用者。将大佬仓库里的该reduce_emoji.lua文件放到自己的lua文件夹里,在rime.lua里添加这两行代码,local emoji_reduce = require("reduce_emoji") emoji_reduce_filter = emoji_reduce.filter 在自己使用的方案里的engine/filters下添加-lua_filter@emoji_reduce_filter。重新部署就能实现大佬截图的效果了。
感谢,rime.lua里面添加的代码第一行删除了local,方案文件engine/filters下-lua中间加个空格,实现截图的功能了。
最好把这个 Lua 放到 - simplifier@emoji
的下面,- simplifier@traditionalize
的上面。
最好把这个 Lua 放到
- simplifier@emoji
的下面,- simplifier@traditionalize
的上面。
还有这个细节要注意,感谢提醒!有个疑问,不这样的话,会出现其他什么问题吗❓
稍微修改了下
#local reduce_emoji = {}
--- https://github.com/boomker/rime-fast-xhup/blob/master/lua/reduce_emoji.lua
--- 在filter中的"simplifier@emoji"和- "simplifier@traditionalize"之间添加- "lua_filter@*reduce_emoji"
---@diagnostic disable-next-line: unused-local
local function reduce_emoji(input, env)
local engine = env.engine
local config = engine.schema.config
local emoji_cands = {}
local other_cands = {}
local prev_text = ""
local emoji_pos = 6
-- local emoji_pos = config:get_int("emoji_reduce_config/idx") or 6
-- local opencc_db = Opencc("emoji.json")
for cand in input:iter() do
if
(emoji_pos > 1)
and (cand:get_dynamic_type() == "Shadow")
and not (cand.text:find("([\228-\233][\128-\191]-)") and cand.text:find("[%a]"))
then
table.insert(emoji_cands, { prev_text, cand })
elseif emoji_pos > 1 then
yield(cand)
emoji_pos = emoji_pos - 1
-- local emoji_tab = opencc_db:convert(cand.text)
-- if #emoji_tab > 1 and type(emoji_tab) ~= "string" then
prev_text = cand.text
-- end
else
table.insert(other_cands, cand)
end
end
if #emoji_cands > 0 then
for _, cand_item in ipairs(emoji_cands) do
yield(ShadowCandidate(cand_item[2], cand_item[2].type, cand_item[2].text, cand_item[1]))
end
end
for _, cand in ipairs(other_cands) do
yield(cand)
end
end
return reduce_emoji
我是直接给emoji加了一个开关,一般情况下可以不用,想用了按快捷键打开就行
最好把这个 Lua 放到
- simplifier@emoji
的下面,- simplifier@traditionalize
的上面。还有这个细节要注意,感谢提醒!有个疑问,不这样的话,会出现其他什么问题吗❓
放到 - simplifier@emoji
的下面,产生 emoji 后,这个 filter 再处理,才有效果。
放到 - simplifier@traditionalize
的上面,避免这个 Lua 对简繁产生副作用。
这样写太怪了,不是在降权 emoji,而是在降权 simplify filter 的结果。基本和方案强绑定。不能添也不能加
而 emoji 本身 unicode 范围太杂了,也不好界定。
到不如用 lua 的 opencc 函数直接写一个转换。加个 tag 就方便了。
或者就像 fcitx5 那样搞个 emoji 词典,权重降低。
比如这样
https://github.com/mirtlecn/rime/blob/master/tools/special.dict.yaml
或者这样:方案用拆字方案就行:
https://github.com/fcitx/fcitx5-chinese-addons/blob/master/im/pinyin/emoji.txt
到不如用 lua 的 opencc 函数直接写一个转换。加个 tag 就方便了。
新版本已经用上了 Opencc 转换了。之前对 Opencc 转换函数用法有点疑问,就注释了。
在降权 simplify filter 的结果
并没有吧, 我是对 "Shadow" 类型的 cand 做处理的
因为 Shadow 类型是 simplier filter 组件产生的,所以我这么说:Candidate -> simplifier@emoji -> Shadowcandidate
另外 opencc 这个函数有内存泄漏的问题,应该在 librime 1.10 左右修复,现在前端版本都没有更新上来,长期用起来会占满内存。所以在配置上应当加上 gc 函数。
请问在选择Emoji上屏时,如何不让这个Emoji对应的词组进入自造词
请问在选择Emoji上屏时,如何不让这个Emoji对应的词组进入自造词
应该不会进到用户词典里吧,我这边没有这种情况
我基于Opencc里的文件 做了emoji词库https://github.com/gaboolic/rime-shuangpin-fuzhuma/blob/main/emoji.dict.yaml 然后用 ae + 拼音打emoji