⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000000.htm

📁 一份很好的linux入门资料
💻 HTM
字号:
<HTML><HEAD>  <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人:&nbsp;shi&nbsp;(石头),&nbsp;信区:&nbsp;Linux&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;pyinput输入法的设计思想(1)&nbsp;<BR>发信站:&nbsp;BBS&nbsp;水木清华站&nbsp;(Wed&nbsp;Jan&nbsp;20&nbsp;23:09:24&nbsp;1999)&nbsp;<BR>&nbsp;<BR>为了大家能利用pyinput,完善pyinput,我把该输入法的设计思想&nbsp;<BR>总结一下,如果有那写得不明白,欢迎提问.&nbsp;<BR>今天晚上先写了一部分.&nbsp;<BR>&nbsp;<BR>1&nbsp;首先根据table文件生成拼音字典.&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;按照table文件中的拼音顺序为每个拼音分配一个key,&nbsp;<BR>&nbsp;&nbsp;例如:&nbsp;&nbsp;a=1,&nbsp;ai=2,&nbsp;an=3,&nbsp;ang=4,&nbsp;...&nbsp;<BR>&nbsp;&nbsp;即填充好InputModule的pytab.&nbsp;<BR>&nbsp;&nbsp;然后把table文件中每个拼音后的所有的汉字填充到&nbsp;<BR>&nbsp;&nbsp;InputModule的hztab中.&nbsp;<BR>&nbsp;&nbsp;这样就可以根据每个拼音的key来找到相对应的所有的汉字.&nbsp;<BR>&nbsp;&nbsp;即pytab与hztab通过key相联系.&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;这一步是通过HZassoc.c中的LoadTable()来完成的.&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>2&nbsp;加载系统词库和用户词库.&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;首先讲一下词库的结构:&nbsp;<BR>&nbsp;&nbsp;系统词库和用户词库的结构完全一样.词库的结构如下:&nbsp;<BR>&nbsp;&nbsp;第一个字节是词的长度len,下面的len+1个字节是词的拼音&nbsp;<BR>&nbsp;&nbsp;的key,再下面的2*len个字节是词的汉字,即表示一个词需要&nbsp;<BR>&nbsp;&nbsp;1+(len+1)+2*len个字节.&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;因为汉字拼音的总数大于256个小于512,这样每个拼音的key&nbsp;<BR>&nbsp;&nbsp;需要9位来表示,也就是说用一个字节来表示少了,但用两个字节&nbsp;<BR>&nbsp;&nbsp;来表示就浪费了第二个字节的7位,只利用了其中的1位,为了节约&nbsp;<BR>&nbsp;&nbsp;内存空间,我是这样表示每个词的key的,把每个key的低8位截取下&nbsp;<BR>&nbsp;&nbsp;来存放,把所有key的第9位截取下来集中放在一个字节中,这样每&nbsp;<BR>&nbsp;&nbsp;个词最多只能有8个字.说了这么多,还是举一个例子来看看.&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;例如:&quot;好朋友&quot;怎么来表示呢?&nbsp;<BR>&nbsp;&nbsp;首先根据table文件可以知道每个字的key.&nbsp;<BR>&nbsp;&nbsp;&quot;好&quot;的拼音是hao,&nbsp;查table得hao的key是113,&nbsp;113的二进制表示是01110001&nbsp;<BR>&nbsp;&nbsp;&quot;朋&quot;的拼音是peng,&nbsp;查table得peng的key是240,&nbsp;240的二进制表示是11110000&nbsp;<BR>&nbsp;&nbsp;&quot;友&quot;的拼音是you,&nbsp;查table得you的key是366,&nbsp;366的二进制表示是101101110&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;分别截取113,240,366的低8位得:01110001,11110000,01101110,用3个字节&nbsp;<BR>&nbsp;&nbsp;来存放,而113,240,366的第九位分别为0,0,1,把它们按照由低到高的顺序合并&nbsp;<BR>&nbsp;&nbsp;为一个字节得:00000100,把这个字节放在最前面,得到一个四个字节的序列.&nbsp;<BR>&nbsp;&nbsp;00000100,01110001,11110000,01101110.这就是这个词的拼音表示.&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;所以&quot;好朋友&quot;这个词的长度为3,需要用3+1个字节来表示它的拼音的key,2*3个&nbsp;<BR>&nbsp;&nbsp;字节来表示这个词的汉字,具体就是:&nbsp;<BR>&nbsp;&nbsp;00000011,00000100,01110001,11110000,01101110,10111010,11000011,&nbsp;<BR>&nbsp;&nbsp;11000101,11110011,11010011,11010001,&nbsp;<BR>&nbsp;&nbsp;用16进制表示为:03,04,71,F0,6E,BA,C3,C5,F3,D3,D1.&nbsp;<BR>&nbsp;&nbsp;也就是&quot;好朋友&quot;这个词需要1+(3+1)+2*3=11个字节来表示.&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;整个词库就是这样的字节流.所以词库里即包含了拼音信息,又包含了汉字信息.&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;本输入法附带的工具里面的sim2lib.c就是把形如:&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;好朋友&nbsp;hao&nbsp;peng&nbsp;you&nbsp;<BR>&nbsp;&nbsp;我们&nbsp;wo&nbsp;men&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;这样的普通文件转换成词库.&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;附带的sim2lib1.c可以把形如:&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;好朋友&nbsp;<BR>&nbsp;&nbsp;我们&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;这样的普通文件转换成词库,但因为有的字是多音字,所以无法转换,例如:&nbsp;<BR>&nbsp;&nbsp;&quot;着急&quot;的&quot;着&quot;有好几个发音,所以无法转换.&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;而lib2sim.c可以把词库转换成普通文件.&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;注意的是单个字也可以看作一个词,以加载到词库文件中,我在libphrase中&nbsp;<BR>&nbsp;&nbsp;加了一些这样的单字词,但不是很多,大家可以把一些常用的单字词自己加进去.&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;知道了词库的结构,就可以根据词库文件libphrase和usrphrase把词库加载&nbsp;<BR>&nbsp;&nbsp;到内存中,即填充InputModule的phtab,phtab是一个二维数组,phtab[0]是&nbsp;<BR>&nbsp;&nbsp;用户词库,phtab[1]是系统词库,phtab[0]和phtab[1]是都是动态链表,结构如下:&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;phtab[][1]=词的拼音key(KeyPhrase)-&gt;符合该key的词的汉字(HzPhrase)-&gt;HzPhrase-&gt;&nbsp;...&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;||&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;词的拼音key(KeyPhrase)-&gt;符合该key的词的汉字(HzPhrase)-&gt;HzPhrase-&gt;&nbsp;...&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;||&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;....&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;phtab[][2]=词的拼音key(KeyPhrase)-&gt;符合该key的词的汉字(HzPhrase)-&gt;HzPhrase-&gt;&nbsp;...&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;||&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;词的拼音key(KeyPhrase)-&gt;符合该key的词的汉字(HzPhrase)-&gt;HzPhrase-&gt;&nbsp;...&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;||&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;....&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;phtab[][3]=词的拼音key(KeyPhrase)-&gt;符合该key的词的汉字(HzPhrase)-&gt;HzPhrase-&gt;&nbsp;...&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;||&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;词的拼音key(KeyPhrase)-&gt;符合该key的词的汉字(HzPhrase)-&gt;HzPhrase-&gt;&nbsp;...&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;||&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;....&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;.......&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;其中phtab的下标1,2,3...是由词的第一个字的拼音key决定的.&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;这是通过HZassoc.c中的LoadPhrase()来完成的.&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;先写这些,以后会陆续写完.&nbsp;<BR>&nbsp;<BR>--&nbsp;<BR>※&nbsp;修改:·shi&nbsp;於&nbsp;Jan&nbsp;20&nbsp;23:11:20&nbsp;修改本文·[FROM:&nbsp;&nbsp;&nbsp;159.226.65.19]&nbsp;<BR>※&nbsp;修改:·shi&nbsp;於&nbsp;Jan&nbsp;20&nbsp;23:11:59&nbsp;修改本文·[FROM:&nbsp;&nbsp;&nbsp;159.226.65.19]&nbsp;<BR>※&nbsp;来源:·BBS&nbsp;水木清华站&nbsp;bbs.net.tsinghua.edu.cn·[FROM:&nbsp;159.226.65.19]&nbsp;<BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -