全字索引词典的制作方法

文档序号:6483278阅读:495来源:国知局
专利名称:全字索引词典的制作方法
技术领域
本发明涉及一种词典索引构造方法,尤其是能应用在计算机文字处理过程中,可 以快速地搜索到所需的词条(词组),还可以进行非首字查询和模糊查询,与传统词典所使 用的首字索引方法不同。
背景技术
词典特别是计算机电子词典是人们在日常生活和科学研究工作中所不可缺少的。 编撰词典的目的是为人们查询词条提供方便,因此如何对词典中的词条进行索引起着相当 重要的作用,直接影响词条查询的效率。自从中文词典诞生以来,采用的词条检索方式就是一种以首字为索引记录词条的 方式。例如,在《辞海》中查询一个词条的方式如下首先根据词条中的第一个字的部首检 索出部首所在索引页,然后在部首索引页所列的字中检索出该字所在的正文页,翻到相应 的正文页,依次检索以该字开头的词条直到找到所需的词条。可以看出,在词典中检索词条 的过程可以分为首字的检索和依次查找词条两步。其中,随着汉语拼音的推广和水平的提 高,一些人会偏爱使用汉语拼音进行首字的检索。中文词典的这种索引方式基本上不存在冗余,即任何词条在词典中仅出现一次。 为了查找方便,也可以对某些字或词条加上“参见XX字或词条”的方式,但是一般而言,这 种索引方式不方便进行非首字和模糊查找。显然,西文也采用同样的方式进行词及词组的检索,例如,英文词典就是按照首字 母进行一级索引的。西文词典不同于中文的地方主要在于西文最小的单位就是词条而不是 字(字母),而且在应用词条进行写作时每个词条之间用空格或标点符号分隔。随着计算机技术的应用,电子词典得到了广泛的应用,由于其使用方便、效率高而 逐渐取代了纸制词典。电子词典不仅为一般用户查找词条提供了方便,更重要的是,电子词 典也是自然语言理解、文档搜索等方面的基础,尤其在进行中文分词时起着非常重要的作 用。通过检索近年来百余篇相关论文和在国家知识产权局专利检索网页上使用关键 词“词典”进行检索发现目前中文词典索引方式在本质上仍然采用传统的方法,是传统索 引方法的计算机化,未发现对词条全部字都进行索引的词典索引构造方法。归纳而言,基本 的中文词典索引实现方式有如下几种(1)有序线性词典结构词典正文以词条为单位进行有序排列,初始化时读取到内存。在有序线性词典结 构中,词典正文中通过整词二分进行定位。这种词典结构算法简单、易于实现、有效空间使 用率高,缺点是查找效率低,而且更新代价高。在添加新词时需要移动词典中的词条来保证 有序性,当词典比较大时需要花费相当长的时间。(2)基于整词二分的词典结构将词典分为词典正文、词索引表、首字散列表三级。词典正文是以词条为单位的有序表,词索引表是指向词典正文中每个词条的指针表。通过首字散列表的哈希定位和词索 引表确定指定词条在词典正文中的可能位置范围,进而在词典正文中通过整词二分进行定 位。
(3)基于TRIE索引树的分词词典机制TRIE索引树是一种以树的多重链表形式表示的键树。基于TRIE索引树的分词词 典机制由首字散列表和TRIE索引树结点两部分组成。TRIE索引树将词索引表用树的方式 组织起来,这种结构在对中文语句进行分词扫描时具有较大优点,可以不需预知待查询词 的长度,只需沿着树链逐字匹配即可;它的缺点是构造和维护比较复杂,而且都是单词树枝 (一条树枝仅代表一个词),浪费了一定的空间。为了提高查询的效率,减少词典更新维护难度,许多学者对上述三种基本词典结 构进行了一些改进,例如(1)基于双字哈希的分词词典机制该机制吸纳了 “整词二分”及“TRIE索引树”二者的优点,仅对词语的前两个字顺 次建立哈希索引,构成深度仅为2的TRIE子树,词条的剩余字串按序组成类似“整词二分” 的词典正文。(2)基于分层逐字二分算法的中文词典结构以较小的容量代价来提高词表的查找速度是这种词典结构的设计目标。它采用树 状结构表示中文词典。词典的第一层以中文词条的首字作为索引,采用哈希表存储,以提高 首字的查找速度。第二层则以首字作为根节点,将所有首字相同的词组成一棵树。因为在 汉语中二字词较多,所以在森林的第二层,采用线性顺序表来存储词条的第二个字,去除相 同的字并形成一个有序的线性表,然后将此汉字为首的单词的剩余部分形成树。(3)基于自动机的分词词典机制在词典中对于特定的首字,前两字相同的词条很少,前三字相同的词条更少。当采 用自动机的方式组织词典后,除子表的第一层外,各个节点的兄弟数目都很小,对它们的查 找可采用顺序查找方法。(4)树形结构词典把每一个汉字作为一个单元存储,词就表示成汉字之间的关系。#表示树形字典的 根。*是终止符,表示从根部到该字构成一个词典词。该方法与TRIE树结构类似,由于使用 了终止符,可以节省一些存储空间。(5)多次Hash词典组织方式该词典由首字Hash表、词次字Hash表、词次字结构、词余字索引表、词余字词典正 文等部分组成。该方法也是基于中文中两字词比较多的情况设计的。经过多年的努力,中文词典的查询效率得到了极大的提高,但是词典的维护却变 得更加复杂;同时,由于上述词典设计的主要目的是进行中文分词,所以忽略了中文词典的 其他功能的使用,影响了这些词典的应用。主要参考文献[1]周程远,朱敏,杨云。基于词典的中文分词算法研究[J]。计算机与数字工程, 2009,37(3) 68-71[2]李庆虎,陈玉健,孙家广。一种中文分词词典新机制一双字哈希机制[J]。中文信息学报,2003,17 (4) 13-18[3]罗洋。汉语自动分词方法的综述[J]。科技信息,2009. 7 :596,634[4]吴建胜,战学刚,迟呈英。一种基于自动机的分词方法[J]。计算机工程与应 用,2005. 8.[5]赵远东,陈康,陈建华。基于全文检索的Segmenter分词算法改进[J]。电脑 知识与技术,2009,5(1) 202-205[6]张科。多次Hash快速分词算法[J]。计算机工程与设计,2007,28 (7) 1716-1718

