首页 百科知识 汉字输入系统码本的构建与检索

汉字输入系统码本的构建与检索

时间:2022-10-04 百科知识 版权反馈
【摘要】:汉字输入系统通常由硬件与软件两部分组成。汉字输入系统的主要作用是把用户输入的输入码转换为对应字词的机内码。如果汉字输入系统码本采用数据库形式存储,不仅使得输入系统依赖于一个特定的数据库引擎,还将影响汉字输入系统的发布与实际使用。目前,汉字输入系统的码本主要有三种结构:定长结构、变长结构和索引结构。

实验目的

1.理解汉字输入系统中码本的作用以及常见的存储形式。

2.掌握针对不同汉字编码的输入系统码本的设计方法。

3.掌握汉字输入系统码本的生成与检索技术。

实验内容

1.使用Windows附带的输入法生成器,逆向生成全拼输入法的码本。

2.为全拼输入法构建一个变长单字码本。

3.为全拼输入法构建一个索引结构的单字码本。

4.编写程序对变长与索引结构的字码本进行检索。

预备知识

一、汉字编码法与汉字输入系统

·汉字编码法

计算机传入我国后,其中的输入、输出和存储汉字的功能是用户必然的需求。计算机的键盘从英文打字机键盘发展而来,用户可以方便地利用键盘输入英文,却无法直接输入中文。针对这一问题,我国的学者和计算机工作者进行了长期的研究与开发工作,到目前为止已经基本解决了汉字的输入问题。

目前,计算机中汉字的输入方法可以分为自然输入和键盘编码输入两大类。其中自然输入包括手写输入和语音输入。虽然自然输入更加简单,但是手写输入速度慢,语音识别需要相对安静的环境,所以可以预见:在相当长的一段时间内,键盘编码输入还是最主流的输入方法。键盘编码输入汉字具有如下两个优点:第一,它无须添加任何外部硬件设备,手写输入通常要添加手写笔,语音输入需要麦克风和声卡结合使用,而键盘编码输入只要基于计算机的键盘;第二,输入速度快、准确率高,手写输入的速度通常较慢,语音输入的准确率不太高,而且容易受到外界声音的干扰。

汉字编码法主要分成:流水码、音码、形码和音形码(形音码)。流水码也被称为无理码,它通常没有重码,但是用户如果要使用该输入法输入汉字,记忆量极大。例如,“区位码输入法”就是一种流水码,几乎没有用户能够记住所有汉字的区位码。音码是目前比较常见的编码法,通常基于汉语拼音方案,或者对拼音方案进行一些变革与改良。例如,“全拼”就是完全基于汉语拼音,“双拼”就是为了减少输入时的击键数而做的变革。因为我国目前大多数计算机用户在中小学阶段都接受过良好的汉语拼音教育,所以比较容易学习和使用该类编码法。但是由于数万个汉字只有一千多个发音,所以音码类的编码法的重码率比较高,直接导致用户经常需要在候选字词中选择,因此降低了输入速度。形码类的输入法从汉字的形状出发,通常重码低、输入速度快,但是它们往往记忆量较大、用户学习时间长。音形码从汉字的音和形两个角度出发,有的以音为主,有的以形为主。因为结合了汉字的两部分信息,重码往往很低,但用户在输入时既要考虑音还要考虑形,思考时间会变长,学习和使用都会相对困难。

·汉字输入系统

汉字输入系统通常由硬件与软件两部分组成。如汉字语音识别输入系统,它包括声卡、麦克风和识别软件部分。显然,软件部分应该是一个汉字输入系统中的主体部分,所以目前通常我们所说的“汉字输入系统”就是特指汉字输入系统的软件部分。

一个汉字输入系统主要完成三方面的任务:一是接受用户输入;二是将输入码转换为候选字词的机内码;三是将汉字或词组的机内码传递给应用程序。其中第一、第三项与具体汉字编码无关,而第二项的过程和不同的汉字编码是密切相关的。

对用户而言,Windows中汉字输入系统通常有三个窗口:第一个是输入法状态条窗口;第二个是输入码编辑窗口;第三个是候选字词列表窗口。另外,为了便于用户有选择地使用输入法的各种功能,通常还提供输入法功能选项的设置界面。图4.1显示了纵横汉字输入法的三个相关窗口,图4.2是纵横汉字输入法的功能选项设置窗口。

图4.1 纵横汉字输入法的三个相关窗口

图4.2 纵横汉字输入法的功能选项设置窗口

二、汉字输入系统码本

汉字输入系统的主要作用是把用户输入的输入码转换为对应字词的机内码。有些汉字编码输入系统根据用户的输入码就可以直接计算出候选字词的机内码,例如,“区位输入法”和“内码输入法”。但是大多数的汉字编码输入系统需要通过查询一个存储了从输入码到字词机内码映射关系的对照表,才能得出候选字词,该对照表通常称为该汉字输入系统的码本。

