一种利用字母索引表查询电子词典单词的方法及其系统的制作方法

文档序号:6558837阅读:308来源:国知局
专利名称:一种利用字母索引表查询电子词典单词的方法及其系统的制作方法
技术领域
本发明涉及一种电子词典单词的快速查询方法及其系统。
背景技术
一般地,词典查询采用索引结构进行单词查询,即在用户输入单词的过程中通过单词的部分或全部内容(如前几个字母),在词典的索引中来查询单词的相关内容。
请参见图1,是现有技术电子词典索引数据结构示意图,其包括词典数据库,存储有每个单词的数据;地址索引表,包含指向每个单词数据的地址。数据库中的单词数据和索引表中的地址是按相同顺序连续存储的。用户在输入单词后,采用折半查找法从地址索引表中取出一个单词的地址,依照该地址从词典数据库取出该单词的主题词,然后把取出的主题词与输入的字符串进行比较,判断是否是与输入字符串相同或最接近输入字符串的单词,若是则结束查询;否则按折半查找法继续查询。
这种查询方法的最大次数为log2N,N为词典数据库包含的单词总数。这样,即便我们输入很简单的单词也需要对整个单词数据进行多次重复查询后才能获得最终的查找结果。而且通常情况下,为了节省空间,词典中的单词数据都是经过压缩的,在取主题词进行比较时,需要先进行解压缩。这样在查询过程中需要经过多次解压缩动作。按该索引查询比较次数公式log2N,以N=100,000为例,则计算得到其解压次数为17次。因此,该现有查询方法实际上制约了单词的查询速度。
申请号为99123297的中国专利公开了一种使用快速查询索引结构的电子词典单词查询方法,它是在上述传统的索引结构基础上增加了一个二次索引结构,该二次索引结构中包含了单词前两个字母的排列组合,对于字母为一个或者两个的单词,只需要根据该二次索引结构即直接找到其对应的单词数据地址从而找到要查询的单词,提高了查询速度;对于字母数更多的单词,再在该二次索引结构查询结果的基础上,利用折半法进行查询。
然而,以不同字母起始的单词其分布是不均匀的,例如,以st和su开头的单词在一个10万词条的词典中均超过2000个,查询时的解压缩次数平均为11次。因此,由于不同起始字母的单词的密度不同,该方法的查询速度不均衡,对于起始字母相同的密度大的单词,查询时的重复查询和解压次数仍然偏多,进而影响了整体的查询速度。
此外,在电子词典系统内存资源十分紧张的情况下,可能无法为地址索引表提供足够的空间,即无法在内存中创建地址索引表。此时,要是按传统的查询方法,要查询单词的话,只能依序一个一个的对比,这实际是不可能实现的。而即使采用中国专利99123297公开的二级索引结构,由于查询到的第二层索引项仍然可能分布了很大的单词数,因此其查询速度也是不可以接受的。如何能够在资源紧张的情况下,提高其查询速度,使得可能实现单词查询功能,也是急待解决的一个问题。

