CN101944086A - 全字索引词典 - Google Patents
全字索引词典 Download PDFInfo
- Publication number
- CN101944086A CN101944086A CN2009100631031A CN200910063103A CN101944086A CN 101944086 A CN101944086 A CN 101944086A CN 2009100631031 A CN2009100631031 A CN 2009100631031A CN 200910063103 A CN200910063103 A CN 200910063103A CN 101944086 A CN101944086 A CN 101944086A
- Authority
- CN
- China
- Prior art keywords
- entry
- character
- dictionary
- word
- chinese
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Machine Translation (AREA)
Abstract
一种词典索引构造方法,应用于中西文词条的文字处理,特别是中文词条的分词和查询。它对词典中每个词条的全部字符建立索引关系而不仅仅建立首字索引关系,通过字符的内码映射到对应的字符入口,然后将每个词条的编号及组成的字所在位置记录在对应字符中的词条链中。这样在进行词条查询时,可以通过对词条组成的全部字符的词条链中的词条编号和位置进行比较获得所需的词条。该方法结构简单,很容易实现词典的构造、添加、删除等维护工作;能够满足中文分词对速度的要求;也可以进行中西文混合处理。此外,还可以实现其它词典索引方法比较难以实现的非首字查询和模糊查询。
Description
技术领域
本发明涉及一种词典索引构造方法,尤其是能应用在计算机文字处理过程中,可以快速地搜索到所需的词条(词组),还可以进行非首字查询和模糊查询,与传统词典所使用的首字索引方法不同。
背景技术
词典特别是计算机电子词典是人们在日常生活和科学研究工作中所不可缺少的。编撰词典的目的是为人们查询词条提供方便,因此如何对词典中的词条进行索引起着相当重要的作用,直接影响词条查询的效率。
自从中文词典诞生以来,采用的词条检索方式就是一种以首字为索引记录词条的方式。例如,在《辞海》中查询一个词条的方式如下:首先根据词条中的第一个字的部首检索出部首所在索引页,然后在部首索引页所列的字中检索出该字所在的正文页,翻到相应的正文页,依次检索以该字开头的词条直到找到所需的词条。可以看出,在词典中检索词条的过程可以分为首字的检索和依次查找词条两步。其中,随着汉语拼音的推广和水平的提高,一些人会偏爱使用汉语拼音进行首字的检索。
中文词典的这种索引方式基本上不存在冗余,即任何词条在词典中仅出现一次。为了查找方便,也可以对某些字或词条加上“参见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:分配一个128×128的字符对象数组,将所有常用字(所有用一个和两个字节表示的符合计算机标准的字符,包括国标二级汉字、ASCII码和其他字符等,这里统称为字或字符)都根据计算机内码与该数组建立映射关系。映射方法是:内码小于128的字符直接用该内码作为数组的下标,而内码大于128的字符则用下面值作为数组的下标:128×(H-0x80)+(L-0x80)。这里H是汉字的高字节,L是汉字的低字节;
步骤3:将词典中的每一个词条分解为字,例如将词条“词典”分解为“词”和“典”两个字;
步骤4:将每个词条的分解信息加入到相应的字所包含的词条信息结构中去。例如,假定词条“词典”的编号为n,则在“词”的词条信息结构中加入一条词条信息:编号为n、位置为0;而在“典”的词条信息结构中加入一条词条信息:编号为n、位置为1。
本发明所带来的有益效果是,既可以非常方便地对词典进行构建、增加、删除等操作,不需要对词条进行排序等额外的处理,查询效率高,又可以增强词典的查询功能,即不仅可以实现词条的首字查询、中英文混合查询,还可以实现任意字的查询及模糊查询,有利于用户对词典的综合利用。
附图说明
下面结合附图和实施例对本发明进一步说明。
图1是本发明的方案图。
具体实施方式
如图1所示,以中文电子词典作为说明对象,以VC++为开发语言,以本发明人开发的WordSegmentate系统为依据,根据本发明所揭示的词典倒排索引的原理和实现方案为:
步骤1:建立每个字符对象类CWord如下:
class CWord
{
char m_Word[3]; //当前字符机内码
CWordList*m_WordList1;//位置1
CWordList*m_WordList2;//位置2
CWordList*m_WordList3;//位置3
CWordList*m_WordList4;//位置4
CWordList*m_WordList5;//位置5及其它
}
图1中(101)所指的对象即为CWord对象。CWord中的CWordList成员变量为词条链,记录相关词条的信息。记录一条词条信息的对象称为词条链节,如图1(102)所示,其结构为:
class CWordList
{
int m_WordNumber;//词条号
byte m_Position;//在词条中的位置
CWordList*m_Next;//指向下一个
}
若干个词条链节通过m_Next指针串接成为词条链。CWord字符对象中有多个词条链,其中词条链m_WordList1~m_WordList4分别表示该字符出现在词条中的位置为1~4,而词条链m_WordList5则表示该字符出现在词条中的位置大于4,因为字符的个数大于4的词条相对来说比较少,所以就用一个词条链来全部表示。将5个词条链的所有词条链节都各自按它们词条号大小顺序进行连接,以加快词条的查询速度;
步骤2:建立记录每个词条内容的词典类CDictionary如下:
class CDictionary
{
Char*m_Meaning;//词条的含义
byte m_Total;//词条中字的个数,中文占两个字节,ASCII码占一个字节
byte m_Type;//词性
}
CDictionary主要用于词条的解释,对于索引结构来说,m_Total项是最有价值的;
步骤3:建立词条数据文件。词条数据文件可以按照一行一个词条建立。词条数据文件中词条之间没有顺序关系要求,也可以重复。为了减少词典读入计算量,提高查询速度,最好将重复的词条去掉。词条可以中西文夹杂,例如可以有“II型心脏病”。词条中最好不要出现用于分隔的停用词,如逗号、冒号等;
步骤4:建立哈希表。分配一个128×128的CWord类型的数组,如图1中(101)所示的一列CWord对象。将所有常用字都根据计算机内码与该数组建立映射关系。映射方法是:内码小于128的字符直接用该内码作为数组的下标,而内码大于128的字符则用下面数字作为数组的下标:128×(H-0x80)+(L-0x80)。使用这种映射方式而不使用常用的偏移计算方式虽然占用的空间稍大了一点,而且存在少量的空闲元素,但便于进行功能的扩展,例如可以包含自定义字符,同时,计算也比较方便、快捷;
步骤5:逐行读入词条数据文件。每一行即为一个词条,以递增方式为每个词条自动编号,并将每一个词条分解为字,例如将词条“计算机”分解为“计”、“算”和“机”3个字;
步骤6:将每个词条的分解信息加入到对应的字所包含的词条信息结构中去。例如,假定词条“计算机”的自动编号为n,则根据哈希表找到“计”、“算”、“机”3个CWord字符对象,然后在“计”对应的CWord字符对象的m_WordList1链中加入一个链节,记录如下词条信息:编号n、位置0;在“算”对应的CWord字符对象的WordList2链中加入一个链节,记录如下词条信息:编号n、位置1;在“机”对应的CWord字符对象的WordList3链中加入一个链节,记录如下词条信息:编号n、位置2。例如,图1中(103)表示了一个由3个字组成的词条;
步骤7:重复步骤5和步骤6,直到将词条数据文件中全部词条都按上述方式加入到对应的CWord对象中,此时词典索引结构就宣告建立完成。
下面用4个例子介绍如何使用该索引结构。
例1:中文分词查询
已知:一串包含中西文的字符串s。
任务:将该字符串按照从左至右、最大匹配原则进行分词。
解答:从左至右开始选取一个字,根据哈希表找到对应的CWord对象w1,获得它的m_WordList1;然后选取第二个字,同样获得CWord对象w2及m_WordList2,对两者进行比较,只有词条号相同的词条链节才保留;对后面的字重复同样的过程直到不存在词条链节为止。
然后向前进行回退。假定当前选字的个数为ns,则回退停止的条件是:词条链中至少存在一个词条链节,它记录的字的个数nw等于当前选字的个数ns或者ns=1。这样s中的前ns字就构成了一个合法的词条。
从ns位置开始重复上述过程直到将全部s切分完成。
为了提高计算速度,还可以对词条链中的词条连接按照编号进行排序。虽然从理论上说,在进行分词计算时本索引结构比目前最快的TRIE等结构要慢一点,但由于在汉字中许多字的交集比较小,而且进行的比较运算比较简单,所以本发明的计算速度仍然是非常快的。例如,本发明人使用主频1.8G,内存1.5G,装入包含90000多词条的知网词典对50K字节的包含11768个词的语料文件进行分词,用时3359毫秒,可以满足应用需要。
例2:模糊成语词条查询
已知:成语中包含若干个字,不知它们之间的顺序关系。
任务:将所有包含这些字的词条找出来。
解答:选取一个字,根据哈希表找到对应的CWord对象w1,获得全部的词条链m_WordList1~m_WordList5;然后选取第二个字,同样获得CWord对象w2及全部的词条,对两者进行比较,只有词条号相同的词条链节才保留;重复同样的过程直到全部已知的字都进行比较完成。
如果最后不存在一个满足条件的词条链节,则说明不存在同时包含这些字的成语。如果存在,则包含这些字的词条就是全部词条链节中词条编号指向的词条。
例3:在词典中增加一个词条
已知:一个新词条。
任务:将该词条加入到词典中。
解答:为新词条进行编号,不妨记为n,然后将该词条分解为字,根据哈希表找到每个字对应的CWord对象wi(它在词条中的位置为i),将n和i加入到wi对应的词条链中即完成新词条的添加。
例4:从词典中删除一个词条
已知:需要删除的词条。
任务:将该词条从词典中删除。
解答:按照例1的方法检索得到该词条对应的词条编号,然后将词条分解得到的全部字中词条编号等于该词条编号的词条链节删除即可。
本具体实施步骤特别适合中文信息的处理,也可用于西文字或词的处理,虽然西文的书写习惯可以自动进行分词处理,但是也可以将其看作以字母为基本字符的词条组合。由于可以统一考虑中西文词条,所以本发明可以比较容易地处理中西文混合词条。
对本领域的普通技术人员而言,本发明所涉及的数据结构和算法是计算机程序开发中的基本数据结构和算法,可以在一般的计算机系统中实现,举例而言,本发明人使用高级程序设计语言VC++实现了该词典并进行了中文分词运算,其数据结构和算法可以通过一个简单的程序转化改写为VB、Java等语言程序。
以上所述,仅为本发明其中的较佳实施例而已,并非用来限制本发明的实施范围;即凡依本发明申请专利范围所作的均等变化与修饰,皆为本发明专利范围所涵盖。
Claims (9)
1.一种词典索引构造方法,应用于计算机文字处理,其特征是:建立一个字符类对象数组,通过将所有常用字的计算机内码映射为一个字符类对象数组的下标来表示该常用字,并在每个字符类对象数组元素中记录该字符所涉及全部词条的词条组成关系信息。
2.根据权利要求1所述的词典索引构造方法,其特征是:字符类对象数组是一个128×128的数组。
3.根据权利要求1所述的词典索引构造方法,其特征是:所有常用字为用一个和两个字节表示的符合计算机标准的字符,包括国标二级汉字、ASCII码和其他字符等。
4.根据权利要求1所述的词典索引构造方法,其特征是:西文字符的内码直接作为该西文字符的字符类对象数组的下标,而汉字字符的两个内码H和L按照公式128×(H-0x80)+(L-0x80)映射为一个128×128内的数作为该汉字字符的字符类对象数组的下标。
5.根据权利要求1所述的词典索引构造方法,其特征是:每个字符类对象包含该字符的机内码及表示词条组成关系的词条链。
6.根据权利要求5所述的词典索引构造方法,其特征是:每个词条链是由若干个词条链节首尾相连而成。
7.根据权利要求6所述的词典索引构造方法,其特征是:每个词条链节中包含词条的编号、当前字符在词条中的位置以及下一个词条链的指针。
8.根据权利要求5所述的词典索引构造方法,其特征是:每个字符类对象中的词条链按照该字符在词条中的位置分成5类,分别表示该字符处在词条第一、第二、第三、第四以及其他位置时的情况。
9.根据权利要求8所述的词典索引构造方法,其特征是:在分类的词条链中,词条链节按照词条的编号大小进行排序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009100631031A CN101944086A (zh) | 2009-07-10 | 2009-07-10 | 全字索引词典 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009100631031A CN101944086A (zh) | 2009-07-10 | 2009-07-10 | 全字索引词典 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101944086A true CN101944086A (zh) | 2011-01-12 |
Family
ID=43436080
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009100631031A Pending CN101944086A (zh) | 2009-07-10 | 2009-07-10 | 全字索引词典 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101944086A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102759988A (zh) * | 2011-04-27 | 2012-10-31 | 北京四维图新科技股份有限公司 | 动态拼音反馈的方法及装置 |
CN103678385A (zh) * | 2012-09-18 | 2014-03-26 | 西安邮电大学 | 一种适用于移动搜索的个性化词典构造方法 |
CN103793440A (zh) * | 2012-11-02 | 2014-05-14 | 阿里巴巴集团控股有限公司 | 信息显示方法和装置 |
CN104462104A (zh) * | 2013-09-16 | 2015-03-25 | 华为软件技术有限公司 | 过滤方法和服务器 |
CN112015853A (zh) * | 2020-05-22 | 2020-12-01 | 同济大学 | 图书搜索方法、图书搜索系统、电子装置及介质 |
CN113111655A (zh) * | 2021-05-12 | 2021-07-13 | 数库(上海)科技有限公司 | 分离词典的构建方法、基于分离词典的分词方法及设备 |
-
2009
- 2009-07-10 CN CN2009100631031A patent/CN101944086A/zh active Pending
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102759988A (zh) * | 2011-04-27 | 2012-10-31 | 北京四维图新科技股份有限公司 | 动态拼音反馈的方法及装置 |
CN103678385A (zh) * | 2012-09-18 | 2014-03-26 | 西安邮电大学 | 一种适用于移动搜索的个性化词典构造方法 |
CN103678385B (zh) * | 2012-09-18 | 2019-01-11 | 西安邮电大学 | 一种适用于移动搜索的个性化词典构造方法 |
CN103793440A (zh) * | 2012-11-02 | 2014-05-14 | 阿里巴巴集团控股有限公司 | 信息显示方法和装置 |
CN104462104A (zh) * | 2013-09-16 | 2015-03-25 | 华为软件技术有限公司 | 过滤方法和服务器 |
CN104462104B (zh) * | 2013-09-16 | 2019-03-19 | 华为软件技术有限公司 | 过滤方法和服务器 |
CN112015853A (zh) * | 2020-05-22 | 2020-12-01 | 同济大学 | 图书搜索方法、图书搜索系统、电子装置及介质 |
CN112015853B (zh) * | 2020-05-22 | 2024-04-09 | 同济大学 | 图书搜索方法、图书搜索系统、电子装置及介质 |
CN113111655A (zh) * | 2021-05-12 | 2021-07-13 | 数库(上海)科技有限公司 | 分离词典的构建方法、基于分离词典的分词方法及设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7031910B2 (en) | Method and system for encoding and accessing linguistic frequency data | |
US8620900B2 (en) | Method for using dual indices to support query expansion, relevance/non-relevance models, blind/relevance feedback and an intelligent search interface | |
CN100444167C (zh) | 完美双数组trie树词典管理与检索方法 | |
US8572126B2 (en) | Systems and methods for optimizing very large n-gram collections for speed and memory | |
EP1234258B1 (en) | System for managing rdbm fragmentations | |
CN1661593B (zh) | 一种计算机语言翻译方法及其翻译系统 | |
JPWO2009063925A1 (ja) | 文書管理・検索システムおよび文書の管理・検索方法 | |
CN107844493B (zh) | 一种文件关联方法及系统 | |
CN101944086A (zh) | 全字索引词典 | |
CN115391495B (zh) | 在中文语境中检索关键词的方法、装置及设备 | |
CN103365914A (zh) | 基于搜索引擎的数据库查询系统和方法 | |
CN103365992A (zh) | 一种基于一维线性空间实现Trie树的词典检索方法 | |
CN112231321A (zh) | 一种Oracle二级索引及索引实时同步方法 | |
CN101251847A (zh) | 一种适用于移动设备的电子词典词库结构 | |
Flor | A fast and flexible architecture for very large word n-gram datasets | |
Cordova et al. | Simple and efficient fully-functional succinct trees | |
CN102402540A (zh) | 基于多层优化平衡树的数值与文本混合倒排索引算法 | |
CN111737482B (zh) | 一种适用于数据挖掘的全景可视化图谱生成方法及装置 | |
CN110717014B (zh) | 一种本体知识库动态构建方法 | |
Boffa et al. | Compressed string dictionaries via data-aware subtrie compaction | |
CN101452459A (zh) | 利用索引查找相似翻译结果的系统及其方法 | |
JP2005242416A (ja) | 自然言語文の検索方法および検索装置 | |
Arseneau et al. | STILT: Unifying spatial, temporal and textual search using a generalized multi-dimensional index | |
JP3728264B2 (ja) | インデックス作成装置、検索システム、及び制御方法 | |
CN117235291B (zh) | 基于静态索引表的全文检索方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20110112 |