输入法词条权重问题的解决思路
本帖最后由 马黑黑 于 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 就完工。
虽然这样生成的权重不是很科学,但效果可以接受,算是权宜之计吧。
黑黑,你这个方法比较实用。太专业了。{:5_161:} 这两个方法都是要把新词库里的GBK 的 20902 个常用汉字找出来,并排序靠前。为什么不直接用只有常用汉字的词库呢?能用到10万汉字的,肯定是对偏僻字需要用到的工作吧。 两个方法都需要把字库的字先放进来吧,那需要很多行。
=IFERROR(IF(MATCH(B1,A:A,0)>0,1000,),1)
这个公式里的1000指的是什么? 继续学习,谢谢老黑,周末快乐{:4_204:} Excel 里的这个判断语句还能看明白点,EmEditor 的正则公式挺难难懂。
“全选新列,输入 1000”为什么是1000? 谢谢友友分享。祝周末愉快!{:4_178:} 说的有道理{:4_187:} 冬天的雨 发表于 2021-9-5 16:39
说的有道理
感谢支持 加林森 发表于 2021-9-5 11:33
黑黑,你这个方法比较实用。太专业了。
队长更专业 子梦 发表于 2021-9-5 15:11
谢谢友友分享。祝周末愉快!
周末好 红影 发表于 2021-9-5 13:23
Excel 里的这个判断语句还能看明白点,EmEditor 的正则公式挺难难懂。
“全选新列,输入 1000”为什么 ...
权重大一点点吧,其实2也行,比非20902的字大就行
大猫咪 发表于 2021-9-5 13:23
继续学习,谢谢老黑,周末快乐
天天快乐 马黑黑 发表于 2021-9-5 22:05
队长更专业
那有你专业啊。你才是! 红影 发表于 2021-9-5 13:17
这两个方法都是要把新词库里的GBK 的 20902 个常用汉字找出来,并排序靠前。为什么不直接用只有常用汉字的 ...
GBK和Unicode是两个档次的问题,就像蚂蚁和人类{:5_106:} 加林森 发表于 2021-9-5 22:06
那有你专业啊。你才是!
彼此彼此 又搞啥新输入法了 绿叶清舟 发表于 2021-9-5 22:08
又搞啥新输入法了
也没啥,帮古籍爱好者弄个码表并封装成输入法,该输入法还得集成常规输入法 马黑黑 发表于 2021-9-5 22:08
彼此彼此
老黑不必客气啊 加林森 发表于 2021-9-5 22:11
老黑不必客气啊
应该的应该的