中文拼音输入法设计要点

中文拼音输入法设计要点.txt2机会靠自己争取,命运需自己把握,生活是自己的五线谱,威慑呢们不亲自演奏好它?[导入]我的形码输入法[C语言]
我的形码输入法[C语言] 之一:输入法的字词编码
以下的介绍内容涉及到专利权的,不过不是偶的,是客户的:)

用在windows平台上,是形码输入法,使用四位十进制数字代替形码:
0 口囗日目曰罒
1 丨丶ㄟ宀
2 一
3 丿
4 十乂艹丰井卅
5 亅ㄅㄋ了亠广疒
6 し乚ㄥㄑ??厶厂乙
7 フ乛┐ㄣ丆亻又廴
8 八丷冫氵ツ人入
9 冂凵コ匚冖卩几彐月凡臼卪

1、左右结构字:左边只取第一码,右边按笔顺取前两码和最后一码。例如:
社142捡2822科3114杨4533新5621铝600码7752泅808欧9378呻001

2、左中右结构字(中间和右边合在一起,作为右边)按左右结构字规则取码。例如:
龇1126班2132狮3131柳4939辩5164缴6304候7171湖8409膨9423啷0191

3、其余结构字:按笔顺取前三码和末笔码。例如:
宴1067露2910毽3227春410卫512等6641面7012送8247免3706圆0098

4、框形编码时不能按笔顺拆开。

词的编码如下:
两字词:两字前两码
三字词:第一字两码,后二字各一码
四字词以上:第一字和最后三字各一码

=======================================================================

我的形码输入法[C语言] 之二:输入法的功能
输入法要实现:

1、字词编码

2、常用字和罕用字、常用词和罕用词分开

3、打字词上屏后给出拼音提示、编码提示

4、可以加词(包括批量导入),可以智能组词,可以智能加整句(目前功能不完善)

5、打字词上屏后可以联想以其开头的词(词组关联)

6、词语和编码查询

7、中文字词->英文,拼音->中文,英文->中文,数码转中,简繁输出等

8、有大键盘和小键盘两种输入方式。

9、可以使用软键盘。

10、提供打字练习、帮助等附件

呵呵,就这么多吧,其他的以后再添加

=======================================================================

我的形码输入法[C语言] 之三:输入法的设计(1)
本篇只叙述我的形码输入法内部从输入到输出转换的原理,如果想要了解输入法程序的框架是怎么样的、到底是怎么被调用出来的,请参见自由拼音输入法源码3.1版,我最初的程序就是用这个改的

如果想要了解windows平台输入法编程时的接口、convension等等,请参见以下这几篇文章,其中详细的说明输入法程序是如何进行工作的:

https://www.360docs.net/doc/a34150547.html,/thread.jsp?forum=7&thread=1835&tstart=0&trange=15

https://www.360docs.net/doc/a34150547.html,/cgi-bin/topic.cgi?forum=5&topic=3&replynum=last#bottom

https://www.360docs.net/doc/a34150547.html,/wwwboard/messages/253.html


关于编写输入法程序要注意的问题以后我可能会写一些,有问题,直接跟我email联系交流:

mail to : renzhongfang@https://www.360docs.net/doc/a34150547.html,

输入法乍听起来好像很难做,其实原理却很简单:

从输入的数字或者英文找出与之汉字或者词语

对于我这个输入法而言,最长的编码就是四位数字[参见我前面的文档] (后来添加了数码转中和拼音、英文转中不算,这个是附加功能),而且词的编码可以由字的编码来生成,所以只需要有个有编码字库就可以了,然后到网上去下载一个别人的什么十三万啦、三十万啦,稍稍修改以后往里面导入就可以具备一个不错的大词库了

现在的汉字有好几万,但常用的汉字有六千七百多,所以输入法中常用字和难字是分开的,一般输入的编码查处来的只是常用字,可以用个键进行切换,暂定的是'`'键,就是tab键上面按个键,称为难字键

同时,词库也有很多内容,如果都放在一起使用起来翻页较多影响效率,所以把词库也分为两类:常用词库和罕用词库(也叫非常用词库),使用'/'键进行切换。

由于输入法只需要输入数字和翻页,所以只要小键盘就可以完成(这个特点对于以后把输入法移植到手机上极为有利)

小键盘功能说明:

NumLock : 未使用

1-9:输入编码,选字词

/ :常用词语和罕用词语切换

* :类似于空格上屏,但是不一样的是可以终止编码输入用来选字,如输入123,这时候并没有处于选字状态,还可以输入4,如果想选字,可以使用星号键,就处于选字状态了,

- + :上下翻页以及激活选字(这个以后再说),其中-还可以用来删除前面输入的词,即一次回退一个输入的词,如输入了词语“身体”,然后按-,就可以删除这两个字,多个字也是一样

. (Del) :删除一个词,也可以在编码输入状态删除一个编码

Enter :删除输入的编码,用于编码输入错误的情况下进行修正


========================================================================

我的形码输入法[C语言] 之四:输入法的设计(2)
输入法的转换需求:四位以下的数字-》字或词

词库的编码需要:字-》编码

从前篇的叙述以及上面的需求上可以看出,需要下列库:

字库:常用、罕用

词库:常用、罕用

考虑到字只有16位(不支持宽字),而且编码最多只有11110种(用排列组合算一下:)

我采用了数据文件以及索引文件的方法

其中:数据文件存放实际内容,索引文件把编码或这字作为索引指向数据文件中的内容(这个设计贯穿了整个输入法设计的始终)



字库索引:

首先,我做了一个 编码-》汉字 的索引,把编码转

换位一个四位数,然后以这个四位数的值作为位置在索引文件中取索引,然后根据索引找到这个编码所对应的字起始位置。这么说可能不大好理解,举个例子:

编码:3584 ,索引文件中3584 * 2(乘以2是因为一个索引值占16个bit,即两个字节)位置上的一个WORD大小的内容就是编码3584 对应的字在数据文件中的起始位置,然后循着这个起始文件的位置,知道找到一个句子结束标志,其中所有的字就是3584 对应的所有的字,至于怎么显示只是个小问题了。

如数据文件那一行内容为:



那么3584的编码对应字就都找出来了,这个会有几十个文件读取操作速度不算很快,但是对于输入法来说微乎其微。


词库编码生成:

前面说过词的编码是可以通过字的编码生成的,生成规则也在前面的文章中介绍过,要用到字的编码,即需要根据字来查编码

我分析了一下字,发现从0x0000 -》 0xFFFF只有0xFFFF种情况,而一个编码可以用一个WORD的内容来代替(两个BYTE),那么可以建立一个索引文件,以汉字的数值为索引,其对应的索引文件位置的内容为数值编码,然后转化一下就可以得到这个字的编码了,整个文件大小64 * 4=128K,即一个128K的索引文件,虽然大部分的地方浪费了,可以换个快速的查找也是值得的。



词的索引:

其实词的索引和字的索引类似,也从编码变到索引再从数据文件中取出一行词来,只不过词之间要用空格或者tab进行分隔,而字不需要罢了


坏了,出问题了:

仔细想一想上面的设计有什么问题?哦,有些字像“一”,只有一个编码,还有的字只有两个三个编码的,这时候编码“99“对应的数值是九十九,而编码“099”对应的也是九十九,怎么办?

呵呵,后来我给每一位都加上1,然后使用十六进制,即0013的数值是0x1124,0099对应的是0x11AA,这样就没有问题了,但是为了保险(后面就遇到了问题)起见,把空编码计为0xF,即编码042对应于0xF153,这样就没事了。


相关文档
最新文档