去年在Linux(ubuntu)环境下针对LatinIME进行词库扩容处理,针对LatinIME的词库构建进行了一些列分析,大家可以查阅历史文章。词库扩容最近试了一下是可以的,具体流程大致如下(windows10环境):
1、安装MinGw以及gcc、g++、gdb等,下载地址:e795, 安装完成配置环境变量到path(..\mingw\bin)
2、进入到..\cpp\command目录进行make
windows下没有make命令的,需要到MinGw\bin目录下重命名mingw32-make.exe为make.exe,然后执行就行了。
3、make完成会看到当前目录下多了一个可执行文件:pinyinime_dictbuilder.exe
4、词库改动,这里以加入“堃”字为例,在rawdict_utf16_65105_freq.txt文件中加入:
然后在valid_utf16.txt文件中加入:
5、执行第3步中的可执行文件./pingyinime_dictbuilder.exe
输出如下:
此时到res/raw/目录下查看生成的新的词库dict_pinyin.dat,然后安装运行,测试就可以了。
*************************************************过程中遇到的问题**************************************************
1、make的时候报错:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: cannot find -lpthread
原因:没有安装lpthread相关包,打开mingw installationin manager选中如下包,安装即可:
2、上面第四步中,为什么还要在valid_utf16.txt文件中加入一次?
原因:这个txt中存放的都是词库中已知的汉字,“堃”字之前是不包含在其中的,如果不加入,词库树构建的时候是不会把这个字当成一个有效的汉字的,因此在输入“kun”的时候也就无法为你匹配到。
3、关于词频,怎么来的目前还不知道是不是有什么公式来计算,但是用法想必大家都能猜到,词频数字越大,在匹配结果中越是靠前,并且以此为基础加入到user_dict中,user_dict中会在此基础上进行加权,当然加权的前提就是用户选择了该词频对应的词语(lemma),因此在rawdict_utf16_65105_freq.txt文件中词频小的lemma,最终在user_dict中不一定就小,根据用户的使用习惯也就形成了个性化的词库,每次匹配次序都是先user_dict,然后再标准词库。