汉字输入系统与操作系统结合紧密,它属于系统软件,不仅需要考虑时间效率,还要尽量少占用系统资源。如果汉字输入系统码本采用数据库形式存储,不仅使得输入系统依赖于一个特定的数据库引擎,还将影响汉字输入系统的发布与实际使用。因此,为了节约内存空间,在进程之间共享数据,汉字输入系统的码本往往不是以数据库的形式存在,需要为汉字输入系统码本设计一些便于检索的码本结构。

目前,汉字输入系统的码本主要有三种结构:定长结构、变长结构和索引结构。定长结构特别适用于重码少且每个输入码候选字词分布平均的编码法。对定长码本按照输入码排序后,在查找的时候可以使用二分查找,效率很高。如果不同输入码候选字词分布不均匀,重码多,或者不同输入码的候选字词条存储长度区别很大,此时可以使用变长结构的码本,变长结构的码本在存储上可以节约空间,但是不便于快速检索。索引结构的码本兼有定长结构便于快速检索和变长结构节约存储的优点,可以高效检索,而且能够节约存储空间,所以被广泛使用。

三、汉字输入系统码本的压缩

为了提高效率,在汉字输入系统中经常把全部或者部分码本驻留到内存中,但作为系统软件是不应该过多地消耗系统的内存资源,所以通常需要对汉字输入系统码本进行压缩处理,最常见的是对输入码的压缩。例如,全拼输入法我们就可以根据声母、韵母的特征对输入码进行压缩,对于数码类的输入法往往可以通过BCD码的方式压缩存储输入码。

实验原理

一、输入码本

通过Windows附带的输入法生成器可以得到Windows内置全拼输入法的拼音与汉字数据,该数据文件为一个文本文件,前面若干行是输入法的描述信息,其后是汉字或词组和拼音输入码的对应关系,每行存储一个汉字或词组与对应的拼音输入码。

二、从ANSI Code的文本文件中提出汉字与西文

由于在ANSI Code文件中,中文占两个字节,西文占一个字节,所以读取文件时可能需要知道读取的是中文还是西文。通过Windows API函数IsDBCSLeadByte可以判断一个字节是否是中文的第一个字节。

函数原型如下:

BOOLIs DBCSLeadByte(BYTE TestChar);

如果传入的参数是中文字符的第一个字节,则返回TRUE;如果返回FALSE,则表示该字节不是中文字符的第一个字节,或者出现了错误。

三、拼音的压缩

由于拼音由21个声母和35个韵母组成,在汉字输入时通常不考虑声调,因此可以采用压缩方法来存储输入码。声母合计有21个,可以用1~21表示,还有一种情况是无声母,可以用0表示,这样合计22种状态,需要用5位来存储;韵母合计有35个,可以用1~35表示,需要用6位来存储,那么一共需要11位存储。但是计算机分配存储的最基本单位是字节,为了方便起见,用2个字节合计16位存储,第1个字节存放声母,第2个字节存放韵母。表4.1是声母和韵母部分的压缩表

表4.1 声母和韵母部分的压缩表

显然经过如上处理,可以明显节约存储空间。韵母部分本来每个长度不尽相等,它的平均长度为2.4,现在编码后可以用定长1个字节存储韵母,不仅节约了存储,也便于程序处理。

实验环境

一、操作系统

Windows 2000以上版本,例如,Windows2000/XP/Vista/7/8/8.1/10等。

二、开发环境

C、C#或Java等语言集成开发环境。

实验步骤

一、使用输入法生成器,逆向生成全拼输入法的码本

Microsoft Windows中附带了一个称为“输入法生成器”的程序,该软件由Microsoft公司和北京中易电子公司合作开发。借助于该软件,用户提供一个输入法的码本和简单的输入法描述信息,就可以得到一个完全符合Windows IME规范的输入法程序,从而可以在Windows中使用该输入法。“输入法生成器”程序运行界面如图4.3所示。该程序同时还提供了“逆转换”功能,通过该功能,可以将Windows内置输入法的码本逆向转换出来。

图4.3 输入法生成器的界面

1.运行C:\Program Files\Windows NT\Accessories\Imegen.exe,打开“输入法生成器”。

2.单击“逆转换”选项卡,并单击“打开文件”,定位到C:\Windows\system32文件夹,找到winpy.mb文件,将显示如图4.4所示的界面。

3.单击“逆转换”按钮,很快将提示逆转换成功,此时将在C:\Windows\system32下生成一个winpy.txt的文本文件。

图4.4 通过输入法生成器逆向转换全拼输入法的码本

二、为全拼输入法构建一个变长单字码本