发明内容
为了克服现有的面向计算机的中文电子词典构建与维护的不足,增强电子词典的 功能,本发明提出一种新的对词条全部字都建立索引的词典构建方法。该方法的特点是首 先为每个字(包括汉字、英文字母和其他字符)建立一个哈希表;然后为每个词条建立词典 正文并予以编号;将每个词条分解成字;最后将词条分解的结构信息(包括词条的编号和 每个字在词条中的位置信息)记入每个分解字的词条信息结构中。当用户使用该词典进行 词条查询时,只需要将该词条包含在每个字中的词条信息取出,然后按照词条编号和位置 进行匹配,匹配成功的词条就是用户所需要的词条。当用户增加新词条时,只要将该词条分 解并将其词条编号和分解字的位置信息写入对应的字的词条信息结构中即可。而当用户删 除一个词条时,只要检索该词条,然后将该词条的信息从对应的字的词条信息结构中删除 即可。本发明所采用的技术方案如图1所示步骤1 对所有的词条进行编号。例如可以按照词条出现的先后次序进行编号,不 必要求一定要按照传统字典的首字顺序对词条进行排列与编号,即只要保证每个词条的编 号是唯一的即可;步骤2 分配一个128X128的字符对象数组,将所有常用字(所有用一个和两个 字节表示的符合计算机标准的字符,包括国标二级汉字、ASCII码和其他字符等,这里统称 为字或字符)都根据计算机内码与该数组建立映射关系。映射方法是内码小于128的 字符直接用该内码作为数组的下标,而内码大于128的字符则用下面值作为数组的下标 128 X (H-0x80) + (L-0x80)。这里H是汉字的高字节,L是汉字的低字节;步骤3 将词典中的每一个词条分解为字,例如将词条“词典”分解为“词”和“典” 两个字;步骤4 将每个词条的分解信息加入到相应的字所包含的词条信息结构中去。例 如,假定词条“词典”的编号为n,则在“词”的词条信息结构中加入一条词条信息编号为 η、位置为0 ;而在“典”的词条信息结构中加入一条词条信息编号为η、位置为1。本发明所带来的有益效果是,既可以非常方便地对词典进行构建、增加、删除等操 作,不需要对词条进行排序等额外的处理,查询效率高,又可以增强词典的查询功能,即不 仅可以实现词条的首字查询、中英文混合查询,还可以实现任意字的查询及模糊查询,有利 于用户对词典的综合利用。