发明内容
本发明要解决的技术问题是提供一种电子词典单词的快速查询方法,能够显著地提高查询速度。
为了解决上述技术问题,本发明提供了一种利用字母索引表查询电子词典单词的方法,包括以下步骤(a)根据词典数据库创建一个具有多层树状逻辑结构的字母索引表,树中每一节点为一索引项,每一索引项对应于一字母,同时还对应于从第一层索引项到该索引项的路径上所有索引项对应字母按序组成的一字母序列,每一索引项中记录有单词索引信息,非底层的索引项还记录有其下层索引项的首地址;其中,当所述字母索引表中一索引项对应字母序列为首的单词数大于一设定值时,建立该索引项的下层索引项,其中至少包括在单词中实际存在的字母序列对应的各个索引项;
(b)依次读取用户输入字母序列中的一个字母,根据所述字母索引表逐层查询,获取与该输入字母序列对应的索引项,或者与该输入字母序列中前面部分字母序列对应的底层索引项;(c)将步骤(b)获取的索引项对应的字母序列与输入单词比对,获取查询结果,其中,当该索引项对应的字母序列与输入字母序列相同时,则根据该索引项中记录的单词索引信息从词典数据库中获取对应单词的数据并显示该单词,否则,根据该索引项中记录的单词索引信息进行重复查找和比较,获取查询结果并显示。
进一步地,上述方法还可具有以下特点所述步骤(a)中对一索引项建立下层索引项时,是建立一组26个索引项,按顺序分别对应26个字母a~z,且每一索引项占用相同的字节数;所述步骤(b)进一步分为以下步骤(b1)读取所述输入字母序列中的第一个字母,根据系统记录的字母索引表第一层索引项的首地址、该字母与字母a的偏移量和每一索引项占用的字节数,在字母索引表的第一层中找到对应的索引项;(b2)判断当前找到的索引项是否已是底层索引项,如果是,执行步骤(c),否则执行步骤(b3);(b3)判断所述输入字母序列的所有字母是否均已读取,如果是,则以最后一个字母对应的索引项为找到的索引项,执行步骤(c);否则,执行步骤(b4);(b4)读取输入字母序列还未读取的字母中的第一个字母,根据其前一字母对应索引项中记录的下层索引项的首地址、该字母与字母a的偏移量和每一索引项占用的字节数,在该组索引项中找到该字母对应的索引项,然后返回步骤(b2)。
进一步地,上述方法还可具有以下特点所述步骤(a)中单词数的设定值为64、128或256。
进一步地,上述方法还可具有以下特点所述步骤(a)中还根据词典数据库创建了一地址索引表,所述词典数据库中的单词数据和该地址索引表中的地址一一对应,且按同一顺序连续存储;且所述索引项记录的单词索引信息为单词序号,该单词序号是该索引项对应字母序列构成的单词的序号,或者是以该字母序列为首的单词中排序第一的单词的序号;所述步骤(c)中,当步骤(b)获取的索引项对应的字母序列与输入字母序列相同时,则根据该索引项记录的单词序号在地址索引表中所对应的单词地址从词典数据库中获取对应单词的数据;否则,根据该索引项及其相邻的下一索引项中记录的单词序号,按折半查找法,利用所述地址索引表和词典数据库进行重复查找和对比,获取与所述输入字母序列相同或最接近的单词的数据。
进一步地,上述方法还可具有以下特点所述步骤(a)中还根据词典数据库创建了一地址索引表,所述词典数据库中的单词数据和该地址索引表中的地址一一对应,且按同一顺序连续存储;所述索引项记录的单词索引信息包括单词地址,该单词地址是该索引项对应字母序列所构成单词的地址,或者是以该字母序列为首的单词中排序第一的单词的地址;所述步骤(c)中,当步骤b)获取的索引项对应的字母序列与输入字母序列相同,则根据该索引项记录的单词地址从词典数据库中获取对应单词的数据;否则,根据该索引项及其相邻下一索引项中记录的单词地址,按折半查找法,利用所述地址索引表和词典数据库进行重复查找和对比,获取与所述输入字母序列相同或最接近的单词的数据。
进一步地,上述方法还可具有以下特点所述索引项记录的单词索引信息包括单词地址,该单词地址是该索引项对应字母序列所构成单词的地址,或者是以该字母序列为首的单词中排序第一的单词的地址;所述步骤(c)中,当步骤(b)获取的索引项对应的字母序列与输入字母序列相同,则根据该索引项记录的单词地址获取对应单词的数据;否则,以该索引项中记录的单词地址为起始地址,在词典数据库中向后逐一查找相应的单词数据并进行对比,以获取与输入字母序列相同或最接近的单词的数据。
进一步地,上述方法还可具有以下特点所述词典数据库中保存的单词数据经过压缩处理,在所述步骤(c)中显示输入单词和将步骤(b)获取的索引项对应的字母序列与输入单词比对之前还包括解压缩处理。
本发明要解决的另一技术问题是提供一种电子词典单词的快速查询系统,能够显著地提高查询速度。
为了解决上述技术问题,本发明提供了一种利用字母索引表查询电子词典单词的系统,包括接收输入字母序列的单词输入单元,用于缓存该输入字母序列码值的缓存单元,存储了词典数据库的存储单元,单词查询单元,以及用于显示查询结果的显示单元,其特征在于,还包括索引项查询单元,其中所述存储单元还存储了根据该词典数据库创建的一字母索引表,该字母索引表具有多层树状逻辑结构,树中每一节点为一索引项,每一索引项对应于一字母,同时还对应于从第一层索引项到该索引项的路径上所有索引项对应字母按序组成的一字母序列,每一索引项中记录有单词索引信息,非底层的索引项还记录有其下层索引项的首地址;其中,当所述字母索引表中一索引项对应字母序列为首的单词数大于一设定值时,该索引项还包括一组下层索引项,其中至少包括在单词中实际存在的字母序列对应的各个索引项;所述索引项查询单元用于根据缓存的输入字母序列,依次读取其中的一个字母,根据所述字母索引表逐层查询,获取与该输入字母序列对应的索引项,或者与该输入字母序列中前面部分字母序列对应的底层索引项,然后输出;所述单词查询单元用于将索引项查询单元输出的索引项对应的字母序列与输入单词比对,获取单词查询结果,其中,如果该索引项对应的字母序列与输入字母序列相同,则根据该索引项中记录的单词索引信息从词典数据库中获取对应单词的数据,否则,根据该索引项中记录的单词索引信息进行重复查找和比较以获取查询结果。
进一步地,上述系统还可具有以下特点所述存储单元中的字母索引表的逻辑结构为一多层的26叉树,每一索引项的下层索引项包括一组26个索引项,且按顺序分别对应26个字母a~z;所述索引项查询单元进一步包括读取子单元、查询子单元和判断子单元读取子单元,用于依次从所述输入字母序列中读取一个字母,如判断出所有字母均已读取过,则输出最后一个字母对应的索引项;否则,输出该读取的字母至查询子单元;查询子单元,用于接收所述读取子单元输出的字母,根据系统记录的或前一字母对应索引项中记录的下层索引项的首地址、该字母与字母a的偏移量和每一索引项占用的字节数,获取该字母对应的索引项,并输出至判断子单元;判断子单元,用于判断查询子单元所获取的索引项是否为底层索引项,如果是,则输出该索引项;否则,输出至读取子单元。
进一步地,上述系统还可具有以下特点所述存储单元中还保存了一地址索引表,存储的词典数据库中的单词数据和该地址索引表中的地址一一对应,且按同一顺序连续存储;所述字母索引表中索引项记录的单词索引信息为单词序号,该单词序号是该索引项对应字母序列构成的单词的序号,或者是以该字母序列为首的单词中排序第一的单词的序号;所述单词查询单元将索引项查询单元输出的索引项对应的字母序列与输入字母序列比对,如果该索引项对应的字母序列与输入字母序列相同,则根据该索引项记录的单词序号在地址索引表中所对应的单词地址从词典数据库中获取对应单词的数据;否则,根据该索引项及其相邻的下一索引项中记录的单词序号,按折半查找法,利用所述地址索引表和词典数据库进行重复查找和对比,以获取与所述输入字母序列相同或最接近的单词的数据。
进一步地,上述系统还可具有以下特点所述存储单元中还保存了一地址索引表,存储的词典数据库中的单词数据和该地址索引表中的地址一一对应,且按同一顺序连续存储;且所述字母索引表中索引项记录的单词索引信息包括单词地址,该单词地址是该索引项对应字母序列所构成单词的地址,或者是以该字母序列为首的单词中排序第一的单词的地址;所述单词查询单元将索引项查询单元输出的索引项对应的字母序列与输入字母序列比对,如果该索引项对应的字母序列与输入字母序列相同,则根据该索引项记录的单词地址获取对应单词的数据;否则,根据该索引项及其相邻的下一索引项中记录的单词地址,按折半查找法,利用所述地址索引表和词典数据库进行重复查找和对比,以获取与所述输入字母序列相同或最接近的单词的数据。
进一步地,上述系统还可具有以下特点所述存储单元存储的字母索引表中记录的单词索引信息包括单词地址,该单词地址是该索引项对应字母序列所构成单词的地址,或者是以该字母序列为首的单词中排序第一的单词的地址;所述单词查询单元将索引项查询单元输出的索引项对应的字母序列与输入字母序列比对,如果该索引项对应的字母序列与输入字母序列相同,则根据该索引项记录的单词地址获取对应单词的数据;否则,以该索引项中记录的单词地址为起始地址,在词典数据库中向后逐一查找相应的单词数据并进行对比,以获取与输入字母序列相同或最接近的单词的数据。
由上可知,本发明利用字母索引表,且根据单词分布密度的不同而动态的调整索引深度,在不同起始字母的单词分布不均匀的情况下仍能保持均衡的查询速度,并在此基础上降低了重复查询和解压的次数,极大的提高了查询的速度。并且,对于资源紧张无法创建地址索引表的环境下,也能够实现较快的单词查询。