1.用记事本打开C:\Windows\system32\winpy.txt文件,观察文件的格式信息。

2.删除C:\Windows\system32\winpy.txt文件前面的输入法描述信息,只留下汉字和拼音的对照信息,然后保存为zici.txt。(存储时采用ANSICode编码)

3.编写程序读取zici.txt,将其中的单字和拼音行信息写入文件zi.txt,写入时格式如图4.5所示。

图4.5 拼音和单字对应关系

请在实验报告中列出你的源程序

4.用记事本打开zici.txt文件,另存为Unicode文件,文件名为zici_unicode.txt,编写程序读取zici_unicode.txt,将其中的单字和拼音信息写入文件zi_unicode.txt,写入时格式如图4.5所示。

请把源程序填写在实验报告中。

5.以前面的zi.txt或zi_unicode.txt作为输入,编写程序构造一个变长的单字输入码本zimb.txt,编码采用Unicode,写入时格式如图4.6所示。

图4.6 拼音和单字的对应关系

请在实验报告中列出你的源程序。(注意多音字的问题)

6.编写函数检索zimb.txt,将输入码转换为汉字串,函数原型如下:

int srm2hz(wchar*srm,wchar hz[1024]);

/*

本函数用于将输入码转换为对应的汉字串

参数:

wchar*srm 汉字输入码(unicode编码)

wchar hz[1024] 汉字结果串(unicode编码),长度小于1024

返回值:

>0 该输入码对应的汉字数

0 表示该输入码无对应汉字

*/

请在实验报告中给出该函数的实现代码。

三、拼音编码的压缩与变长字码本索引的构造

1.根据前面描述的拼音压缩方法,编写函数计算出一个拼音的压缩码。

函数原型如下:

void pyEncode(char py[],int code[2]);

请给出函数的实现代码,并在main函数中测试该函数。

2.编写程序读取zimb.txt文件,并为之生成索引文件zimb.idx。

索引文件的结构如下:

索引文件=<索引项><索引项>……<索引项>

<索引项>=<压缩的拼音输入码><该输入码数据在zimb.txt的偏移>

<压缩的拼音输入码>为2字节

<该输入码数据在zimb.txt的偏移>为2字节

请在实验报告中给出你的源程序。

3.编写函数并利用zimb.idx检索zimb.txt,将输入码转换为汉字串,函数原型如下:

int srm2hzbyindex(wchar*srm,wchar hz[1024]);

/*

本函数用于将输入码转换为对应的汉字串

参数:

wchar*srm 汉字输入码(unicode编码)

wchar hz[1024] 汉字结果串(unicode编码),长度小于1024

返回值:

>0 该输入码对应的汉字数

0 表示该输入码无对应汉字

*/

请在实验报告中给出该函数的实现代码。

思考题

1.用输入法生成器逆转换出拼音和郑码输入法的码本,仔细分析两个码本,然后考虑如何将两个码本合并处理后,再利用输入法生成器生成一个“拼音郑码输入法”,在该输入法中,既可以输入拼音也可以输入郑码检索汉字。

2.请设计一个码本结构,使得输入法能够实现动态调频(即根据用户的使用频度调整候选字词的顺序)。

3.因为不断出现新词,所以输入法的码本应该也要“与时俱进”。请设计一个码本结构,便于用户自定义新词和动态添加新词。

4.使用n-gram模型可以有效地计算出词组之间的搭配关系,从而智能地调节候选字词的先后顺序,最终便于用户输入。请设计一个bigram的附加码本结构,用于实现上下文相关调频。

参考文献

[1]黄国瑜,叶乃菁.数据结构(Java语言版)[M].北京:清华大学出版社,2002.1.

[2]严蔚敏,吴伟民.数据结构(C语言版)[M].北京:清华大学出版社,2012.5.

[3]陆剑江,钱培德,汉字输入法码本自动更正设计研究[J].中文信息学报,2002,06:53-57.

[4]张玉华,周克兰.基于规则库的汉字输入法自动评测系统的设计[J].中文信息学报,2004,04:50-54.

[5]韩卓平,李培峰,朱巧明,钱培德.基于Symbian的智能手机中文输入法的设计[J].计算机应用与软件,2007,09:85-87。

[6]张玉华,杨季文,周克兰.汉字编码输入法动态评测系统的设计和实现[J].计算机工程与应用,2006,25:93-97.

[7]李培峰,朱巧明,钱培德.一个基于ISO/IEC10646的汉字输入模型[J].中文信息学报,2006, 05:91-96.

[8]朱晓旭,钱培德.Windows Mobile Standard中文输入法设计实现[J].计算机工程与应用,2010, v.46;No.67205:63-65.

[9]吴娴,吕强,杨涛,杨季文,钱培德.论汉字码本数据库管理技术[J].中文信息学报,2003,02:48-53.

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