Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

能否直接判断当前候选是否进行了补全? #246

Open
hoofcushion opened this issue Apr 30, 2023 · 6 comments
Open

能否直接判断当前候选是否进行了补全? #246

hoofcushion opened this issue Apr 30, 2023 · 6 comments

Comments

@hoofcushion
Copy link

hoofcushion commented Apr 30, 2023

imageimage

我制作了一份简拼词库,使用的过程中发现低权重的简拼词库常常会被高权重的主词库的补全顶下去,于是我就尝试削减补全候选的数量,但是我没有找到判断script translator候选是否为补全的接口。
在table_translator中,来自补全的候选都会通过cand.comment标识,但是script_translator并不支持这种操作,所以我尝试了其他的办法,目前发现了一个可行方式:
双拼方案中补全候选的input的长度总是cand.text长度的2倍再+1,所以可以通过捕捉这种关联来判断是否为补全。

效果图:
imageimageimage

-------------------------------------------------------------
--[[======运行逻辑========
1定义计数器b,累积补全数量(即 输入码为"wo d"时出现的"我的、我对"的候选的数量)
2检查是否"输入码为奇数的同时候选处于补全状态"
 1是则计数一次补全候选的数量(b+1),并将编码提示改为『补全』
 2然后判断补全候选的数量是否超过3,超过3则不再允许补全通过滤镜
结束

=判断当前是不是处于补全状态  (候选的长度)==(输入码长度)/2+0.5时,被认为处于补全状态,仅适用于双拼
=判断输入码是不是奇数     (输入码长度)/2的余数为1时,被认为是奇数

==================--]]
function abbreving_filter(input,env)
	local b=0
	for cand in input:iter() do
	if(utf8.len(cand.text)==string.len(env.engine.context.input)/2+0.5 and string.len(env.engine.context.input)%2==1)then
	if(b<3)then b=b+1 yield(ShadowCandidate(cand,cand.type,cand.text,"『补全』"))end
	else yield(cand)
end end end
-------------------------------------------------------------

这个方案美中不足的是,他只能判断定长方案的候选是否为补全,对不定长方案无能为力,所以我想知道有没有办法能判断任何translator的候选是否处于补全状态。

@hoofcushion hoofcushion changed the title 能否直接获取当前候选是否进行了补全? 能否直接判断当前候选是否进行了补全? Apr 30, 2023
@mokapsing
Copy link

用反查的方法查当前候选的编码和当前输入的编码是否一致,如果不相等且以当前input为开头,则为补全

@hoofcushion
Copy link
Author

@mokapsing 在哪里反查?对于任意候选都可以吗?

@mokapsing
Copy link

mokapsing commented Jul 12, 2023

local dict = env.engine.schema.config:get_string("translator/dictionary") or env.engine.schema.schema_id
env.reversedb = ReverseDb("build/" .. dict .. ".reverse.bin")
--...
for cand in tran:iter() do
    local code = env.reversedb:lookup(cand.text)
end

但这样有个问题,一字多码会查出多个

或者(拼音)开启spelling_hint,判断comment和输入码是不是相等

@shewer
Copy link
Contributor

shewer commented Jul 15, 2023

一般从 table_translator (enable_completion: true 时) 产生的 candidate 可以从 cand.type =="completion" 来判断

@hoofcushion
Copy link
Author

一般从 table_translator (enable_completion: true 时) 产生的 candidate 可以从 cand.type =="completion" 来判断

script_translator下此方法无效。

@hoofcushion
Copy link
Author

local dict = env.engine.schema.config:get_string("translator/dictionary") or env.engine.schema.schema_id
env.reversedb = ReverseDb("build/" .. dict .. ".reverse.bin")
--...
for cand in tran:iter() do
    local code = env.reversedb:lookup(cand.text)
end

但这样有个问题,一字多码会查出多个

或者(拼音)开启spelling_hint,判断comment和输入码是不是相等

这两种方式都会返回真实编码,而非拼写运算后的编码

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants