论汉字码本数据库管理技术 吴 娴 苏州大学计算机工程系 苏州大学纵横汉字信息技术研究所
【摘 要】任何一种中文输入法的研究中都会遇到码本的处理问题。在不同的时期,由于应用需求的不同,使得码本呈现出不同的表现形式。本文首先提出了汉字码本数据库的概念,它是指能够实现汉字字符信息到其相应属性的对应关系的数据结构。之后,本文讨论了不同层次上的两种码本:数据库码本和二进制码本。根据实践的经验,文中将不同阶段的汉字码本数据库分成文本文件形式、数据库码本形式和二进制文件形式,并且分别讨论了对这些码本的管理技术。 【关键词】码本,数据库,汉字码本数据库,管理技术 1 、码本数据库由于汉字码本在不同层次的使用者和需求不同,所以必然采用不同的形式存贮。例如,在校对和统计应用方面,码本存贮适合用数据库;在发布应用中,码本适合压缩成二进制形式,再以特定的格式存贮。 所以,本文所指的码本数据库是指能够实现汉字字符信息到其相应属性的对应关系的数据结构。文本就是探讨有关这个结构的一些管理技术。 1.1 数据库码本由于校对和统计应用的工作一般是由人工来完成的,所以我们选择数据库这种有良好格式的媒体来存贮我们的码本数据。目前我们选择的数据库是 Microsoft的Visual FoxPro,以一些自由表的形式存贮数据,在必要的时候将这些自由表组织成数据库来管理。数据库表中主要存贮输入码和汉字内码的对应关系,再对汉字做一些其他信息的标注,比如使用频度,是否为容错码,是简体字还是繁体字(针对 GBK等UCS字符集)等等。以数据库表的形式存贮的这些信息非常有利于做编码的校对和统计工作,我们还可以用一些标准的SQL命令或者VFP提供的命令来批量处理表中的信息。1.2 压缩后的码本在发行阶段,要求我们的码本有这样一些特点:一是要便于用程序来处理它们,二是要尽量控制码本的大小,三是要做到码本的数据的保密。所以我们将码本压缩成二进制形式,以我们自己规定的格式进行存贮。一般来说,码本分为索引表和数据内容两个部分。 我们根据 ISO-10646标准专门设计了这样的码本结构,它更加有利于程序的处理。2 、文本文件的管理技术文本文件一般来说是码本数据库的信息来源,从某种角度来说,是生语料。因此,处理文本库是管理码本数据库的第一步。 2.1 用文字编辑工具处理文本在码本处理过程中,文本文件通常又可以作为一种中间形式出现。之所以有时候会用到文本文件来暂存码本,是因为它的易阅读性,可以被许多文字编辑软件显示并加工。但是由于它未经压缩和加密,又不可以用来当作最终码本的载体。 目前,在现有的文字编辑工具中, UltraEdit无疑是优秀的一员,特别在辅助处理码本的过程中,用处很大。除了一般的查找替换功能外,我们可以运用UltraEdit提供的十六进制和Ascii方式的转换,方便的观察文本文件的十六进制形式。当然,有时也要利用NotePad或Word来做一些处理,比如在Win2000下用NotePad将文本存贮成Unicode的内码,利用Word进行简繁体的转换等。但是,这些文字编辑工具都有其不足的地方,使得结果文本不能完全达到预期的目标,有时甚至会产生错误。比如, UltraEdit的查找替换是以字节流的方式进行的,对汉字不够敏感,常常会出现匹配到两个“半”汉字的情况。还有在用Word进行简体转换时,Word本身会将所有字符视为繁体字符,再转为简体。这样的结果是有些简体字经过Word的转换后变成了另外一些字。2.2 用自编程序处理文本无论是 UltraEdit还是NotePad或者Word,这些文字编辑工具还不足以处理具有复杂的应用需求的文本文件。在做信息转换的时候,这些工具也显得力不从心。这时候,文本文件的易阅读性也使得程序可以方便的加以处理。我们通常选择Turbo C或者Borland C++ Builder作为编程工具。对于格式规整且有明显分隔符的文件,程序处理起来非常的方便。对于那些格式杂乱、没有一致的分隔符的文本文件,必须由程序和人工共同处理。简单情况下,可以在文字编辑软件中利用查找和替换得到规范的文件再交程序处理。文件情况复杂时,首先可以通过人工的大致观察,取得文件的大致结构。之后,可以通过一些文字编辑软件进行统一的查找和替换,得到较规范的文件,交给程序进行格式化。这两个步骤不断重复,得到最终的文本。在程序中,也需要一些稍具“智能”的判断,最简单的比如对词条中汉字和 Ascii码的判断,这样可以避免不必要的错误或人工返工。3 、数据库码本的管理技术3.1 应用数据库本身的编程能力处理码本Microsoft 的Visual FoxPro为我们提供非常好的对数据库表的处理能力。在处理码本的时候,一般应该根据应用问题的繁简程度来选择是用一般的命令还是在Visual FoxPro中编写程序。在命令窗口中,我们可以利用 Visual FoxPro提供的各种命令对表进行统计和加工,以达到我们的要求。另外,Visual FoxPro还支持标准SQL语言,这些对做检查和统计工作非常有用。经过不断的使用和测试,发现Visual FoxPro运行标准SQL的效率不如它固有的命令。应该说, Visual FoxPro提供的编程能力是相当强大的,使用起来也不困难,有一点编程经验的人都可以很快上手。在Visual FoxPro中用程序解决的最常用的实例是在两表之间查找对应记录填充信息。这样的应用由程序来处理既快速又能保证正确。在不断的使用中,发现对需要查找的字段做索引是不可少的,否则将大大影响执行的效率。3.2 用其他的编程工具编写程序处理码本对于有些应用问题,用数据库提供的工具已经不足以解决问题,那么我们会采用其他的一些编程工具来处理。由于 Borland C++ Builder对数据库编程的良好支持和RAD的编程模式,它是数据库码本处理工具的良好选择。在这样几种情况下,我们会采用 Borland C++ Builder来处理码本:第一,需要和除数据库表之外的文件形式交换数据。在这种情况下,Visual FoxPro就会显得不那么灵活了。第二,含有逻辑比较复杂的运算、类型或结构。这时采用Borland C++ Builder是由于Visual FoxPro提供的数据表达的类型还不如C++那么丰富。经过长期的实践,我们认为对于数据库码本的加工,最好的方法是以某一个数据库应用软件为基础,利用它优秀的数据组织和管理能力,辅之以一个具有良好数据库编程能力的开发工具。这种做法往往会事半功倍。 4 、二进制文件的管理技术4.1 用二进制方式处理数据库表目前,我们遇到的这种特殊的以二进制方式处理数据库表的情况主要是以 Unicode编码方式存贮汉字字段。我们现在所用的数据库软件Visual FoxPro 6.0还不能够对以Unicode编码形式存贮的汉字内码进行常规操作,因此在需要更改内码编码方式的时候,我们做了下面一系列工作:1、从数据库表中将要替换的汉字字段(可以是字或词)导出成文本文件;2、用NotePad将文件以Unicode编码方式另存为另一个文件;3、用程序将Unicode编码填充到原始的数据库表中。这时候,我们必须以二进制方式写入原表的汉字字段。通过查阅资料和对数据库表的观察, Visual FoxPro的表结构是非常明确的。除去头结构,真正的数据部分实际是一些等长的记录,按照字段定义的顺序排列。程序只要找准源文件(含有Unicode编码的文本文件)和目标文件(数据库表)的起始偏移,顺序读取文本文件中汉字的Unicode内码,再填入目标文件的对应位置就可以了。Visual FoxPro 表中每条记录以一个删除标记开始,如果这个标记是0x2a,则表示被删除的记录,否则这个标记是0x20。由于这个特点,在有些应用逻辑下,可以用程序为某些符合一定条件的记录做删除标记。4.2 把文本文件压缩成二进制文件这一步工作主要是形成最终码本。一般来说,我们从数据库中导出需要的字段信息到文本文件中,再通过程序对文本文件进行必要的处理,如压缩,加密等等。压缩后码本的结构已经在 1.2节描述过了。字表和词表是压缩后码本的数据部分,其生成过程也是整个压缩程序的重点。 5 、结语本文在长期实践的基础上,对现行的汉字码本数据库做了大致的分类,并且针对每一种类型的码本文件提出了一系列行之有效的管理技术。我们认为这些技术对于在从事中文输入法研究的人来说,是值得推荐自动化高效技术。另外,本文也涉及了一些对于某种特定类型的生语料的加工技术。本文对中文信息处理的研究中规范化和非规范化资源的处理进行了有意义的实践。 |