图1是现有技术电子词典索引数据结构示意图。
图2是本发明第一实施例查询系统的功能框图。
图3是本发明第一实施例索引数据结构的示意图。
图4是本发明第一实施例单词查询方法的流程图。
图5是采用本发明第一实施例方法的一应用实例查询过程的示意图。
图6是采用本发明第一实施例方法的另一应用实例查询过程的示意图。
图7是本发明第二实施例索引数据结构的示意图。
具体实施例方式
第一实施例图2是本实施例查询系统的功能框图,其包括单词输入单元用于接收用户输入用于查询单词的字母序列并将其输出到缓存单元,该字母序列可能是一个完整的单词,也可能只是单词的前几个字母。
缓存单元用于缓存输入字母序列中各字母的ASCII码。
存储单元用于存储一电子词典数据库,对应于该数据库的一地址索引表,以及一字母索引表。
图3示出了索引数据结构的示意图。与现有技术一样,数据库中的单词数据和地址索引表中的地址一一对应,且按同一顺序连续存储,由地址索引表中的一地址即可找到数据库中同一序号的单词数据。而字母索引表是根据该词典数据库创建的,其逻辑结构为一多层的26叉树,请同时参照图6,树中的每一节点为一索引项,每一索引项对应于一字母,同时还对应于一个字母序列,该字母序列是由从第一层索引项到该索引项的路径上包含的所有索引项对应的字母按序组成的。每一索引项中都记录了一单词序号,非底层的索引项还记录有其下层索引项的首地址。
第一层索引项共有26个,按顺序分别对应26个字母a~z。为了保证查询速度的均衡,要求以每个索引项对应字母序列为首的单词数小于一设定值,如果大于该值,则需建立该索引项的下层索引项,每一索引项的下层索引项包括一组26个索引项,也是按顺序分别对应26个字母a~z。索引项间单词最大个数设定得越小则索引速度越快,但是其占用的空间也会越大。该设定值较佳取64、128或256,本实施例取128,经验证是比较合理的。
任一字母序列都可以得到其组成字母的ASCII码字符串。在词典数据库中,单词就是按其ASCII码字符串来排序的。而索引项记录的单词序号即为其对应字母序列构成的单词的序号,或以该字母序列为首的单词中排序第一的单词的序号。
索引项查询单元所述索引项查询单元用于根据缓存的输入字母序列,依次读取其中的一个字母,根据所述字母索引表逐层查询,获取与该输入字母序列对应的索引项,或者与该输入字母序列中前面部分字母序列对应的底层索引项,然后输出到单词查询单元;该单元进一步包括以下子单元读取子单元,依序每次从所述输入字母序列中读取一个字母,如发现所有字母均已读取过,则输出最后一个字母对应的索引项;否则,将此次读取的字母交查询子单元处理。
查询子单元,用于对此次读出的字母,根据其系统记录的或前一字母对应索引项中记录的其下层索引项的首地址、该字母与字母a的偏移量和每一索引项占用的字节数,在该组索引项中找到该字母对应的索引项,然后交判断子单元处理;判断子单元,用于判断当前找到的索引项是否已是底层索引项,如果是,则输出该索引项;否则,交读取子单元继续处理。
单词查询单元用于将索引项查询单元输出的索引项对应的字母序列与输入单词比对,获取单词查询结果。其中,如果索引项对应的字母序列与输入字母序列相同,直接按该索引项记录的单词序号所对应的单词地址从词典数据库中获取对应单词的数据;否则,根据该索引项及其相邻的下一索引项记录的单词序号,按折半查找法利用所述地址索引表和词典数据库进行重复查找和对比,直到找到与输入字母序列相同或最接近的单词的数据。
显示单元用于根据查到的单词数据,显示相应的单词和相关内容。
索引项查询单元和单词查询单元所执行的具体查询操作将在流程中详细介绍。
基于以上系统,本实施例单词查询方法如图4所示,包括以下步骤步骤1接收用户输入的字母序列;步骤2读取输入字母序列中的第一个字母,根据字母索引表第一层索引项的首地址,在字母索引表的第一层中找到对应的索引项;本实施例中,每一个索引项占用的字节数相同,因此有某字母对应的索引项的地址=该字母所在的一组索引项的首地址+(该小写或大写字母的ASCII码值-字母a或A的ASCII码值)×一个索引项占用的字节数。
式中的ASCII码值也可以用其它的码值来代替,只要能正确计算出该字母和字母a之间的偏移量即可。根据该地址即可找到对应的索引项。字母索引表第一层索引项的首地址可以由系统在生成字母索引表时加以记录,也可以认为该字母索引表存在第0层节点,该节点对应的索引项记录了第一层索引项的首地址,但不对应于任何一个字母。
步骤3判断当前找到的索引项是否已是底层索引项,如果是,执行步骤4,否则执行步骤5;步骤4,如此时输入字母序列的所有字母已读取,则根据该底层索引项记录的单词序号从地址索引表中找到对应的地址,由该地址找到对应单词的数据,否则,根据该底层索引项记录的单词序号和该底层索引项相邻的下一索引项记录的单词序号,按折半查找法找到对应单词的数据,将单词数据解压缩后向用户显示查询结果,可能是与输入字母序列相同的单词或与其最接近的单词或查找不到的提示,结束;在本文中,某一层中同组的索引项是根据其对应字母按从小到大的顺序排列的,各组索引项之间则是根据其上一层索引项对应字母按从小到小的顺序排列的。因此,对于对应字母为a~y的索引项,其相邻的下一索引项均为同组的索引项,而对应字母为z的索引项,其相邻的下一索引项则为下一组索引项中的第一个索引项,本实施例即对应字母为a的索引项。
按折半查找法查找时,从两个单词序号开始,假定为单词序号A和单词序号B,其中单词序号B较大,先计算出位于该两个单词序号中间的单词序号C(将两者相加除以2即可),然后通过该单词序号C对应的地址找到相应的单词数据,将输入字母序列与解压缩后的该单词数据进行比较,如两者相等则输出查询到的单词;如输入字母序列的ASCII码字符串大于该单词的ASCII码字符串,则对在单词序号C和单词序号B之间的单词进行下一次的查询;如输入字母序列的ASCII码字符串小于该单词的ASCII码字符串,则对在单词序号A和单词序号C之间的单词进行下一次的查询,直到查到相应的单词为止,如果找不到,可以输出最接近的单词作为查询结果或者显示单词不存在。确定最接近的单词时可以采用现有的各种算法,不是本发明要限定的内容。
步骤5,判断输入字母序列的所有字母是否均已读取,如果是,执行步骤7,否则,执行步骤6;步骤6,读取输入字母序列还未读取的字母中的第一个字母,根据其前一字母对应索引项中记录的其下层索引项的首地址,在该组索引项中找到该字母对应的索引项,然后返回步骤3;步骤7,根据找到的最后一个索引项记录的单词序号,从地址索引表中找到对应的地址,然后根据该地址即可找到要查询的单词数据,解压缩后将查询结果显示给用户,结束。
因为在地址索引表中每个地址占用的字节数是相同的,根据索引项中记录的单词序号与初始序号的偏移可以容易地找到在地址索引表中对应的地址,具体地某个单词序号对应的地址=地址索引表的首地址+(该单词序号-单词的初始序号)×一个地址占用的字节数。
下面再以几个查询的实例对本发明进行说明。
请参考图5,是一个实例的查询过程的示意图。图中字母索引表中给出了一级索引a至z以及对a和b的二级索引示例。每个索引项除了对应的字母外,还记录了单词序号和其下层索引项的首地址。只要以某一索引项对应字母序列为首的单词个数超过128,则为该索引项创建一组共26个下层索引项。下面描述一下输入字母序列为aa时的查询过程先取出输入单词的第一个字母a,在字母索引表的第一层找到字母a对应的索引项,发现以a字母开头的单词还有下一级索引,且输入单词未结束,于是取出输入单词的第二个字母a,在a的下一级索引中找到第一个索引项,此时输入单词已经结束,因此直接取出该索引项中单词序号,根据此序号对应的地址,即单词3的地址从词典数据库中取出单词aa的数据,解压缩后显示查询结果。
图6示出了用26叉树所表示的字母索引表的逻辑结构,其中每一节点对应一索引项。例如,要查找单词star,可以沿着26叉树读取每一个字母对应的索引项。当查到第4个字母r后,输入字母已经结束,则直接从字母r对应的索引项中读取单词star的序号,再通过该序号对应的地址读取词典数据库中该单词的相关内容。
如果是查询单词stare,而且在查询字母r后没有下一级索引,则表明以“star”为首的单词数未超过128,因此,将r对应索引项中的单词序号作为起始单词序号,并将r的下一索引项(即字母s对应的索引项)中的单词序号作为结束单词序号进行折半查找,这样,由于该两个单词序号之间的单词最大个数是128,因此根据折半查找公式log2128=7,其最大查找次数不超过7次。因此,相对于现有技术的固定折半查找方法来看,本发明的动态索引查找方法不仅大大降低了查找平均次数,而且即使对于不同首字母开头但单词量不同的情况,也能够做到查询速度的均衡,且重复查询和解压缩次数大大减少。
为了更加清楚本发明之优势所在,再将本发明与中国专利99123297做一对比。中国专利99123297是在针对词典数据库索引地址折半查找的基础上增加一个二级索引结构,如果以该二级索引结构对应的字母为首的单词过多,则仍然无法避免因为折半查询而出现的重复查询和解压的问题。
假定词典数据库的词汇量均为100,000,请参见表1对几个单词的查询次数的统计。
表1

