libpinyin / ibus-libpinyin

GNU General Public License v3.0
627 stars 90 forks source link

为什么前三个候选词不是词库中词频最高的词,而是 libpinyin 的胡乱组合? #380

Closed blickers closed 1 year ago

blickers commented 2 years ago

尝试给 libpinyin 的 data 目录下 opengram.table 末尾添加了几条词,例如 “造山带旋回”,设置词频为 999999。重新编译后,用 Ibus-libpinyin 尝试打出添加的词,可以成功出现在候选词列表上,但是总是出现在第四个,前三个候选词总是 libpinyin 自己胡乱拼凑出来的东西,诸如 “早善待旋回”、“早善待选会”、“早善待选惠”,期望打出的 “造山带旋回” 却默认出现在第四个,而不是第一个。只有输入过一次后,第二次再打这个词,才会如愿出现在第一候选位置。

这实在让人觉得非常困扰。建议设置一个选项,让匹配拼音的词按词频顺序出现在候选词列表的前三位。

按理说,完全符合输入拼音的词条(例如前面所说的 “造山带旋回”),应该默认出现在候选词第一位置,libpinyin 联想组合出的预测词条(诸如 “早善待旋回”、“早善待选会”、“早善待选惠” 这些乱七八糟的预测)应该放在后面。

目前的 libpinyin 在处理这个问题的时候逻辑上似乎反了,无论词库里面有没有符合拼音的词条,一律先把联想预测放在第一、第二、第三位置,然后再放词库中与拼音对应的词条。而所谓的 “联想” 经常是乱七八糟的(就像 “早善待旋回”、“早善待选会”、“早善待选惠” 这种毫无意义的东西)。

正常的做法应该是先检查词库里面有没有与输入拼音完全相符的词条,如果有,则按词频顺序把它放到第一、第二、第三......候选词位置上,紧接着后面再显示 libpinyin 联想的组合词条。

blickers commented 2 years ago

事实上,目前最新版的 libpinyin 和 ibus-libpinyin 在处理候选词排序上做法逻辑很有问题。

在词库里面添加上 “白日依山尽” ,重新编译后,关闭云输入的情况下第一次敲入 “白日依山尽” 的拼音 bairiyishanjin,出来的候选词依次如下:

1、白日依山金 2、白日依山进 3、白日依山近 4、白日依山尽 5、百日已 6、百日

很显然,前三个是 libpinyin 自己 “联想” 并胡乱推测组合出来的、词库里面不存在的,第四个才是词库里面跟拼音对应的词条。 这明显的不符合逻辑,不符合习惯,甚至很反人类。

首先应该检查词库,如果里面发现有与输入拼音对应的词,按词频顺序在候选词 1、2、3... 位置列出,后面再展示 libpinyin 联想推测的组合,这才符合逻辑。

现在的做法是,无论词库里面有没有词条,候选词列表前三位置一律先罗列 libpinyin 的联想推测组合。只有在用户打过一次,并选择第四条候选词 “白日依山尽”之后,后面再次敲入相同的拼音,“白日依山尽” 才会出现在候选词第一位置(动态调整记录在用户配置里了)。这做法是反人类的。

这种逻辑大大降低了用户的输入体验,急需改进。

april211 commented 1 year ago

我觉得有必要把云输入候选结果放在靠前的位置,这样会显著提升输入体验。

epico commented 1 year ago

可以试试在 ibus-libpinyin 1.15.0 中的 "Legacy" 模式。

打开首选项对话框,在 "常规" 页面,将候选词排列顺序改为 "Legacy" .

april211 commented 1 year ago

我现在使用的是ubuntu22.10,似乎它默认1.13.0是最新?不过我已经从源码安装了1.15.0,如下 image 并且已经设置为Legacy模式,如下 image 但输入似乎还是不甚理想: image IMHO,如果把4、5、6调整到1、2、3的位置,会好一些

epico commented 1 year ago

试试先将 libpinyin 升级到 2.8.1 的版本。

april211 commented 1 year ago

在安装1.15.0版本时,似乎已经按照提示安装了2.8.1版本: https://github.com/libpinyin/libpinyin/releases/tag/2.8.1 cd libpinyin-2.8.1/ sudo ./configure && sudo make && sudo make install 并且顺利完成,现在再次尝试sudo ./configure && sudo make && sudo make install,在output中确认: image

(在apt中,版本落后: image 所以没有使用apt,转而使用上述方法更新) ps:我是一个ubuntu新手,有些错误可能显而易见,望海涵。

epico commented 1 year ago

试试将 /usr/local/share/ibus/component/libpinyin.xml 复制到 /usr/share/ibus/component/libpinyin.xml .

april211 commented 1 year ago

完成复制后,输入法无法正常输入中文,在终端尝试执行 /usr/local/libexec/ibus-engine-libpinyin --ibus 后,发现报错缺少libpinyin15_2.8.1-1_amd64.deb、libpinyin-data_2.8.1-1_amd64.deb两个包,(我的系统是ubuntu22.10 kinetic)遂进行安装,并重启系统。 现在输入法Legacy模式: image

Frequency模式: image

云输入消失了(?),但拼凑现象有改善。

epico commented 1 year ago

可以考虑将 User Data 的 Emoji Candidate 的选项也关闭,然后等待几秒钟,看看云输入是否会出现。

epico commented 1 year ago

可以考虑将词汇加入到 /usr/share/ibus-libpinyin/network.txt , 或者从首选项对话框导入词库。