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

<未输入完整的词条> 候选词排序是乱序的,未按照权重排序 #820

Open
4 tasks
ccyybn opened this issue Feb 16, 2024 · 6 comments
Open
4 tasks

Comments

@ccyybn
Copy link

ccyybn commented Feb 16, 2024

Describe the bug
在方案中配置 enable_completion: true,码表均为4码固定长度(小鹤音形码),按权重排序,输入de,候选词列表没有按权重展示

To Reproduce
将我上传的方案部署后即可复现

Rime.zip

为方便观察问题,该码表精简为只有 de 开头的词条,高权重的在上面
该问题在 Weasel for Windows 和 Fctix5 for Android Rime 插件上均存在

Expected behavior
无论是否输入完整,都按权重排序,<未输入完整的>可以比 <输入完整> 的整体靠后,但是他们内部都按权重排序

Log

Screenshots
Snipaste_2024-02-16_15-53-02

Flavor(please complete the following information):
Select your flavor:

  • ibus-rime
  • fcitx-rime
  • Squirrel
  • Trime
  • [ * ] Weasel
  • [ * ] fcitx5-rime

Package:

  • OS: [Windows]
  • Version: [0.15.0]
  • URI: [https://github.com/rime/weasel/releases]

Additional context

@ccyybn ccyybn added the bug label Feb 16, 2024
@ksqsf
Copy link
Member

ksqsf commented Feb 17, 2024

用 algebra 生成缩写形式即可

speller:
  algebra:
    - derive/([a-z])[a-z][a-z][a-z]/$1/
    - derive/([a-z][a-z])[a-z][a-z]/$1/
    - derive/([a-z][a-z][a-z])[a-z]/$1/

@ccyybn
Copy link
Author

ccyybn commented Feb 17, 2024

algebra:
- derive/([a-z])[a-z][a-z][a-z]/$1/
- derive/([a-z][a-z])[a-z][a-z]/$1/
- derive/([a-z][a-z][a-z])[a-z]/$1/

加上过后,似乎未完成的编码提示消失了,而且不知道为什么,输入 de 这个 "德昂" 会排在 “的”前面

image

@lotem
Copy link
Member

lotem commented Mar 2, 2024

沒有專門製作前綴匹配的索引, 所有前綴匹配的字詞, 可能會是巨量的, 因此爲了效率故, 沒有一下檢索出來, 也就無法排序.

@ccyybn
Copy link
Author

ccyybn commented Mar 3, 2024

沒有專門製作前綴匹配的索引, 所有前綴匹配的字詞, 可能會是巨量的, 因此爲了效率故, 沒有一下檢索出來, 也就無法排序.

目前我的替代方案是把字典文件中,每个词条,按照按键顺序,重复生成几遍,就能达到相同的预期效果,不过文件大小比原始版本大了很多倍

image

如果是前缀匹配,比如键入a,可能词条有上万条,但一般人并不会翻页到第1000页找词,所以实际可能只需要显示前几页,应该没有那么巨量数据需要索引

另外好像 auto_select auto_select_unique_candidate未键入完整的词条并不起作用,比如下面这个,一定要输入 k 才会自动选择,目前只能在生成字典文件(*.dict.yaml)时,判断候选个数为1,把 k 去掉,才能达到预期效果

image

@ksqsf
Copy link
Member

ksqsf commented Mar 3, 2024

这个做法跟 derive 其实是一样的,不需要手动操作。

但一般人并不会翻页到第1000页找词,所以实际可能只需要显示前几页,应该没有那么巨量数据需要索引

难点就是第一页也很难显示出来。这跟 rime 补全原理有关。给定一个编码前缀,rime 并不知道后续补全什么编码会得到权重最高的候选(甚至不知道有没有候选),只能从 a 到 z 一一尝试。这种方法下无法排除 dezzzzzz 编码候选权重比其他 de 开头编码的候选更高的可能性,要以100%精确度显示出第一页并非易事。

@lotem
Copy link
Member

lotem commented Mar 9, 2024

得專門加索引. 這項功能安排到 R2 裏開發.

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

Successfully merging a pull request may close this issue.

3 participants