由此可知,本发明查询方法是先根据输入字母序列中的字母逐次找到对应层次的索引项,如果包含某索引项对应字母序列的单词个数超过一个设定的值,如128个,则为该索引项建立一组下层索引,依次类推。其索引深度根据单词分布密度的不同而动态调整,实现了在不同起始字母的单词分布不均匀的情况下仍能保持均衡的查询速度,降低了重复查询和解压的次数,极大的提高了查询的速度,特别适用于CPU速度较低的产品。
在上述实施例的基础上还可以有各种变换。
例如,在另一实施例中,在每一索引项的记录中,用单词地址替换原实施例中的单词序号,该单词地址即为该索引项对应字母序列所构成单词的地址,或者是以该字母序列为首的单词中排序第一的单词的地址。这样,在查找到与输入字母序列对应的索引项后,就可以直接根据该索引项记录的单词地址找到对应的单词数据,或者根据该索引项及其相邻下一索引项记录的两个单词地址,根据地址索引表和词典数据库采用折半查找法找到对应的单词数据。这种方式不用再根据单词序号去找对应的地址,查询更为快速。不过,单词序号对于单词查询也有其作用,比如可以提供查找当前单词的上一个单词或下一个单词的功能,等等。当然,在其它实施例中,按上述规则在索引项中同时记录单词序号和单词地址也是可以的。
例如,在另一实施例中,字母索引表中一个索引项的下层索引项也可以小于26个,因为有不少组合是不存在的,可以只包含单词中实际存在的字母序列对应的索引项,这时需要在索引项中记录对应的字母,如果查询索引项时,还没有查询到底层索引项就找不到对应索引项,可以根据最后查到的该索引项中的单词序号或单词地址,从数据库中找出最接近的单词或显示单词不存在即可。这样可以节约一些存储空间。但是,在确定某字母对应的索引项时就必须一个一个索引项的查找,会降低查询的速度。
例如,在另一实施例中,电子词典的数据也可以是不压缩的,显然,采用本发明方法同样可以提高查询速度,降低查询次数。
第二实施例在电子词典系统内存资源十分紧张的情况下,可能无法为地址索引表提供足够的空间,即无法在内存中创建地址索引表。此时,要是按传统的查询方法,要查询单词的话,只能依序一个一个的对比,这实际是不可能实现的。而即使采用中国专利99123297公开的二级索引结构,由于查询到的第二层索引项仍然可能分布了很大的单词数,因此其查询速度也是不可以接受的,而采用本发明的字母索引表,因为每一索引项分布的单词数是均衡的,因而使得查询成为可能,即在因内存资源不足而不创建地址索引表的同等条件下,本发明的查询速度远远超过了上述现有的方法。
本实施例查询系统的功能框图包含的功能单元与第一实施例是完全一样的,包括单词输入单元、缓存单元、存储单元、索引项查询单元、单词查询单元和显示单元。其差别在于存储单元中没有存储地址索引表,而存储的字母索引表与第一实施例基本是相同的,差别仅在于每一索引项记录的信息增加了单词地址,即包括单词序号、单词地址和下层索引项首地址。其中的单词地址即为该索引项对应字母序列所构成单词的地址,或者是以该字母序列为首的单词中排序第一的单词的地址。单词序号是可选的。
单词查询单元用于查询出所要的单词,如果索引项对应的字母序列与输入字母序列相同,直接按该索引项记录的单词地址找到所要的单词数据;否则,从该索引项记录的单词地址开始逐一查找相应的单词数据,将其解压缩后进行对比,直到找到与输入字母序列相同的单词,找不到相同单词时,可以显示最接近的单词或者显示单词不存在。
由于单词数据有长有短,因此每一单词的起始地址并不能够根据单词序号进行准确推算,如果采用折半查找法,则折半得到的地址可能并非单词的起始地址,从而出错。
其它的单元与第一实施例都是相同的,这里不再赘述。其索引数据结构如图7所示,与第一实施例相比,少了地址索引表。
基于以上系统,本实施例单词查询方法的步骤与第一实施例基本相同,需作的修改为将原步骤4修改为以该最后一个索引项记录的单词地址为起始地址,在词典数据库中向后逐一查找相应的单词数据,将其解压缩后进行对比,直到找到与输入字母序列相同的单词并显示,找不到相同的单词时,显示最接近的单词或显示单词不存在,结束。
将原步骤7修改为根据找到的最后一个索引项记录的单词地址,直接找到要查询的单词数据,解压缩后将查询到的单词显示给用户,结束。
其它的步骤与第一实施例完全相同,这里不再赘述。总的来说,第二实施例与第一实施例在索引项查询阶段是完全相同的,只是在后续的单词查找阶段有所不同。
同样,该实施例也可以做一些变换,如字母索引表中一个索引项的下层索引项也可以小于26个,只包含单词中实际存在的字母序列对应的索引项。或者,电子词典的数据也可以是不压缩的,等等。
权利要求
1.一种利用字母索引表查询电子词典单词的方法,包括以下步骤(a)根据词典数据库创建一个具有多层树状逻辑结构的字母索引表,树中每一节点为一索引项,每一索引项对应于一字母,同时还对应于从第一层索引项到该索引项的路径上所有索引项对应字母按序组成的一字母序列,每一索引项中记录有单词索引信息,非底层的索引项还记录有其下层索引项的首地址;其中,当所述字母索引表中一索引项对应字母序列为首的单词数大于一设定值时,建立该索引项的下层索引项,其中至少包括在单词中实际存在的字母序列对应的各个索引项;(b)依次读取用户输入字母序列中的一个字母,根据所述字母索引表逐层查询,获取与该输入字母序列对应的索引项,或者与该输入字母序列中前面部分字母序列对应的底层索引项;(c)将步骤(b)获取的索引项对应的字母序列与输入单词比对,获取查询结果,其中,当该索引项对应的字母序列与输入字母序列相同时,则根据该索引项中记录的单词索引信息从词典数据库中获取对应单词的数据并显示该单词,否则,根据该索引项中记录的单词索引信息进行重复查找和比较,获取查询结果并显示。
2.如权利要求1所述的方法,其特征在于,所述步骤(a)中对一索引项建立下层索引项时,是建立一组26个索引项,按顺序分别对应26个字母a~z,且每一索引项占用相同的字节数;所述步骤(b)进一步分为以下步骤(b1)读取所述输入字母序列中的第一个字母,根据系统记录的字母索引表第一层索引项的首地址、该字母与字母a的偏移量和每一索引项占用的字节数,在字母索引表的第一层中找到对应的索引项;(b2)判断当前找到的索引项是否已是底层索引项,如果是,执行步骤(c),否则执行步骤(b3);(b3)判断所述输入字母序列的所有字母是否均已读取,如果是,则以最后一个字母对应的索引项为找到的索引项,执行步骤(c);否则,执行步骤(b4);(b4)读取输入字母序列还未读取的字母中的第一个字母,根据其前一字母对应索引项中记录的下层索引项的首地址、该字母与字母a的偏移量和每一索引项占用的字节数,在该组索引项中找到该字母对应的索引项,然后返回步骤(b2)。
3.如权利要求1所述的方法,其特征在于,所述步骤(a)中单词数的设定值为64、128或256。
4.如权利要求1所述的方法,其特征在于所述步骤(a)中还根据词典数据库创建了一地址索引表,所述词典数据库中的单词数据和该地址索引表中的地址一一对应,且按同一顺序连续存储;且所述索引项记录的单词索引信息为单词序号,该单词序号是该索引项对应字母序列构成的单词的序号,或者是以该字母序列为首的单词中排序第一的单词的序号;所述步骤(c)中,当步骤(b)获取的索引项对应的字母序列与输入字母序列相同时,则根据该索引项记录的单词序号在地址索引表中所对应的单词地址从词典数据库中获取对应单词的数据;否则,根据该索引项及其相邻的下一索引项中记录的单词序号,按折半查找法,利用所述地址索引表和词典数据库进行重复查找和对比,获取与所述输入字母序列相同或最接近的单词的数据。
5.如权利要求1所述的方法,其特征在于所述步骤(a)中还根据词典数据库创建了一地址索引表,所述词典数据库中的单词数据和该地址索引表中的地址一一对应,且按同一顺序连续存储;所述索引项记录的单词索引信息包括单词地址,该单词地址是该索引项对应字母序列所构成单词的地址,或者是以该字母序列为首的单词中排序第一的单词的地址;所述步骤(c)中,当步骤b)获取的索引项对应的字母序列与输入字母序列相同,则根据该索引项记录的单词地址从词典数据库中获取对应单词的数据;否则,根据该索引项及其相邻下一索引项中记录的单词地址,按折半查找法,利用所述地址索引表和词典数据库进行重复查找和对比,获取与所述输入字母序列相同或最接近的单词的数据。
6.如权利要求1所述的方法,其特征在于所述索引项记录的单词索引信息包括单词地址,该单词地址是该索引项对应字母序列所构成单词的地址,或者是以该字母序列为首的单词中排序第一的单词的地址;所述步骤(c)中,当步骤(b)获取的索引项对应的字母序列与输入字母序列相同,则根据该索引项记录的单词地址获取对应单词的数据;否则,以该索引项中记录的单词地址为起始地址,在词典数据库中向后逐一查找相应的单词数据并进行对比,以获取与输入字母序列相同或最接近的单词的数据。
7.如权利要求1至6中任一权利要求所述的方法,其特征在于,所述词典数据库中保存的单词数据经过压缩处理,在所述步骤(c)中显示输入单词和将步骤(b)获取的索引项对应的字母序列与输入单词比对之前还包括解压缩处理。
8.一种利用字母索引表查询电子词典单词的系统,包括接收输入字母序列的单词输入单元,用于缓存该输入字母序列码值的缓存单元,存储了词典数据库的存储单元,单词查询单元,以及用于显示查询结果的显示单元,其特征在于,还包括索引项查询单元,其中所述存储单元还存储了根据该词典数据库创建的一字母索引表,该字母索引表具有多层树状逻辑结构,树中每一节点为一索引项,每一索引项对应于一字母,同时还对应于从第一层索引项到该索引项的路径上所有索引项对应字母按序组成的一字母序列,每一索引项中记录有单词索引信息,非底层的索引项还记录有其下层索引项的首地址;其中,当所述字母索引表中一索引项对应字母序列为首的单词数大于一设定值时,该索引项还包括一组下层索引项,其中至少包括在单词中实际存在的字母序列对应的各个索引项;所述索引项查询单元用于根据缓存的输入字母序列,依次读取其中的一个字母,根据所述字母索引表逐层查询,获取与该输入字母序列对应的索引项,或者与该输入字母序列中前面部分字母序列对应的底层索引项,然后输出;所述单词查询单元用于将索引项查询单元输出的索引项对应的字母序列与输入单词比对,获取单词查询结果,其中,如果该索引项对应的字母序列与输入字母序列相同,则根据该索引项中记录的单词索引信息从词典数据库中获取对应单词的数据,否则,根据该索引项中记录的单词索引信息进行重复查找和比较以获取查询结果。
9.如权利要求8所述的系统,其特征在于,所述存储单元中的字母索引表的逻辑结构为一多层的26叉树,每一索引项的下层索引项包括一组26个索引项,且按顺序分别对应26个字母a~z;所述索引项查询单元进一步包括读取子单元、查询子单元和判断子单元读取子单元,用于依次从所述输入字母序列中读取一个字母,如判断出所有字母均已读取过,则输出最后一个字母对应的索引项;否则,输出该读取的字母至查询子单元;查询子单元,用于接收所述读取子单元输出的字母,根据系统记录的或前一字母对应索引项中记录的下层索引项的首地址、该字母与字母a的偏移量和每一索引项占用的字节数,获取该字母对应的索引项,并输出至判断子单元;判断子单元,用于判断查询子单元所获取的索引项是否为底层索引项,如果是,则输出该索引项;否则,输出至读取子单元。
10.如权利要求8所述的系统,其特征在于所述存储单元中还保存了一地址索引表,存储的词典数据库中的单词数据和该地址索引表中的地址一一对应,且按同一顺序连续存储;所述字母索引表中索引项记录的单词索引信息为单词序号,该单词序号是该索引项对应字母序列构成的单词的序号,或者是以该字母序列为首的单词中排序第一的单词的序号;所述单词查询单元将索引项查询单元输出的索引项对应的字母序列与输入字母序列比对,如果该索引项对应的字母序列与输入字母序列相同,则根据该索引项记录的单词序号在地址索引表中所对应的单词地址从词典数据库中获取对应单词的数据;否则,根据该索引项及其相邻的下一索引项中记录的单词序号,按折半查找法,利用所述地址索引表和词典数据库进行重复查找和对比,以获取与所述输入字母序列相同或最接近的单词的数据。
11.如权利要求8所述的系统,其特征在于所述存储单元中还保存了一地址索引表,存储的词典数据库中的单词数据和该地址索引表中的地址一一对应,且按同一顺序连续存储;且所述字母索引表中索引项记录的单词索引信息包括单词地址,该单词地址是该索引项对应字母序列所构成单词的地址,或者是以该字母序列为首的单词中排序第一的单词的地址;所述单词查询单元将索引项查询单元输出的索引项对应的字母序列与输入字母序列比对,如果该索引项对应的字母序列与输入字母序列相同,则根据该索引项记录的单词地址获取对应单词的数据;否则,根据该索引项及其相邻的下一索引项中记录的单词地址,按折半查找法,利用所述地址索引表和词典数据库进行重复查找和对比,以获取与所述输入字母序列相同或最接近的单词的数据。
12.如权利要求8所述的系统,其特征在于所述存储单元存储的字母索引表中记录的单词索引信息包括单词地址,该单词地址是该索引项对应字母序列所构成单词的地址,或者是以该字母序列为首的单词中排序第一的单词的地址;所述单词查询单元将索引项查询单元输出的索引项对应的字母序列与输入字母序列比对,如果该索引项对应的字母序列与输入字母序列相同,则根据该索引项记录的单词地址获取对应单词的数据;否则,以该索引项中记录的单词地址为起始地址,在词典数据库中向后逐一查找相应的单词数据并进行对比,以获取与输入字母序列相同或最接近的单词的数据。
全文摘要
一种利用字母索引表查询电子词典单词的系统及方法,该系统包括单词输入单元、缓存单元、存储了词典数据库的存储单元、索引项查询单元、单词查询单元和显示单元,先创建一树状字母索引表,树中每一节点为一索引项,每一索引项对应于一字母和一字母序列且记录有单词索引信息,非底层的索引项记录有下层索引项首地址;每一索引项对应字母序列为首的单词数大于设定值时,建立其下层索引项;依次读取输入字母序列中的一个字母,在字母索引表逐层查询,获取该输入字母序列对应的索引项,或者与前面部分字母序列对应的底层索引项;然后再根据获取的索引项中的单词索引信息从词典数据库中获取查询结果并显示。本发明可提高单词的查询速度。
文档编号G06F17/30GK101082918SQ20061008333
公开日2007年12月5日 申请日期2006年6月2日 优先权日2006年6月2日
发明者张后鼎 申请人:凌阳科技股份有限公司, 北京北阳电子技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1