马黑黑 发表于 2021-9-5 10:37

输入法词条权重问题的解决思路

本帖最后由 马黑黑 于 2021-9-5 22:29 编辑

全新建立起来的词库,导入输入法,得到的结果往往不理想,问题出在词条的排序上,常用的字不在候选框的第一页或不够靠前,用起来很是尴尬。

分析原因,无非就是词条的权重问题。过去做五笔码表,手工调整词条权重,做完后发誓一周以内不再碰电脑,可见工作量之大。最近调试的码表,单字就有近10万的Unicode汉字,同样的问题又来了,怎么办?先用词库管理工具生成权重,试了几次,效果不行,得另辟蹊径,最终基本达成目标。

方法有二:

第一种:祭出 Excel 杀猪刀

将常用字,比如 GBK 的 20902 个常用汉字放在一列,然后将词库码表粘贴到的二、三列,如下表所示——


一轴yuqq
丁你yujm
七鰏yufu
万鰐yuee
丈鳄yuyh
三啊yufu


第四列用来放词条权重数据,下一步就在此列建立一个公式,用 match 函数检索 B 列的字在 A 列中是否存在,大于 0 即存在,说明它是 GBK 常用字,反之返回 #N/A 的错误值。

=IF(MATCH(B1,A:A,0)>0,1000,)

上面公式,match 套用了一个 if 函数,if 只返回正确值,错误值留空,因为设定错误值也没有用,得到的都是 #N/A。#N/A 不是需要的,所以再用一个 iferror 函数,将错误值变为 1 ,即非常用字的权重。

=IFERROR(IF(MATCH(B1,A:A,0)>0,1000,),1)

至此,填充公式即可。

第二种:请出 EmEditor 水果刀

用 EmEditor 打开码表文档,确保汉字放在第一列,如果不是,可以通过 CSV 排序调整列。接着,在工具条上的筛选栏输入以下正则式子:

^[一-龥]

这个式子,^ 表示行的开头,[一-龥] 表示从 一 到 龥 的字任意一个出现一次,这样就过滤掉不是 20902 范围内的字,然后在 CSV 排序模式下在右边新增一列,全选新列,输入 1000 ,OK,常用字的权重生成了。

非常用字也得有权重,否则在实际输入时它们无法往前“进步”。方法简单,反选或修改正则式子为 ^[^一-龥] 即可把它们全筛选出来,接着在新列输入 1 就完工。

虽然这样生成的权重不是很科学,但效果可以接受,算是权宜之计吧。

加林森 发表于 2021-9-5 11:33

黑黑,你这个方法比较实用。太专业了。{:5_161:}

红影 发表于 2021-9-5 13:17

这两个方法都是要把新词库里的GBK 的 20902 个常用汉字找出来,并排序靠前。为什么不直接用只有常用汉字的词库呢?能用到10万汉字的,肯定是对偏僻字需要用到的工作吧。

红影 发表于 2021-9-5 13:21

两个方法都需要把字库的字先放进来吧,那需要很多行。
=IFERROR(IF(MATCH(B1,A:A,0)>0,1000,),1)

这个公式里的1000指的是什么?

大猫咪 发表于 2021-9-5 13:23

继续学习,谢谢老黑,周末快乐{:4_204:}

红影 发表于 2021-9-5 13:23

Excel 里的这个判断语句还能看明白点,EmEditor 的正则公式挺难难懂。

“全选新列,输入 1000”为什么是1000?

子梦 发表于 2021-9-5 15:11

谢谢友友分享。祝周末愉快!{:4_178:}

冬天的雨 发表于 2021-9-5 16:39

说的有道理{:4_187:}

马黑黑 发表于 2021-9-5 21:55

冬天的雨 发表于 2021-9-5 16:39
说的有道理

感谢支持

马黑黑 发表于 2021-9-5 22:05

加林森 发表于 2021-9-5 11:33
黑黑,你这个方法比较实用。太专业了。

队长更专业

马黑黑 发表于 2021-9-5 22:05

子梦 发表于 2021-9-5 15:11
谢谢友友分享。祝周末愉快!

周末好

马黑黑 发表于 2021-9-5 22:05

红影 发表于 2021-9-5 13:23
Excel 里的这个判断语句还能看明白点,EmEditor 的正则公式挺难难懂。

“全选新列,输入 1000”为什么 ...

权重大一点点吧,其实2也行,比非20902的字大就行

马黑黑 发表于 2021-9-5 22:06

大猫咪 发表于 2021-9-5 13:23
继续学习,谢谢老黑,周末快乐

天天快乐

加林森 发表于 2021-9-5 22:06

马黑黑 发表于 2021-9-5 22:05
队长更专业

那有你专业啊。你才是!

马黑黑 发表于 2021-9-5 22:07

红影 发表于 2021-9-5 13:17
这两个方法都是要把新词库里的GBK 的 20902 个常用汉字找出来,并排序靠前。为什么不直接用只有常用汉字的 ...

GBK和Unicode是两个档次的问题,就像蚂蚁和人类{:5_106:}

马黑黑 发表于 2021-9-5 22:08

加林森 发表于 2021-9-5 22:06
那有你专业啊。你才是!

彼此彼此

绿叶清舟 发表于 2021-9-5 22:08

又搞啥新输入法了

马黑黑 发表于 2021-9-5 22:10

绿叶清舟 发表于 2021-9-5 22:08
又搞啥新输入法了

也没啥,帮古籍爱好者弄个码表并封装成输入法,该输入法还得集成常规输入法

加林森 发表于 2021-9-5 22:11

马黑黑 发表于 2021-9-5 22:08
彼此彼此

老黑不必客气啊

马黑黑 发表于 2021-9-5 22:25

加林森 发表于 2021-9-5 22:11
老黑不必客气啊

应该的应该的
页: [1] 2 3 4 5 6 7 8 9
查看完整版本: 输入法词条权重问题的解决思路