Re: 【开源 发布】单手笔顺输入法码表 stroke-seq_MB 1.1 版,欢迎程序员们开发笔顺输入法软件。
发表于 : 2017-08-27 22:39
有deb包吗,刚安装好的lubuntu正需要这样的输入法
或者有类似的推荐吗?
或者有类似的推荐吗?
这个只是码表,可以到github下载zip压缩的txt文本文件和LibreOffice电子表格文件。shifeidian 写了:有deb包吗,刚安装好的lubuntu正需要这样的输入法
或者有类似的推荐吗?
我没有 oschina 的帐号,为了做广告而注册帐号似乎也不大好……lifulinghan 写了:看样子不错,你可以顺便去 oschina 上宣传一下。
希望这能给日后想制作这个输入法的程序员一个很好的启发!建议使用二叉树来储存笔顺。
目前的码表为890KB,经过压缩之后,这个码表就只有217KB,这说明了这个码表有
很大的冗余度。但目前来说,浪费储存空间并不重要。
问题于在于,码表的维护问题。
例如,现在要增加一个字,如“遭”字,按照目前的方法就必须将该字的笔顺原原本本
地输入,如:
遭:12512212511454
但如果使用二叉树来储存,则只需要存储类似于:
遭:曹辶
而分出来的两叉,如果已经存在于原来码表中,则可以通过查找两叉各自的笔顺即可。
至于数据的导出原来格式的码表,使用脚本导出即可。
另外这样做的优点在于,可以按汉字的部件查找。虽然目前这种储存方式,勉强可以
查找到部件,例如:
但对于像人、木这样的部件,就没有那么容易了。代码: 全选
$ grep "12512212511" 单字_笔顺码_29685个.txt 44020 䏆 17 12211112512212511 330 12560 蓸 14 12212512212511 300 14199 槽 15 123412512212511 300 42035 㯾 18 123412512212511454 330 7247 曹 11 12512212511 300 12736 遭 14 12512212511454 300 17918 醩 18 125351112512212511 300 ... more ...
如果使用二叉树来储存,那可能就比较简单了,仅需要那些拆剩,不能再拆的字符的笔
顺存就够了。即不能由本表里其它字符组合而而。
我写了这么一段代码来做例子吧(用python能做得更好):这样的表格可能维护起来更直观,原始数据也更少,而且也很容易导出代码: 全选
struct bnode { int id; char c[4]; int left; int right; }; /********************** * v NUL 勹 丶 * * \/ \/ * * 白 勺 * * \ / * * 的 * **********************/ struct bnode charset[]={ /* 汉字森林 */ {0, "始", 0, 0}, {1, "的", 2, 3}, /* 拆分后两叉均存于本集 */ {2, "白", 2, 0}, /* 不拆,需另表说明属性 */ {3, "勺", 4, 5}, {4, "勹", 4, 0}, {5, "丶", 5, 0}, {6, "京", -12, 7}, /* 拆分后有一叉不在本集 */ {7, "小", 7, 0}, {8, "影", 10, 9}, {9, "彡", 9, 0}, {10,"景", 11, 6}, {11,"日", 11, 0}, {-1,"终", -1, -1}, /* member id is not used. */ }; /* * 互质汉字集/字根集 * 拆分后部件在字符集中没有 * 不能拆分或有多种拆法的字 GB B1 B2 NUL UTF B1 B2 B3 UNICODE FF B0 B1 */ struct charattr { int id; char c[4]; int strk; /* 最多 13 划 */ }; struct charattr rootset[] = { /* 地上落叶 */ {0, "始", 0}, {1, "一", 1}, {2, "丨", 2}, {3, "丿", 3}, {4, "丶", 4}, {5, "乙", 5}, {6, "白", 42511}, {7, "勹", 35}, {8, "丶", 5}, {9, "小", 234}, {10, "彡", 333}, {11, "日", 2511}, {12, "高", 41251}, /*TODO: 中间性质字根问题 */ {-1, "终", -1}, };
目前格式的码表。
要导出目前格式的码表,大约就这样子吧,如下图片。
另外,要制作我所描述的二叉树表,很大一部分也可以由目前的表格自
动生成,当然可能也会百个字需要考究。
那么维护表格就变成两部分:
1 可以表内两个字符构成的字,<表1>。
2 所支持的字剔除<表1>,称为<表2>。
(如果把所有的字先假设成不拆,那么表2为空)
这个转变的过程没有必要一步到位,可以慢慢转化。其实很大一部分可以由程序
自动生成。
而且将这个表按 UNICODE 编码排序,大多数是按偏旁部分排序,先确定两半小
的一半,另一半由电脑根据剩下的笔顺自动确定,准确率很高。
而确定偏旁也可以半自动来做,当这个表的字,比上一个字的笔划数少时,并且
这个字的笔顺序列在整个表中出现多次,那么这个字很可能是部首。
或者你有没有更好的方法。
困