我的形码输入法[C语言] 之四:输入法的设计(2)

原创 2004年08月26日 16:39:00

输入法的转换需求:四位以下的数字-》字或词

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

 

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

字库:常用、罕用

词库:常用、罕用

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

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

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

 

字库索引:

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

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

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

3584 辞稡狡饺觪辤辭猝獐皎鮫鲛鱆

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

 

词库编码生成:

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

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

 

词的索引:

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

 

坏了,出问题了:

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

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

好了,今天就写到这里了,有些乱了,整理整理再写

一个简单的拼音输入法,实现常用汉字的输入

/* 这是一个简单的拼音输入法,只有常用的汉字,输入拼音后, 再输入数字,选择所需要的拼音 */ #include #include #include #define OUT...
  • YANGSENG1987
  • YANGSENG1987
  • 2013年08月28日 10:34
  • 4398

Dll注入技术之输入法注入

转自:黑客反病毒 DLL注入技术之输入法注入     输入法注入原理是利用Windows系统中在切换输入法需要输入字符时,系统就会把这个输入法需要的ime文件装载到当前进程中,而由于这个Ime文...
  • ProgrammingRing
  • ProgrammingRing
  • 2014年02月06日 23:36
  • 9055

搜狗输入法的分词算法

搜狗输入法的分词算法 搜狗输入法最近的用户输入中出现了一种新的输入模式,形如 “0k1234567”,搜狗的工程师发现这一模式后了解到,这是一种新被提出的对于十五进制数字的标记模式,其中 “0k...
  • zuguodexiaoguoabc
  • zuguodexiaoguoabc
  • 2015年07月18日 15:01
  • 1589

搜狗输入法的分词算法

搜狗输入法最近的用户输入中出现了一种新的输入模式,形如 “0k1234567”,搜狗的工程师发现这一模式后了解到,这是一种新被提出的对于十五进制数字的标记模式,其中 “0k” 是标记进制为15的前缀标...
  • Enjoying_Science
  • Enjoying_Science
  • 2015年07月18日 15:17
  • 1579

在Android安卓手机多语言输入解决办法

本文介绍了在Android安卓系统手机中实现中文、日语(日文)、韩语(韩文)等语言输入法的一键快速切换的方法。...
  • wingcky
  • wingcky
  • 2017年05月06日 21:11
  • 1735

Android默认输入法语言的修改以及SettingsProvider作用

Android源码中默认的有三种输入法:英文,中文,日文。对应的工程代码路径为: /packages/inputmethods/LatinIME/ /packages/inputmethods/O...
  • u013360656
  • u013360656
  • 2015年07月24日 14:29
  • 869

T9输入法相关代码

/*******************************************  T9mb.h *******************************************/ ...
  • markmin214
  • markmin214
  • 2013年03月28日 11:48
  • 6970

Android源码修改默认输入法

前一阵子,应泰国客户需求,需要在Android TV系统定制一个多语言输入法,至少支持中、英、泰三种语言。拿到这个任务,对于至今还是小白的我来说,当然先去google一下有没有大神专门做过符合要求的输...
  • johnWcheung
  • johnWcheung
  • 2016年02月22日 22:58
  • 4725

我的Android进阶之旅------>Android【设置】-【语言和输入法】-【语言】列表中找到相应语言所对应的列表项

今天接到一个波兰的客户说有个APP在英文状态下一切运行正常,但是当系统语言切换到波兰语言的时候,程序奔溃了。所以首先我得把系统的语言切换到波兰语,问题是哪个是波兰语呢?        我还真的不认识哪...
  • qq446282412
  • qq446282412
  • 2015年12月07日 19:54
  • 4462

iOS输入法开发(Swift)

我会复习一下有关键盘扩展的内容,然后通过使用iOS 8中的新应用扩展API的设计一个摩斯码的输入法。完成这个教程大约需要花费20分钟。完整代码   概览 通过使用自定义输入法替换系统...
  • SHZnt
  • SHZnt
  • 2016年01月26日 10:38
  • 521
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:我的形码输入法[C语言] 之四:输入法的设计(2)
举报原因:
原因补充:

(最多只允许输入30个字)