10秒开发一个基于字的3-gram的拼音输入法:魔改sunpinyin
apt source libsunpinyin3v5 下载到当前目录下。src/sunpinyin-dictgen是个有shebang的Makefile:
#!/usr/bin/make -f
W3M = wget -q -O -
DL_LIST = https://sourceforge.net/projects/open-gram/files/
DL_HOST = https://jaist.dl.sourceforge.net
DL_ROOT = ${DL_HOST}/open-gram
DICT_PAT = 'dict\.utf8-\+.tar.bz2'
SLM_PAT = 'lm_sc\.3gm\.arpa-\+.tar.bz2'
DICT_AR = $(shell ${W3M} ${DL_LIST} | grep -o ${DICT_PAT} | sort -u | tail -n 1)光腚make为了求变量DICT_AR的值也要联网,虽然比Android Studio快得多,我还是不喜欢。
此版本下载dict.utf8就够了。
写个小烂Python程序可从dict.utf8提取单字,得到如下文件:
<unknown> 0
<unknown_cn> 2
9
<stok> 10
<Digit> 20
<Simbol> 21
<NONEWORD_ALLWORD> 69
, 70
。 71
; 72
? 73
! 74
: 75
“ 76
” 77
、 78
… 79
㐀 100 qiu
...
袏 26753 zuo
阼 26754 zuoView Code注意调整ID连续。while 1: input(),用ids
$ ids2ngram -n 3 -s /dev/shm/swap -o 3gram -p 1024000 ids # 用内存盘
$ slmbuild -l -n 3 -o all.slm -w 26700 -c 0,3,2 -d GT,8,0.9995 -d ABS -d ABS -b 10,11,12 -e 9 3gram
照抄光腚slmbuild的Example改了下文件名。
$ slmthread all.slm lm_sc.t3g
这步是必须的,因为它要浮点转整数等,online部分不接受all.slm,虽然不crash,但候选字的顺序都乱了。
Compressing pr values...13530 float values ==> 13530 values
Compressing bow values...17422 float values ==> 16384 values
Threading the new model...slmthread: src/slm/thread/slmthread.cpp:383: int main(int, char**): Assertion `bowit != bow_map.end()' failed.
已放弃
不到最后关头,绝不轻言放弃。改程序。:-)
// assert(bowit != bow_map.end());if (bowit == bow_map.end()) { cerr 这个有用。 很好很强大我过来先占个楼 待编辑 喜欢鼓捣这些软件,现在用得少,谢谢分享! 感谢分享,下载保存了,貌似很强大 不错,里面软件多更新就更好了 感谢,下载保存了 谢谢楼主提供! 懂技术并乐意极积无私分享的人越来越少。珍惜 用心讨论,共获提升! 收藏一下 不知道什么时候能用到 谢谢楼主提供! 分享、互助 让互联网精神温暖你我 鼓励转贴优秀软件安全工具和文档! 感谢分享,下载保存了,貌似很强大 这个好,看起来很实用 感谢,下载保存了 yyds。多谢分享 感谢分享,学习下。 不错,里面软件多更新就更好了
页:
[1]
2