下面结合附图和实施例对本发明进一步说明。图1是本发明的方案图。
具体实施方式
如图1所示,以中文电子词典作为说明对象,以VC++为开发语言,以本发明人开发 的WordSegmentate系统为依据,根据本发明所揭示的词典倒排索引的原理和实现方案为步骤1 建立每个字符对象类CWord如下class Cfford{char m_fford[3] ;//当前字符机内码CffordLi st*m_ffordLi st 1 ;// 位置 1CffordLi st*m_ffordLi st2 ;// 位置 2CffordLi st*m_ffordLi st3 ;// 位置 3CffordLi st*m_ffordLi st4 ;// 位置 4CffordLi st*m_ffordLi st5 ;// 位置 5 及其它}图1中(101)所指的对象即为CWord对象。CWord中的CWordList成员变量为词 条链,记录相关词条的信息。记录一条词条信息的对象称为词条链节,如图1(102)所示,其 结构为class CffordList{int m_ffordNumber ;// 词条号byte m_Position ;// 在词条中的位置CWordLi st*m_Next ;//指向下一个}若干个词条链节通过m_NeXt指针串接成为词条链。CWord字符对象中有多个词条 链,其中词条链111_1(^(11^计1 m_WordList4分别表示该字符出现在词条中的位置为1 4,而词条链!11_101~(11^计5则表示该字符出现在词条中的位置大于4,因为字符的个数大于4 的词条相对来说比较少,所以就用一个词条链来全部表示。将5个词条链的所有词条链节 都各自按它们词条号大小顺序进行连接,以加快词条的查询速度;步骤2 建立记录每个词条内容的词典类dictionary如下class CDictionary{Char*m_Meaning ;// 词条的含义byte m_Total ;//词条中字的个数,中文占两个字节,ASCII码占一个字节byte m_Type ;// 词性}dictionary主要用于词条的解释,对于索引结构来说,m_Total项是最有价值的;步骤3:建立词条数据文件。词条数据文件可以按照一行一个词条建立。词条数 据文件中词条之间没有顺序关系要求,也可以重复。为了减少词典读入计算量,提高查询速 度,最好将重复的词条去掉。词条可以中西文夹杂,例如可以有“II型心脏病”。词条中最 好不要出现用于分隔的停用词,如逗号、冒号等;步骤4:建立哈希表。分配一个128X128的CWord类型的数组,如图1中(101)所 示的一列CWord对象。将所有常用字都根据计算机内码与该数组建立映射关系。映射方法 是内码小于128的字符直接用该内码作为数组的下标,而内码大于128的字符则用下面数 字作为数组的下标128X (H-OxSO)+ (L-OxSO)。使用这种映射方式 而不使用常用的偏移计 算方式虽然占用的空间稍大了一点,而且存在少量的空闲元素,但便于进行功能的扩展,例 如可以包含自定义字符,同时,计算也比较方便、快捷;步骤5 逐行读入词条数据文件。每一行即为一个词条,以递增方式为每个词条自 动编号,并将每一个词条分解为字,例如将词条“计算机”分解为“计”、“算”和“机” 3个字;步骤6 将每个词条的分解信息加入到对应的字所包含的词条信息结构中去。例 如,假定词条“计算机”的自动编号为n,则根据哈希表找到“计”、“算”、“机” 3个CWord字 符对象,然后在“计”对应的CWord字符对象的m_WordListl链中加入一个链节,记录如下 词条信息编号η、位置O ;在“算”对应的CWord字符对象的WordList2链中加入一个链节, 记录如下词条信息编号η、位置1 ;在“机”对应的CWord字符对象的WordList3链中加入 一个链节,记录如下词条信息编号η、位置2。例如,图1中(103)表示了一个由3个字组 成的词条;步骤7 重复步骤5和步骤6,直到将词条数据文件中全部词条都按上述方式加入 到对应的CWord对象中,此时词典索引结构就宣告建立完成。下面用4个例子介绍如何使用该索引结构。例1:中文分词查询已知一串包含中西文的字符串S。任务将该字符串按照从左至右、最大匹配原则进行分词。解答从左至右开始选取一个字,根据哈希表找到对应的CWord对象W1,获得它的 m_ffordListl ;然后选取第二个字,同样获得CWord对象W2及m_WordList2,对两者进行比 较,只有词条号相同的词条链节才保留;对后面的字重复同样的过程直到不存在词条链节 为止。然后向前进行回退。假定当前选字的个数为ns,则回退停止的条件是词条链中至 少存在一个词条链节,它记录的字的个数nw等于当前选字的个数ns或者ns= 1。这样8中 的前ns字就构成了一个合法的词条。从ns位置开始重复上述过程直到将全部s切分完成。为了提高计算速度,还可以对词条链中的词条连接按照编号进行排序。虽然从理 论上说,在进行分词计算时本索引结构比目前最快的TRIE等结构要慢一点,但由于在汉字 中许多字的交集比较小,而且进行的比较运算比较简单,所以本发明的计算速度仍然是非 常快的。例如,本发明人使用主频1.8G,内存1.5G,装入包含90000多词条的知网词典对 50K字节的包含11768个词的语料文件进行分词,用时3359毫秒,可以满足应用需要。
例2 模糊成语词条查询 已知成语中包含若干个字,不知它们之间的顺序关系。任务将所有包含这些字的词条找出来。解答选取一个字,根据哈希表找到对应的CWord对象W1,获得全部的词条链m_ WordListl m_WordList5 ;然后选取第二个字,同样获得CWord对象W2及全部的词条,对 两者进行比较,只有词条号相同的词条链节才保留;重复同样的过程直到全部已知的字都 进行比较完成。如果最后不存在一个满足条件的词条链节,则说明不存在同时包含这些字的成 语。如果存在,则包含这些字的词条就是全部词条链节中词条编号指向的词条。例3 在词典中增加一个词条已知一个新词条。任务将该词条加入到词典中。解答为新词条进行编号,不妨记为n,然后将该词条分解为字,根据哈希表找到 每个字对应的CWord对象Wi (它在词条中的位置为i),将η和i加入到Wi对应的词条链中 即完成新词条的添加。例4 从词典中删除一个词条已知需要删除的词条。任务将该词条从词典中删除。解答按照例1的方法检索得到该词条对应的词条编号,然后将词条分解得到的 全部字中词条编号等于该词条编号的词条链节删除即可。本具体实施步骤特别适合中文信息的处理,也可用于西文字或词的处理,虽然西 文的书写习惯可以自动进行分词处理,但是也可以将其看作以字母为基本字符的词条组 合。由于可以统一考虑中西文词条,所以本发明可以比较容易地处理中西文混合词条。对本领域的普通技术人员而言,本发明所涉及的数据结构和算法是计算机程序开 发中的基本数据结构和算法,可以在一般的计算机系统中实现,举例而言,本发明人使用高 级程序设计语言VC++实现了该词典并进行了中文分词运算,其数据结构和算法可以通过 一个简单的程序转化改写为VB、Java等语言程序。以上所述,仅为本发明其中的较佳实施例而已,并非用来限制本发明的实施范围; 即凡依本发明申请专利范围所作的均等变化与修饰,皆为本发明专利范围所涵盖。
权利要求
一种词典索引构造方法,应用于计算机文字处理,其特征是建立一个字符类对象数组,通过将所有常用字的计算机内码映射为一个字符类对象数组的下标来表示该常用字,并在每个字符类对象数组元素中记录该字符所涉及全部词条的词条组成关系信息。
2.根据权利要求1所述的词典索引构造方法,其特征是字符类对象数组是一个 128X128的数组。
3.根据权利要求1所述的词典索引构造方法,其特征是所有常用字为用一个和两个 字节表示的符合计算机标准的字符,包括国标二级汉字、ASCII码和其他字符等。
4.根据权利要求1所述的词典索引构造方法,其特征是西文字符的内码直接 作为该西文字符的字符类对象数组的下标,而汉字字符的两个内码H和L按照公式 128X (H-OxSO)+ (L-OxSO)映射为一个128X128内的数作为该汉字字符的字符类对象数组 的下标。
5.根据权利要求1所述的词典索引构造方法,其特征是每个字符类对象包含该字符 的机内码及表示词条组成关系的词条链。
6.根据权利要求5所述的词典索引构造方法,其特征是每个词条链是由若干个词条 链节首尾相连而成。
7.根据权利要求6所述的词典索引构造方法,其特征是每个词条链节中包含词条的 编号、当前字符在词条中的位置以及下一个词条链的指针。
8.根据权利要求5所述的词典索引构造方法,其特征是每个字符类对象中的词条链 按照该字符在词条中的位置分成5类,分别表示该字符处在词条第一、第二、第三、第四以 及其他位置时的情况。
9.根据权利要求8所述的词典索引构造方法,其特征是在分类的词条链中,词条链节 按照词条的编号大小进行排序。
全文摘要
一种词典索引构造方法,应用于中西文词条的文字处理,特别是中文词条的分词和查询。它对词典中每个词条的全部字符建立索引关系而不仅仅建立首字索引关系,通过字符的内码映射到对应的字符入口,然后将每个词条的编号及组成的字所在位置记录在对应字符中的词条链中。这样在进行词条查询时,可以通过对词条组成的全部字符的词条链中的词条编号和位置进行比较获得所需的词条。该方法结构简单,很容易实现词典的构造、添加、删除等维护工作;能够满足中文分词对速度的要求;也可以进行中西文混合处理。此外,还可以实现其它词典索引方法比较难以实现的非首字查询和模糊查询。
文档编号G06F17/30GK101944086SQ20091006310
公开日2011年1月12日 申请日期2009年7月10日 优先权日2009年7月10日
发明者尹文生 申请人:华中科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1