一种词库创建方法和系统,及相应的单词查询方法和系统
技术领域
本发明涉及一种词库创建方法和系统,及相应的单词查询方法和系统。
背景技术
对于电子词典来说,一般在用户输入单词的过程中,会利用输入单词的部分内容来查询单词的相关内容。每当用户输入一个待查单词的一个字母时,电子词典就必须动态执行一遍查询动作。因此查询动作的快慢势必影响到电子词典的整体性能。
目前,电子词典进行查询的方法有很多,用索引结构进行查询是较为常见的方法,其中词典树索引和基于单词词头的两级索引最为常用。词典树索引,是利用了完整的满N叉树结构,因此单词可以直接定位,但这种结构使用大量无用结点,造成空间的浪费。基于单词词头的两级索引,由于要满足检索库中每个元素的大小一致特点,要求每个单词的词头扩展到最长单词词头的长度,所以造成空间的浪费。
公开日为2008年8月27日,申请号为200810027416.7的中国专利申请公开了一种适用于移动设备的电子词典词库结构。参见图1,它由两级索引和信息层组成:第一级索引的索引单元由单词的首字母和指向第二级索引的指针组成;第二级索引的索引单元以单词词头的开头多个字母和指向信息层的指针组成;信息层单元由单词的词头和音标、解释、例句等所有最终展现给用户的信息组成。该方法存在以下不足:1、在有限的内存空间下可检索的单词信息量少,在内存中第一、二级的查找只能是模糊查询,对要查询的目标单词的定位主要依靠未载入内存的信息层的查找;2、信息层的顺序查找无法快速定位单词。
在内存空间使用有限的条件下,在缩短查询时间的前提下,如何控制索引结构层的大小,节省内存空间的使用,成为电子词典的一个研发方向。
以上是以电子词典为例,在其他的需要进行单词查询的应用中,也存在同样的问题。
发明内容
本发明要解决的技术问题是提出一种更少地占用内存空间的词库创建方法和系统。
为了解决上述技术问题,本发明提供了一种词库创建方法,包括:
将要写入单词库的每一单词的组成字母分为N个字母组,将单词库分为N个区块,第n个区块包括多个n级索引单元,构成N级索引结构;
在各个n级索引单元中分别存储单词库中单词的第n个字母组的信息并按照字母组从小到大的顺序排列,第2~N个区块中对应于前一级同一索引单元的一个或多个索引单元为同组的索引单元,N≥2,n=1,2,...N;
其特征在于:
将单词分成的N个字母组中,第n’个字母组之前的字母组定长,第n’个字母组及之后的字母组不定长,第n’级索引单元与单词库中的单词一一对应,如第j个单词与第j-1个单词的第n’个字母组之前的字母组均相同且从第n’个字母组的首字母开始连续相同的字母数为Rj,则第j个n’级索引单元存储的第n’个字母组的信息用数字Rj加该字母组余下字母的形式表示,否则全用字母形式表示,2≤n’≤N,Rj≥2或1,j=2,3,...J,J为单词库包含的单词数。
进一步地,上述词库创建方法还可具有以下特点:
N=3,n’=2,每一单词的组成字母分为三个字母组:词头、词中和词尾,词头为单词的头P个字母,词中为单词的第P+1~P+Rj+Q-1个字母,词尾为词中后余下的字母,Rj为本单词与词头相同的上一单词从第P+1个字母开始连续相同的字母数,P=1~3,Q=2~4;
单词库分为第一区块、第二区块和第三区块,第一区块的一级索引单元存储单词的词头,占P字节;第二区块的二级索引单元存储数字加字母形式 或者字母形式的词中信息,占Q字节;第三区块的三级索引单元存储单词的词尾并用结束符分隔,不定长;将字母组写入定长的索引单元时单词字母不足时用填充字符填充;第一区块保存有每个一级索引单元对应的第一个二级索引单元和第一个三级索引单元的地址信息。
进一步地,上述词库创建方法还可具有以下特点:
P=2,Q=2,Rj=2~9,且单词库的三个区块中只有第一区块和第二区块是在内存中创建的。
如权利要求23所述的词库创建方法,其特征在于:
N=n’=3,每一单词的组成字母分为三个字母组:词头、词中和词尾,词头为单词的头P个字母,词中为单词的第P+1~P+Q个字母,词尾为词中后余下的字母,P=1~3,Q=1~3;
单词库分为第一区块、第二区块和第三区块,第一区块的一级索引单元存储单词的词头,占P字节;第二区块的二级索引单元存储单词的词中,占Q字节;第三区块的三级索引单元存储数字加字母形式或者字母形式的词尾信息并用结束符分隔,不定长;将字母组写入定长的索引单元时单词字母不足时用填充字符填充;第一区块保存有每个一级索引单元对应的第一个二级索引单元的地址信息,第二区块保存有每个二级索引单元对应的第一个三级索引单元的地址信息。
进一步地,上述词库创建方法还可具有以下特点:P=2,Q=2,Rj=2~9,单词库的三个区块均加载到内存中。
进一步地,上述词库创建方法还可具有以下特点:
第一区块中还保存有每个一级索引单元对应的第一个三级索引单元的地址;第二区块中的地址信息为与二级索引单元一一对应的序列号,每一序列号等于对应的二级索引单元对应单词组中的首个单词在同组二级索引单元对应的所有单词中的序号。
进一步地,上述词库创建方法还可具有以下特点:
所述词库还包括一个或多个关联信息库,每一关联信息库包含与单词库中单词一一对应的多个信息单元,信息单元之间按单词的排列顺序排序,关 联信息库不加载到内存中;
所述单词库的一个区块中还保存有每个一级索引单元在各个关联信息库中对应的第一个信息单元的地址信息。
进一步地,上述词库创建方法还可具有以下特点:
在第三区块中,每个一级索引单元对应的多个三级索引单元构成一单元集,在每个关联信息库中,每个一级索引单元对应的多个信息单元构成一单元集;在各个单元集中,将第a*k+1~a*(k+1)个单元分别组成一个小组,余下单元组成一个小组,a为设定的一个小组包含的单元数,k=0,1,2...K,a*(K+1)<单元集中单元数≤a*(K+2);在第三区块划分的各个小组的起始位置增加本小组数据长度和本小组在各个关联信息库中对应小组的关联信息长度。
本发明提供的词库创建系统,包括:
用于将要写入单词库的每一单词的组成字母分为N个字母组或保存有各单词分成的N个字母组的字母分组装置;
用于将单词库分为N个区块,第n个区块包括多个n级索引单元,构成N级索引结构的区块创建装置,N≥2,n=1,2,...N;
用于在各个n级索引单元中分别存储单词库中单词的第n个字母组的信息并按照字母组从小到大的顺序排列的信息载入装置,第2~N个区块中对应于前一级同一索引单元的一个或多个索引单元为同组的索引单元;
其特征在于:
所述字母分组装置将单词分成的N个字母组中,第n’个字母组之前的字母组定长,第n’个字母组及之后的字母组不定长,第n’级索引单元与单词库中的单词一一对应;
所述信息载入装置在第j个单词与第j-1个单词的第n’个字母组之前的字母组均相同且从第n’个字母组的首字母开始连续相同的字母数为Rj时,用数字Rj加该字母组余下字母的形式表示载入的第j个n’级索引单元存储的第n’个字母组的信息,否则全用字母形式表示,2≤n’≤N,Rj≥2或1,j=2,3,...J, J为单词库包含的单词数。
进一步地,上述词库创建系统还可具有以下特点:
所述字母分组装置将每一单词的组成字母分为三个字母组:词头、词中和词尾,词头为单词的头P个字母,词中为单词的第P+1~P+Rj+Q-1个字母,词尾为词中后余下的字母,Rj为本单词与词头相同的上一单词从第P+1个字母开始连续相同的字母数,N=3,n’=2,P=1~3,Q=2~4;
所述区块创建装置将单词库分为第一区块、第二区块和第三区块;
所述信息载入装置在第一区块的一级索引单元存储单词的词头,占P字节;第二区块的二级索引单元存储数字加字母形式或者字母形式的词中信息,占Q字节;第三区块的三级索引单元存储单词的词尾并用结束符分隔,不定长;将字母组写入定长的索引单元时单词字母不足时用填充字符填充;还在第一区块保存每个一级索引单元对应的第一个二级索引单元和第一个三级索引单元的地址信息。
进一步地,上述词库创建系统还可具有以下特点:
P=2,Q=2,Rj=2~9,所述区块创建装置只在内存中创建单词库三个区块中的第一区块和第二区块,第三区块创建在非易失性存储器中。
进一步地,上述词库创建系统还可具有以下特点:
所述字母分组装置将每一单词的组成字母分为三个字母组:词头、词中和词尾,词头为单词的头P个字母,词中为单词的第P+1~P+Q个字母,词尾为词中后余下的字母,N=n’=3,P=1~3,Q=1~3;
所述区块创建装置将单词库分为第一区块、第二区块和第三区块;
所述信息载入装置在第一区块的一级索引单元存储单词的词头,占P字节;第二区块的二级索引单元存储单词的词中,占Q字节;第三区块的三级索引单元存储数字加字母形式或者字母形式的词尾信息并用结束符分隔,不定长;将字母组写入定长的索引单元时单词字母不足时用填充字符填充;第一区块保存有每个一级索引单元对应的第一个二级索引单元的地址信息,第二区块保存有每个二级索引单元对应的第一个三级索引单元的地址信息。
进一步地,上述词库创建系统还可具有以下特点:P=2,Q=2,Rj=2~9, 所述区块创建装置在内存中创建单词库的三个区块。
进一步地,上述词库创建系统还可具有以下特点:
所述信息载入装置在第一区块中还保存了每个一级索引单元对应的第一个三级索引单元的地址;在第二区块中保存的地址信息为与二级索引单元一一对应的序列号,每一序列号等于对应的二级索引单元对应单词组中的首个单词在同组二级索引单元对应的所有单词中的序号。
进一步地,上述词库创建系统还可具有以下特点:还包括关联信息库创建装置,其中:
所述关联信息库创建装置用于创建一个或多个关联信息库,每一关联信息库包含与单词库中单词一一对应的多个信息单元,信息单元之间按单词的排列顺序排序,关联信息库创建在非易失性存储器中;
所述信息载入装置还在所述单词库的一个区块中保存每个一级索引单元在各个关联信息库中对应的第一个信息单元的地址信息。
进一步地,上述词库创建系统还可具有以下特点:
所述信息载入装置在第三区块的各个单元集中,将第a*k+1~a*(k+1)个单元分别组成一个小组,余下单元组成一个小组,a为设定的一个小组包含的单元数,k=0,1,2...K,a*(K+1)<单元集中单元数≤a*(K+2);在第三区块划分的各个小组的起始位置增加本小组数据长度和本小组在各个关联信息库中对应小组的关联信息长度;其中,在第三区块中,每个一级索引单元对应的多个三级索引单元构成一单元集,在每个关联信息库中,每个一级索引单元对应的多个信息单元构成一单元集。
上述词库及其创建方法,在索引结构中采用了数字加字母的形式,其中的数字可以表示连续相同的多个字母,有效地控制索引结构的大小,特别适用于资源有限的移动设备。
本发明要解决的另一技术问题是提出一种单词查询方法和系统,在通过索引快速查找单词的同时,更少地占用内存空间。
为了解决上述技术问题,本发明提供了一种单词查询方法,所应用的单词查询系统中的词库至少包括单词库,该单词查询方法包括:
将要写入单词库的每一单词的组成字母分为N个字母组,将单词库分为N个区块,第n个区块包括多个n级索引单元,构成N级索引结构;
在各个n级索引单元中分别存储单词库中单词的第n个字母组的信息并按照字母组从小到大的顺序排列,第2~N个区块中对应于前一级同一索引单元的一个或多个索引单元为同组的索引单元,N≥2,n=1,2,...N;
查询时,根据N级索引结构对输入单词逐级索引,定位到要查询的单词;
其特征在于:
将单词分成的N个字母组中,第n’个字母组之前的字母组定长,第n’个字母组及之后的字母组不定长,第n’级索引单元与单词库中的单词一一对应,如第j个单词与第j-1个单词的第n’个字母组之前的字母组均相同且从第n’个字母组的首字母开始连续相同的字母数为Rj,则第j个n’级索引单元存储的第n’个字母组的信息用数字Rj加该字母组余下字母的形式表示,否则全用字母形式表示,2≤n’≤N,Rj≥2或1,j=2,3,...J,J为单词库包含的单词数;
对输入单词进行索引时,对n’级索引单元中的数字Rj,识别为同组的上一个n’级索引单元对应单词的第n’个字母组的首字母开始连续Rj个字母。
进一步地,上述单词查询方法还可具有以下特点:
N=3,n’=2,每一单词的组成字母分为三个字母组:词头、词中和词尾,词头为单词的头P个字母,词中为单词的第P+1~P+Rj+Q-1个字母,词尾为词中后余下的字母,Rj为本单词与词头相同的上一单词从第P+1个字母开始连续相同的字母数,P=1~3,Q=2~4;
单词库分为第一区块、第二区块和第三区块,第一区块的一级索引单元存储单词的词头,占P字节;第二区块的二级索引单元存储数字加字母形式或者字母形式的词中信息,占Q字节;第三区块的三级索引单元存储单词 的词尾并用结束符分隔,不定长;将字母组写入定长的索引单元时单词字母不足时用填充字符填充;第一区块保存有每个一级索引单元对应的第一个二级索引单元和第一个三级索引单元的地址信息。
进一步地,上述单词查询方法还可具有以下特点:
P=2,Q=2,Rj=2~9,且单词库的三个区块中只有第一区块和第二区块加载到内存中;
对字母数大于P的输入单词进行查询时,包括:
a)如找到存储的词头等于输入单词头P个字母的一级索引单元,从该一级索引单元对应的地址信息指向的二级索引单元开始向下进行遍历查找,并记录当前查找的二级索引单元Ui 2在同组二级索引单元中的序号i;
b)判断Ui 2对应单词的词中是否小于输入单词第P+1至P+Mi个字母,Mi为Ui 2对应单词词中的字母数,如是,令M=Mi,转步骤c,否则,转步骤d;
c)将下一个二级索引单元作为新的Ui 2,如Ui 2存储的词中信息为数字加字母形式且其中的数字大于M,重新执行本步骤,否则返回步骤b;
d)从Ui 2对应的三级索引单元读取Ui 2对应单词的词尾,如Ui 2对应单词的词中加词尾等于输入单词第P个字母之后的字母组,转步骤e;
e)将输入单词头P个字母加上该Ui 2对应单词的词中和词尾,作为查询到的目标单词;
其中,Ui 2对应的三级索引单元是以找到的一级索引单元对应的第一个三级索引单元的地址为起始地址,以记录的序号i为偏移量查找到的。
进一步地,上述单词查询方法还可具有以下特点:
在步骤d中,如Ui 2对应单词的词中加词尾小于输入单词第P个字母之后的字母组,转步骤f:
f)将下一个二级索引单元作为新的Ui 2,如Ui 2中存储的词中信息为数字加字母形式且其中的数字Ri大于等于Ui 2的上一个二级索引单元Ui-1 2对应单词的词中字母数Mi-1,将Ui-1 2对应单词的词中加词尾中头(Ri-Mi-1)个字母再加上Ui 2中存储的字母,作为Ui 2对应单词的词中,返回步骤b。
如权利要求4所述的单词查询方法,其特征在于:
在步骤d中,如Ui 2对应单词的词中加词尾大于输入单词第P个字母之后的字母组,转步骤e;
在步骤f中,如Ui 2中存储的词中信息为字母形式,或其中的数字Ri<Mi-1,转步骤g,确定Ui 2对应单词的词中后,从Ui 2对应的三级索引单元读取到Ui 2对应单词的词尾,转步骤e;
在步骤g中,如Ui 2中存储的词中信息为数字加字母形式,Ui 2对应单词的词中为Ui-1 2对应单词的词中的头Ri个字母加上Ui 2中存储的字母,如Ui 2中存储的词中信息为字母形式,Ui 2对应单词的词中为Ui 2中存储的Q个字母。
进一步地,上述单词查询方法还可具有以下特点:
N=n’=3,每一单词的组成字母分为三个字母组:词头、词中和词尾,词头为单词的头P个字母,词中为单词的第P+1~P+Q个字母,词尾为词中后余下的字母,P=1~3,Q=1~3;
单词库分为第一区块、第二区块和第三区块,第一区块的一级索引单元存储单词的词头,占P字节;第二区块的二级索引单元存储单词的词中,占Q字节;第三区块的三级索引单元存储数字加字母形式或者字母形式的词尾信息并用结束符分隔,不定长;将字母组写入定长的索引单元时单词字母不足时用填充字符填充;第一区块保存有每个一级索引单元对应的第一个二级索引单元的地址信息,第二区块保存有每个二级索引单元对应的第一个三级索引单元的地址信息。
进一步地,上述单词查询方法还可具有以下特点:
P=2,Q=2,Rj=2~9,单词库的三个区块加载到内存中,对字母数大于P的输入单词进行查询时,包括:
o)如找到存储的词头等于输入单词头P个字母的一级索引单元,从该一级索引单元对应的地址信息指向的二级索引单元开始向下遍历,直到找到存储的词中大于或等于输入单词第P+1~P+Q位字母的二级索引单元,如是等于,转步骤p),如是大于,转步骤r;
p)根据找到的一级索引单元和二级索引单元对应的地址信息,从找到 的二级索引单元对应的第一个三级索引单元开始向下遍历,并记录当前查找的三级索引单元Ui 3在同组三级索引单元中的序号i;
q)判断Ui 3对应单词的词尾是否大于等于输入单词第P+Q位字母之后的字母组,如是,转步骤s,否则,以下一个三级索引单元为新的Ui 3,重新执行本步骤;
r)根据找到的一级索引单元及二级索引单元对应的地址信息,将找到的二级索引单元对应的第一个三级索引单元作为Ui 3,转步骤s;
s)用输入单词的头P个字母加找到的二级索引单元存储的词中加Ui 3对应单词的词尾,作为查询到的目标单词。
进一步地,上述单词查询方法还可具有以下特点:
第一区块中还保存有每个一级索引单元对应的第一个三级索引单元的地址;第二区块中的地址信息为与二级索引单元一一对应的序列号,每一序列号等于对应的二级索引单元对应单词组中的首个单词在同组二级索引单元对应的所有单词中的序号;
对应于找到的二级索引单元的第一个三级索引单元,是以找到的一级索引单元对应的第一个三级索引单元的地址为起始地址,以找到的二级索引单元对应的序列号为偏移量查找到的;
将找到的二级索引单元对应的序列号加找到的三级索引单元在同组三级索引单元中的序号i,作为查询到的单词在找到的一级索引单元对应单词组中的序号。
进一步地,上述单词查询方法还可具有以下特点:
所述词库还包括一个或多个关联信息库,每一关联信息库包含与单词库中单词一一对应的多个信息单元,信息单元之间按单词的排列顺序排序,关联信息库不加载到内存中;
所述单词库的一个区块中还保存有每个一级索引单元在各个关联信息库中对应的第一个信息单元的地址信息;
定位到要查询的单词后,还要到各个关联信息库查找到查询到的单词对应的信息单元并读取其中的关联信息,将查询到的单词和读取到的关联信息 作为查询结果一起输出。
进一步地,上述单词查询方法还可具有以下特点:
在第三区块中,每个一级索引单元对应的多个三级索引单元构成一单元集,在每个关联信息库中,每个一级索引单元对应的多个信息单元构成一单元集;在各个单元集中,将第a*k+1~a*(k+1)个单元分别组成一个小组,余下单元组成一个小组,a为设定的一个小组包含的单元数,k=0,1,2...K,a*(K+1)<单元集中单元数≤a*(K+2);在第三区块划分的各个小组的起始位置增加本小组数据长度和本小组在各个关联信息库中对应小组的关联信息长度;
根据起始地址和偏移量查找第三区块各单元集中的三级索引单元时,根据式I=M′*a+b计算出M′和b,其中I为该偏移量的值,M′,b为整数,0≤b<a;然后从该起始地址开始,读取第1个小组的数据长度和关联信息长度,根据该数据长度直接跳转到第2个小组的起始位置;再读取第2个小组的数据长度并累加同一种类的关联信息长度,根据该数据长度直接跳转到第3个小组的起始位置,依此执行直到跳转到第M′+1个小组的起始位置;然后根据每个单元中的结束符号定位到第M′+1个小组的第b个三级索引单元;
在每一关联信息库,根据找到的一级索引单元在该关联信息库中对应的第一个信息单元的地址,以及对该关联信息库中对应小组的关联信息长度的累加结果,直接定位到该关联信息库中与查询到的单词对应的信息单元。
本发明提供的单词查询系统,包括:
用于将要写入单词库的每一单词的组成字母分为N个字母组或保存有各单词分成的N个字母组的字母分组装置;
用于将单词库分为N个区块,第n个区块包括多个n级索引单元,构成N级索引结构的区块创建装置,N≥2,n=1,2,...N;
用于在各个n级索引单元中分别存储单词库中单词的第n个字母组的信息并按照字母组从小到大的顺序排列的信息载入装置,第2~N个区块中对应于前一级同一索引单元的一个或多个索引单元为同组的索引单元;
用于根据N级索引结构对输入单词逐级索引,定位到要查询的单词索引装置;
其特点是:
所述字母分组装置将单词分成的N个字母组中,第n’个字母组之前的字母组定长,第n’个字母组及之后的字母组不定长,第n’级索引单元与单词库中的单词一一对应;
所述信息载入装置在第j个单词与第j-1个单词的第n’个字母组之前的字母组均相同且从第n’个字母组的首字母开始连续相同的字母数为Rj时,用数字Rj加该字母组余下字母的形式表示载入的第j个n’级索引单元存储的第n’个字母组的信息,否则全用字母形式表示,2≤n’≤N,Rj≥2或1,j=2,3,...J,J为单词库包含的单词数;
所述单词索引装置对输入单词进行索引时,对n’级索引单元中的数字Rj,识别为同组的上一n’级索引单元对应单词的第n’个字母组的首字母开始连续Rj个字母。
进一步地,上述单词查询系统还可具有以下特点:
所述字母分组装置将每一单词的组成字母分为三个字母组:词头、词中和词尾,词头为单词的头P个字母,词中为单词的第P+1~P+Rj+Q-1个字母,词尾为词中后余下的字母,Rj为本单词与词头相同的上一单词从第P+1个字母开始连续相同的字母数,N=3,n’=2,P=1~3,Q=2~4;
所述区块创建装置将单词库分为第一区块、第二区块和第三区块;
所述信息载入装置在第一区块的一级索引单元存储单词的词头,占P字节;第二区块的二级索引单元存储数字加字母形式或者字母形式的词中信息,占Q字节;第三区块的三级索引单元存储单词的词尾并用结束符分隔,不定长;将字母组写入定长的索引单元时单词字母不足时用填充字符填充;还在第一区块保存每个一级索引单元对应的第一个二级索引单元和第一个三级索引单元的地址信息。
进一步地,上述单词查询系统还可具有以下特点:
P=2,Q=2,Rj=2~9,所述区块创建装置只在内存中创建单词库三个区 块中的第一区块和第二区块,第三区块创建在其他存储器中;
所述单词索引装置对字母数大于P的输入单词进行查询时,执行步骤:
a)如找到存储的词头等于输入单词头P个字母的一级索引单元,从该一级索引单元对应的地址信息指向的二级索引单元开始向下进行遍历查找,并记录当前查找的二级索引单元Ui 2在同组二级索引单元中的序号i;
b)判断Ui 2对应单词的词中是否小于输入单词第P+1至P+Mi个字母,Mi为Ui 2对应单词词中的字母数,如是,令M=Mi,转步骤c,否则,转步骤d;
c)将下一个二级索引单元作为新的Ui 2,如Ui 2存储的词中信息为数字加字母形式且其中的数字大于M,重新执行本步骤,否则返回步骤b;
d)从Ui 2对应的三级索引单元读取Ui 2对应单词的词尾,如Ui 2对应单词的词中加词尾等于输入单词第P个字母之后的字母组,转步骤e;
e)将输入单词头P个字母加上该Ui 2对应单词的词中和词尾,作为查询到的目标单词;
其中,Ui 2对应的三级索引单元是以找到的一级索引单元对应的第一个三级索引单元的地址为起始地址,以记录的序号i为偏移量查找到的。
进一步地,上述单词查询系统还可具有以下特点:
所述单词索引装置对字母数大于P的单词查询时,在步骤d中,如Ui 2对应单词的词中加词尾小于输入单词第P个字母之后的字母组,转步骤f:
f)将下一个二级索引单元作为新的Ui 2,如Ui 2中存储的词中信息为数字加字母形式且其中的数字Ri大于等于Ui 2的上一个二级索引单元Ui-1 2对应单词的词中字母数Mi-1,将Ui-1 2对应单词的词中加词尾中头(Ri-Mi-1)个字母再加上Ui 2中存储的字母,作为Ui 2对应单词的词中,返回步骤b。
进一步地,上述单词查询系统还可具有以下特点:
所述单词索引装置对字母数大于P的单词查询时,在步骤d中,如Ui 2对应单词的词中加词尾大于输入单词第P个字母之后的字母组,转步骤e;
在步骤f中,如Ui 2中存储的词中信息为字母形式,或其中的数字Ri<Mi-1, 转步骤g,确定Ui 2对应单词的词中后,从Ui 2对应的三级索引单元读取到Ui 2对应单词的词尾,转步骤e;
在步骤g中,如Ui 2中存储的词中信息为数字加字母形式,Ui 2对应单词的词中为Ui-1 2对应单词的词中的头Ri个字母加上Ui 2中存储的字母,如Ui 2中存储的词中信息为字母形式,Ui 2对应单词的词中为Ui 2中存储的Q个字母。
进一步地,上述单词查询系统还可具有以下特点:
所述字母分组装置将每一单词的组成字母分为三个字母组:词头、词中和词尾,词头为单词的头P个字母,词中为单词的第P+1~P+Q个字母,词尾为词中后余下的字母,N=n’=3,P=1~3,Q=1~3;
所述区块创建装置将单词库分为第一区块、第二区块和第三区块;
所述信息载入装置在第一区块的一级索引单元存储单词的词头,占P字节;第二区块的二级索引单元存储单词的词中,占Q字节;第三区块的三级索引单元存储数字加字母形式或者字母形式的词尾信息并用结束符分隔,不定长;将字母组写入定长的索引单元时单词字母不足时用填充字符填充;第一区块保存有每个一级索引单元对应的第一个二级索引单元的地址信息,第二区块保存有每个二级索引单元对应的第一个三级索引单元的地址信息。
进一步地,上述单词查询系统还可具有以下特点:
P=2,Q=2,Rj=2~9,所述区块创建装置在内存中创建单词库的三个区块;
所述单词索引装置对字母数大于P的输入单词进行查询时,包括:
o)如找到存储的词头等于输入单词头P个字母的一级索引单元,从该一级索引单元对应的地址信息指向的二级索引单元开始向下遍历,直到找到存储的词中大于或等于输入单词第P+1~P+Q位字母的二级索引单元,如是等于,转步骤p),如是大于,转步骤r;
p)根据找到的一级索引单元和二级索引单元对应的地址信息,从找到的二级索引单元对应的第一个三级索引单元开始向下遍历,并记录当前查找的三级索引单元Ui 3在同组三级索引单元中的序号i;
q)判断Ui 3对应单词的词尾是否大于等于输入单词第P+Q位字母之后的 字母组,如是,转步骤s,否则,以下一个三级索引单元为新的Ui 3,重新执行本步骤;
r)根据找到的一级索引单元及二级索引单元对应的地址信息,将找到的二级索引单元对应的第一个三级索引单元作为Ui 3,转步骤s;
s)用输入单词的头P个字母加找到的二级索引单元存储的词中加Ui 3对应单词的词尾,作为查询到的目标单词。
进一步地,上述单词查询系统还可具有以下特点:
所述信息载入装置在第一区块中还保存了每个一级索引单元对应的第一个三级索引单元的地址;在第二区块中保存的地址信息为与二级索引单元一一对应的序列号,每一序列号等于对应的二级索引单元对应单词组中的首个单词在同组二级索引单元对应的所有单词中的序号;
所述单词索引装置查找对应于找到的二级索引单元的第一个三级索引单元时,是以找到的一级索引单元对应的第一个三级索引单元的地址为起始地址,以找到的二级索引单元对应的序列号为偏移量查找到的;并将找到的二级索引单元对应的序列号加找到的三级索引单元在同组三级索引单元中的序号i,作为查询到的单词在找到的一级索引单元对应单词组中的序号。
进一步地,上述单词查询系统还可具有以下特点:还包括关联信息库创建装置和关联信息索引装置,其中:
所述关联信息库创建装置用于创建一个或多个关联信息库,每一关联信息库包含与单词库中单词一一对应的多个信息单元,信息单元之间按单词的排列顺序排序,关联信息库不加载到内存中;
所述信息载入装置还在所述单词库的一个区块中保存每个一级索引单元在各个关联信息库中对应的第一个信息单元的地址信息;
所述关联信息索引装置在定位到要查询的单词后,到各个关联信息库查找到查询到的单词对应的信息单元并读取其中的关联信息,将查询到的单词和读取到的关联信息作为查询结果一起输出。
进一步地,上述单词查询系统还可具有以下特点:
所述信息载入装置在第三区块的各个单元集中,将第a*k+1~a*(k+1)个 单元分别组成一个小组,余下单元组成一个小组,a为设定的一个小组包含的单元数,k=0,1,2...K,a*(K+1)<单元集中单元数≤a*(K+2);在第三区块划分的各个小组的起始位置增加本小组数据长度和本小组在各个关联信息库中对应小组的关联信息长度;其中,在第三区块中,每个一级索引单元对应的多个三级索引单元构成一单元集,在每个关联信息库中,每个一级索引单元对应的多个信息单元构成一单元集;
所述单词索引装置根据起始地址和偏移量查找第三区块各单元集中的三级索引单元时,根据式I=M′*a+b计算出M′和b,其中I为该偏移量的值,M′,b为整数,0≤b<a;然后从该起始地址开始,读取第1个小组的数据长度和关联信息长度,根据该数据长度直接跳转到第2个小组的起始位置;再读取第2个小组的数据长度并累加同一种类的关联信息长度,根据该数据长度直接跳转到第3个小组的起始位置,依此执行直到跳转到第M′+1个小组的起始位置;然后根据每个单元中的结束符号定位到第M′+1个小组的第b个三级索引单元;
所述关联信息索引装置在每一关联信息库,根据找到的一级索引单元在该关联信息库中对应的第一个信息单元的地址,以及对该关联信息库中对应小组的关联信息长度的累加结果,直接定位到该关联信息库中与查询到的单词对应的信息单元。
进一步地,上述单词查询系统还可具有以下特点:所述单词查询系统为电子词典中的单词查询系统。
上述单词查询方法和系统,能够有效地控制索引结构的大小,实现快速查找单词并更少地占用内存空间,特别适用于资源有限的移动设备。
附图说明
图1是现有技术一种适用于移动设备的电子词典词库结构示意图。
图2是本发明一种电子词典词库组成结构框图。
图3是本发明第一实施例电子词典单词库结构示意图。
图4是本发明第一应用示例电子词典单词库中单词的存储方式示意图。
图5是本发明实施例基于图3所示电子词典单词库结构进行单词检索的方法流程图。
图6是本发明第二实施例电子词典单词库结构示意图。
图7是本发明第二应用示例电子词典单词库中单词的存储方式示意图。
图8是本发明实施例基于图6所示电子词典单词库结构进行单词检索的方法流程图。
具体实施方式
下面结合附图来介绍本发明具体实施方式。
第一实施例
参见图2,该图示出了本实施例电子词典的英文词库组成结构,在本发明实施例中将电子词典的英文词库分四个库:单词库201、音标库202、中文解释库203和附加信息库204。其中,单词库201,用以存储词典英文词库中所有单词,各单词是以单词字母的ASCII码来排序的;音标库202,用以存储各单词对应的音标,一个单词的音标保存在一音标单元中,各音标单元在音标库202中的排序与对应单词的排序一致;中文解释库203,用以存储各单词对应的中文解释,一个单词的中文解释保存在一个中文解释单元中,各中文解释单元在中文解释库203中的排序与对应单词的排序一致;附加信息库204,用以存储各单词对应的附加信息,一个单词的附加信息保存在一附加信息单元中,各附加信息单元在附加信息库204中的排序与对应单词的排序一致。
文中提到的单词之间的排序采用惯常的规则,即比较二个单词的大小,按从小到大的顺序来排序。比较时先将两者大小写转为一致,第一个字母ASCII码值较大的单词为大,第一个字母相同的,第二个字母ASCII码值较大的单词为大,依此类推,如一个单词的头几个字母与另一个单词的所有字母相同且该单词还有剩余字母,以字母数较多的单词为大。文中字母组之间也按从小到大的顺序排序,将两个字母组视为两个单词来比较大小。对单词 库中出现的填充字符,比较时认为该填充字符处无字母存在。如在逐个字母比较过程中,一字母组已无用于比较的字母而另一字母组还有字母,则认为字母少的字母组较小。
上述音标库、中文解释库和附加信息库等在查询时可以不加载到内存中,在确定了相应的起始地址和偏移量信息后到非易失性存储器如硬盘、flash的相应位置中读取。
可以将上述音标库、中文解释库和附加信息库等统称为单词的关联信息库,将音标、中文解释和附加信息均视为关联信息库中信息单元所保存的单词的关联信息。可以理解的是,根据单词查询需要显示的关联信息的不同,在其他实施例中,也可以只设置单词库或单词库与其他的一种或多种信息库,这些其他的信息库可以是音标库、中文解释库和附加信息库中的一种或多种,也可以是相关短语、句子等其他关联信息库,本发明不做任何局限。
下面参见图3,该图示出了本实施例单词库201的结构,该单词库201分为3个区块,分别为第一区块、第二区块和第三区块,第一区块中包含多个一级索引单元,第二区块中包含多个二级索引单元,第三区块中包含多个三级索引单元。
将要写入单词库201中的单词分为三个字母组:词头、词中和词尾,其中:词头是单词的头P个字母,P为每个一级索引单元保存的字母个数,每个一级索引单元大小是固定的,即长度固定,本实施例P=2,也可以等于1或3等。如果单词库中第j个单词与第j-1个单词词头相同且从第P+1位开始连续相同的字母个数为Rj,本实施例Rj的取值为2~9,则该单词的词中是该单词的第P+1~P+Rj+Q-1个字母,Q是每个二级索引单元保存的字符个数,该字符为数字或字母;如果某单词与上一单词词头不同,或者词头相同但从第P+1位开始连续相同的字母个数不大于1,则该单词的词中是该单词的第P+1~P+Q个字母,本实施例Q=2,也可以为3等;词尾是单词的词中后剩余的字母。
该分级索引结构可以实现较快速度的查询。与已有技术相似的,在这种分级索引结构中,存储一个单词各字母组的各个索引单元之间相互对应,一 个前级索引单元总是对应着一个和多个后级索引单元。文中,将对应于前一级同一索引单元的一个或多个索引单元称为同组的索引单元。另外,如一索引单元存储了一个单词的某个字母组,则该索引单元对应于该单词,如一索引单元存储了多个单词的某个字母组,则该索引单元对应于该多个单词组成的单词组。在本实施例中,每个一级索引单元都对应于一个单词组,每个二级和三级索引单元对应于一个单词。
单词库中单词的不同词头按从小到大的顺序依次存储在第一区块中的各一级索引单元,每个一级索引单元对应于一组连续存储的二级索引单元,该组二级索引单元保存了词头为该一级索引单元存储的字母组的所有单词的词中。每个二级索引单元保存了一个单词的词中信息,二级索引单元之间根据对应单词的顺序依次排列。每个三级索引单元保存了一个单词的词尾,与二级索引单元一一对应,三级索引单元之间也是根据对应单词的顺序依次排列。
本实施例中,第一区块中除了存储单词词头的一级索引单元外,还包含与一级索引单元一一对应的多个起始地址单元。每个起始地址单元中包含5个起始地址信息,分别为:第二起始地址、第三起始地址,音标起始地址、中文起始地址以及附加信息起始地址。每一起始地址信息占4个字节的存储空间,共占20个字节的存储空间。在第m个起始地址单元中,第二起始地址指向第m个一级索引单元对应的第一个二级索引单元,即该二级索引单元中保存了具有第m个一级索引单元中词头的首个单词的词中;第三起始地址指向第m个一级索引单元对应的第一个三级索引单元,即保存了该首个单词的词尾的三级索引单元,音标起始地址指向第m个一级索引单元对应的第一个音标单元,即保存了该首个单词音标的音标单元,中文起始地址指向第m个一级索引单元对应的第一个中文解释单元,即保存了该首个单词的中文解释的中文解释单元,附加信息起始地址指向第m个一级索引单元对应的第一个附加信息单元,即保存了该首个单词的附加信息的附加信息单元。
在其他实施例中,上述音标起始地址、中文起始地址和附加信息起始地 址可以保存在第三起始地址所指向的三级索引单元中,以减少第一区块的容量,节省了内存的使用。
二级索引单元大小固定,即长度固定,而其对应的各单词的词中大小是变化的,因此需按照如下方式进行存储单词的词中信息:
如某单词的词中包含的字母数大于Q,则在二级索引单元中采用数字加字母的形式来存储,且该二级索引单元中的数字为该二级索引单元对应单词与同组的上一个二级索引单元对应单词从第P+1位开始连续相同的字母个数Rj,二级索引单元中的字母为该单词的词中除去所述连续相同的字母后余下的字母。对于一级索引单元对应的第一个二级索引单元存储的词中信息,本实施例较佳均采用字母形式。如果某单词的词中包括的字母数小于等于Q,则将该词中直接保存在二级索引单元中,不足的字母用设定的填充字符代替。二级索引单元中的数字占1个字节,范围为2~9,在有必要时也可以大于9。每个字母占1个字节,因此无论采用哪种方式,二级索引单元的大小均为Q个字节,本实施例Q=2。
第三区块中的三级索引单元用以存储单词的词尾,其存储的字母数量由于每个单词长度不同,是不定长的,即每个三级索引单元所占字节空间,按照单词词尾实际剩余字母数量而定。由于三级索引单元中保存的词尾是不定长的,本实施例在每个三级索引单元存储的词尾的最后一个字母之后再存储一个预设的结束符号,对三级索引单元加以分隔。结束符号可以是例如“*”、“$”、“&”等区别于字母的符号。
另外,音标库中对应不同单词的音标、中文解释库中对应不同单词的中文解释,以及附加信息库中对应不同单词的附加信息也以结束符号加以分隔。该结束符号也可以用于定位。
这种存储方式使得每个二级索引单元对应的单词都是唯一的且二级索引单元是固定长度的,如单词库有42000个单词,第二区块中就有42000个二级索引单元,因此通过对第二区块的查找即可快速定位到要查询到的单词,根据相应的起始地址和偏移量信息可以直接从第三区块取出单词的词尾,不需要对第三区块中不定长的三级索引单元进行遍历,因此第三区块可以不加载到内存中也不会对查询速度造成大的影响;且由于与上一单词连续 相同的字母已用数字代替,词尾要保存的字母大大减少,进一步地减少了对存储空间的需求,降低了硬件成本。
参见图4,以词头均为“mi”的一组依次相邻单词“misact、misaddress、misadjusted、misadjustment和misadventure”为例,来说明采用本实施例单词库结构时,各单词在各区块中的存储形式,其中假设单词“misact”与上一单词从第3位开始连续相同的字母个数不大于1:
单词misact:词中为“sa”,存储在二级索引单元中的形式为“sa”;在区块3中存储有2个字母“ct”,为单词“misact”刨除在区块1和区块2存储的字母后实际剩余的字母,即单词“misact”的第5、6个字母,;
单词misaddress:与上一单词“misact”从第3个字母开始连续相同的个数为2,即Rj=2,因此词中为“sad”,存储在二级索引单元中的形式为“2d”;词尾为dress”,存储在三级索引单元中;
单词misadjusted:与上一单词“misaddress”从第3个字母开始连续相同的个数为3,即Rj=3,因此词中为“sadj”,存储在二级索引单元中的形式为“3j”;词尾为“usted”,存储在三级索引单元中;
单词misadjustment:与上一单词“misadjusted”从第3个字母开始连续相同的个数为7,即Rj=7,因此词中为“sadjustm”,存储在二级索引单元中的形式为“7m”;词尾为“ent”,存储在三级索引单元中;
单词misadventure:与上一单词“misadjustment”从第3个字母开始连续相同的个数为3,即Rj=3,因此词中为“sadv”,存储在二级索引单元中的形式为“3v”;词尾为“enture”,存储在三级索引单元”。
文中,将输入的一个或多个字母均称为输入单词,即使这些字母不一定组成单词库中的某个单词。参考图5,该图示出了基于上述图3所示的电子词典单词库结构进行单词检索的方法,具体包含如下步骤:
步骤501:输入一单词并启动查询后,根据该输入单词头P个字母,从第一区块起始位置进行查找如遍历或者折半比对查找,直到找到存储的词头 大于等于该头P个字母的一级索引单元,如为等于,读取该一级索引单元对应的起始地址单元中存储的第二起始地址、第三起始地址、音标起始地址、中文起始地址和附加信息起始地址;
如找到的一级索引单元存储的词头大于输入单词的头P个字母,可以直接取出该一级索引单元中的词头,第二起始地址指向的二级索引单元中的词中,及第三起始地址指向的三级索引单元中的词尾,组合得到查询的单词,该单词就是该一级索引单元对应单词组中的第一个单词。这个与已有索引方法的处理是相似的,在之后的流程中不再讨论。另外,输入单词的字母数等于P时,如找到的一级索引单元存储的词头等于该输入单词,也可以直接取出该一级索引单元对应单词组中的第一个单词。
步骤502:从第二起始地址指向的二级索引单元开始在第二区块中向下进行遍历查找,并记录当前查找的二级索引单元Ui 2的序号i;
可将i初始值置为1,每查找完一个二级索引单元加1,因此等于Ui 2在同组二级索引单元中的序号。以下略去对i的更新操作,在此集中说明一下。
步骤503:判断当前查找的二级索引单元Ui 2对应单词的词中是否小于输入单词的第P+1至P+Mi个字母,Mi为Ui 2对应单词词中的字母数,如果是,令M=Mi,执行步骤504,如果否,执行步骤505;
根据上文的规定,第二起始地址对应的二级索引单元中的词中信息是字母形式的。
步骤504,继续查找下一个二级索引单元,判断该二级索引单元中存储的词中信息是否数字加字母形式且该数字大于等于记录的词中的字母数M,如果是,重新执行本步骤;如果否,即查找到一个存储的词中信息为字母形式,或为数字加字母形式且该数字小于M的二级索引单元,返回步骤503;
因为二级索引单元中数字代表的头两个字母等于之前最近的全字母形式的词中,因此可以跳过这些二级索引单元,加快查询速度。
如果找到的一级索引单元对应的一组二级索引单元都小于该输入单词,可以用与该组最后一个二级索引单元相邻的下一个二级索引单元对应的单词为最接近的单词输出。
步骤505,从Ui 2对应的三级索引单元读取Ui 2对应单词的词尾,判断Ui 2对应单词的词中加词尾是否大于等于输入单词第P个字母之后的字母组,如是,执行步骤508,否则,执行步骤506;
步骤506,以下一个二级索引单元作为新的Ui 2,如判断Ui 2中存储的词中信息为数字Ri加字母形式且Ri大于等于Mi-1(即Ui 2的词中包含了Ui-1 2的词中),如是,将Ui-1 2对应单词的词中加词尾中头(Ri-Mi-1)个字母再加Ui 2中存储的字母,得到二级索引单元Ui 2对应单词的词中,其中Ui-1 2为Ui 2的上一个二级索引单元,Mi-1为Ui-1 2对应单词的词中字母数,返回步骤503,如否,执行步骤507;
步骤507,根据Ui 2中存储的词中信息确定Ui 2对应单词的词中,从Ui 2对应的三级索引单元读取到Ui 2对应单词的词尾,执行步骤508;
确定Ui 2对应单词的词中时,如Ui 2中存储的词中信息为数字Ri加字母且Ri小于Mi-1,将Ui-1 2对应单词的词中的头Ri个字母加上Ui 2中存储的字母,得到二级索引单元Ui 2对应单词的词中;如Ui 2中存储的词中信息为字母形式,Ui 2中存储的Q个字母即为二级索引单元Ui 2对应单词的词中。由于根据之前的逻辑,输入单词已具有Ui-1 2对应单词的词中,在上述二种情况下已可以确定Ui 2对应单词大于要查询的单词,可以作为查询结果。
在上述步骤506中,也可以按步骤506和507中提到的三种情况先确定Ui 2对应单词的词中,然后返回到步骤503去判断,即对步骤507的二种情况统一由步骤503和505处理,结果与上述流程是相同的,但按上述流程可以简化处理,加快查询。
步骤508,将输入单词的头P个字母加上Ui 2对应单词的词中和词尾,得到查询到的目标单词,再根据Ui 2的序号i,结合在第一区块的起始地址单元读取的音标起始地址、中文起始地址以及附加信息起始地址,从音标库、中文解释库和附加信息库分别查找到该目标单词的音标、中文解释和附加信息,输出查询结果,结束。
如果将音标起始地址、中文起始地址以及附加信息起始地址存储在区块3中,具体地,存储在各一级索引单元对应的第一个三级索引单元的起始位置,根据找到的一级索引单元后保存的第三起始地址即可将这些起始地址读 出,用于音标、中文解释和附加信息的查找。在区块3中保存音标起始地址、中文起始地址以及附加信息起始地址,减少了区块1的容量,即节省了对内存的使用。
需说明的是,在单词查询中,目标单词可能与输入单词相同,如找不到与输入单词完全相同的单词,则以最接近的一个单词为目标单词。但在不同的单词查询系统中,对最接近的单词的定义可能是不同的。本实施例是以具有输入单词词头且大于输入单词的单词中最小的一个单词作为与该输入单词最接近的单词输出。但在其他单词查询系统也可以有其他的设定,如以从首字母开始相同单词数最多且比输入单词小的单词中最大的一个单词作为与该输入单词最接近的单词,如采用这种方式,上述流程需要做一些适应性的调整:在步骤503如判断Ui 2对应单词的词中大于输入单词的第P+1至P+Mi个字母,除Ui 2是查找的第一个二级索引单元时以该二级索引单元对应单词为查询结果外,以Ui 2上一个二级索引单元对应单词为查询结果,另在步骤507的“如否”的情况下以Ui-1 2对应单词为查询结果。而对另一些单词查询系统,最接近单词也可以列出多个,在步骤503如判断Ui 2对应单词的词中大于输入单词的第P+1至P+Mi个字母,可以从最近一次读取到词头、词中和词尾的单词为第一个单词列出多个单词作为查询结果。对于采用其他最接近单词的定义的情况,都可以在找到大于输入单词的单词中最小的一个单词后根据其定义容易地完成定位,这里不再逐一说明。
在有些实时查询的情况下,用户每输入一个字母系统就自动启动一次查询,这种情况下第一次查询的方式与上述流程相同,保存得到的起始地址信息、记录的词头、词中和词尾信息以及最后查询的二级索引单元的序号信息。在增加一个字母后,系统可以利用上一次查询所记录的词头、词中和词尾信息以及最后查询的二级索引单元的序号信息,从该最后查询的二级索引单元开始继续向下查询。
下面说明一下如何从当前查找的二级索引单元Ui 2对应的三级索引单元中读取到Ui 2对应单词的词尾。
因为三级索引单元中保存有结束符号且在查询过程中记录了Ui 2在同组 二级索引单元(即对应于同一个一级索引单元)中的序号i,一种简单的方法是从单词查询时读取的第三起始地址开始,累计读取到的结束符号的个数,第i个结束符号所在的三级索引单元即为要定位到的二级索引单元Ui 2对应的三级索引单元,其中保存的字母即为单词的词尾。
在查找目标单词的音标、中文解释以及附加信息时也可以采用相似的方法。以音标为例,从单词查询时读取的音标起始地址开始,累计读取到的结束符号的个数,从第i个结束符号所在的音标单元即可读取到目标单词的音标。这里的i为目标单词对应的二级索引单元的序号。对于中文解释和附加信息的读取不再赘述。
为了加快定位的速度,本实施例提出了一种分组查询方式。将对应于同一个一级索引单元的多个三级索引单元作为一个单元集,对每一个单元集中的三级索引单元,按以下方式进行分组:将单元集中的第a*k+1~a*(k+1)个三级索引单元分别组成一个小组,余下的三级索引单元组成最后一个小组,a为设定的一个小组包含的单元数,k=0,1,2...K,且有a*(K+1)<单元集中单元数≤a*(K+2)。另外,在每一小组的第一个三级索引单元的起始位置增加以下信息:本小组数据长度、本小组音标长度、本小组中文解释长度和本小组附加信息长度,各个长度信息可以为2个字节。
需要查找二级索引单元Ui 2对应的三级索引单元时,根据式i=M*a+b计算出M和b,其中i为Ui 2在同组二级索引单元中的序号,M,b为整数,0<=b<a。然后从读取的第三起始地址开始,读取到第1个小组存储的4组长度信息并保存,根据本小组数据长度直接跳转到第2个小组的起始位置;再读取第2个小组存储的4组长度信息并将本小组音标长度、本小组中文解释长度和本小组附加信息长度与之前保存的相应长度信息累加,再根据本小组数据长度直接跳转到第3个小组的起始位置;依此执行直到跳转到第M+1个小组的起始位置,此时再根据每个三级索引单元中的结束符号定位到第M+1个小组的第b个三级索引单元。
在查找目标单词的音标时,从单词查询时读取的音标起始地址开始,根据各小组累计得到的音标长度可以直接跳转到相应的音标分组的起始位置,从该位置开始的第b个结束符号所在的音标单元即存储了要查找的音标。查 找中文解释和附加信息是一样的,不再赘述。
假定词典数据库的词汇量为42,000个,基本包含单词词头开头的3个字母不同的所有单词,按背景技术中所述申请号为200810027416.7的中国专利申请公开的适用于移动设备的电子词典词库结构,需要载入26*(1+4)+26*26*26*(3+4)=123162字节,文中“*”用于公式时表示乘法运算,而采用本发明技术方案则仅需要载入26*27*(2+8)+42000*2=91020字节,因此采用本发明技术方案有效地节约了存储空间。另外,采用申请号为200810027416.7的中国专利申请公开的技术方案信息层顺序查询例如“accord”需要遍历52次,而采用本实施例的词库结构结合分组查询后,区块3仅需要遍历5次,而查询“secretly”,采用申请号为200810027416.7公开的技术方案需要遍历28次,而采用本实施例方案则仅需要遍历5次,因此提高了检索的效率。
相应的单词查询系统,包括:
用于将要写入单词库的每一单词的组成字母分为N个字母组或保存有各单词分成的N个字母组的字母分组装置;特别地,该字母分组装置将单词分成的N个字母组中,第n’个字母组之前的字母组定长,第n’个字母组及之后的字母组不定长,第n’级索引单元与单词库中的单词一一对应;本实施例中,该字母分组装置将每一单词的组成字母分为三个字母组:词头、词中和词尾,词头为单词的头P个字母,词中为单词的第P+1~P+Rj+Q-1个字母,词尾为词中后余下的字母,Rj为本单词与词头相同的上一单词从第P+1个字母开始连续相同的字母数,N=3,n’=2,P=2,Q=2,Rj=2~9。
用于将单词库分为N个区块,第n个区块包括多个n级索引单元,构成N级索引结构的区块创建装置;本实施例中,该区块创建装置将单词库分为第一区块、第二区块和第三区块,在内存中创建单词库三个区块中的第一区块和第二区块,第三区块创建在其他存储器中。
用于在各个n级索引单元中分别存储单词库中单词的第n个字母组的信息并按照字母组从小到大的顺序排列的信息载入装置,第2~N个区块中对应于前一级同一索引单元的一个或多个索引单元为同组的索引单元;特别 地,该信息载入装置在第j个单词与第j-1个单词的第n’个字母组之前的字母组均相同且从第n’个字母组的首字母开始连续相同的字母数为Rj时,用数字Rj加该字母组余下字母的形式表示载入的第j个n’级索引单元存储的第n’个字母组的信息,否则全用字母形式表示,2≤n’≤N,Rj≥2或1,j=2,3,...J,J为单词库包含的单词数;本实施例中,该信息载入装置在第一区块的一级索引单元存储单词的词头,占P字节;第二区块的二级索引单元存储数字加字母形式或者字母形式的词中信息,占Q字节;第三区块的三级索引单元存储单词的词尾并用结束符分隔,不定长;将字母组写入定长的索引单元时单词字母不足时用填充字符填充;还在第一区块保存每个一级索引单元对应的第一个二级索引单元和第一个三级索引单元的地址信息。该信息载入装置还在单词库的第一区块中保存每个一级索引单元在各个关联信息库中对应的第一个信息单元的地址信息。该信息载入装置还在第三区块的各个单元集中,将第a*k+1~a*(k+1)个单元分别组成一个小组,余下单元组成一个小组,a为设定的一个小组包含的单元数,k=0,1,2...K,a*(K+1)<单元集中单元数≤a*(K+2);在第三区块划分的各个小组的起始位置增加本小组数据长度和本小组在各个关联信息库中对应小组的关联信息长度;其中,在第三区块中,每个一级索引单元对应的多个三级索引单元构成一单元集,在每个关联信息库中,每个一级索引单元对应的多个信息单元构成一单元集。
用于根据N级索引结构对输入单词逐级索引,定位到要查询的单词索引装置;特别地,该单词索引装置对输入单词进行索引时,对n’级索引单元中的数字Rj,识别为同组的上一n’级索引单元对应单词的第n’个字母组的首字母开始连续Rj个字母。本实施例中单词索引装置查询的具体步骤可参上文中的流程,这里不再重复。
用于创建一个或多个关联信息库的关联信息库创建装置,每一关联信息库包含与单词库中单词一一对应的多个信息单元,信息单元之间按单词的排列顺序排序,关联信息库不加载到内存中。
用于在定位到要查询的单词后,到各个关联信息库查找到查询到的单词对应的信息单元并读取其中的关联信息,将查询到的单词和读取到的关联信息作为查询结果一起输出的所述关联信息索引装置。该关联信息索引装置在 每一关联信息库,根据找到的一级索引单元在该关联信息库中对应的第一个信息单元的地址,以及对该关联信息库中对应小组的关联信息长度的累加结果,直接定位到该关联信息库中与查询到的单词对应的信息单元。
其中,字母分组装置、区块创建装置、信息载入装置和关联信息库创建装置构成了词库创建系统。
第二实施例
本实施例电子词典的英文词库也分为单词库、音标库、中文解释库和附加信息库,如图2所示。且单词库中的单词,音标库中的音标,中文解释库中的中文解释,附加信息库中的附加信息的排序和比较大小的规则与第一实施例相同。
图6图示出了本实施例第二种电子词典单词库结构,包括第一区块、第二区块和第三区块,第一区块中包含多个一级索引单元,第二区块中包含多个二级索引单元,第三区块中包含多个三级索引单元。每个一级索引单元对应一组二级索引单元,每个二级索引单元对应一组三级索引单元。
将要写入单词库中的单词分为词头、词中和词尾。其中:词头是单词的头P个字母,P为用于第一级索引的字母个数,本实施例为2,也可以为1或3等;词中的字母数是固定的,为单词的第P+1~P+Q个字母,Q是用于第二级索引的字母个数,本实施例为2,也可以为1或3等;词尾是单词词中后剩余的字母。词头和词中分别存储至一级索引单元和二级索引单元,词尾直接以字母形式或以数字加字母的形式存储在三级索引单元。单词的词头和词中的字母数不够或没有字母的,不足的字母在相应索引单元中以设定的填充字符代替。由于每个字母占1个字节的存储空间,一级索引单元的长度固定为P个字节,二级索引单元的长度固定为Q个字节。
每个一级索引单元对应于第二区块中连续存储的一组二级索引单元,该组二级索引单元存储了具有该一级索引单元中词头的所有单词的词中。同样,每个二级索引单元对应于第三区块中连续存储的一组三级索引单元,该 组三级索引单元存储了具有该二级索引单元中的词中和该二级索引单元对应的一级索引单元中的词头的所有单词的词尾。而每个一级索引单元对应的连续存储的一组三级索引单元中存储了所有具有该一级索引单元中词头的所有单词的词尾。这与先前技术是类似的。
第一区块中除了存储单词词头的一级索引单元外,还包含与一级索引单元一一对应的多个起始地址单元。每个起始地址单元中包含5个起始地址,分别为:第二起始地址、第三起始地址,音标起始地址、中文解释起始地址和附加信息起始地址。该5个起始地址的定义与图3第一种单词库结构中的定义和作用相同,这里不再赘述。其中音标起始地址、中文解释起始地址和附加信息起始地址也可以放到三级索引单元的起始位置。
第二区块除了包含二级索引单元之外,还包含与二级索引单元一一对应的多个序列号单元,每个序列号单元占2个字节,用以存储一个序列号,作为指向该序列号单元对应的二级索引单元对应的第一个三级索引单元的指针,也即表示以该序列号单元对应的二级索引单元及其对应的一级索引单元中字母组为词中和词头的首个单词,在以该序列号单元对应的一级索引单元中的字母组为词头的所有单词中的序号。因为每个二级索引单元与多个三级索引单元相对应,第二区块中两两相邻的二级索引单元对应的序列号大多不是连续的。采用在第一区块保存一级索引单元对应的第一个三级索引单元的地址信息(总数量少),在第二区块用序号作为找到的二级索引单元对应的第一个三级索引单元的指针,第一、二区块相结合的方式,相对于采用在第二区块每个二级索引单元中保存对应的第一个三级索引单元的地址信息的方式(总数量多,每个占用字节比序号多),节省了存储空间。
第三区块中的每个三级索引单元对应于一个单词且存储着这个单词的词尾信息。如果某单词与上一单词同组且从第P+Q+1位开始连续相同的字母个数S大于1,S范围2~9,则在三级索引单元中采用数字加字母组的形式来存储,该数字为S,字母组为该单词第P+Q+S位之后的一个或多个字母;如果某单词与上一单词不同组,或者同组但从第P+Q+1位开始连续相同的字母个数不大于1,则在三级索引单元中存储该单词第P+Q位之后的所有字母。三级索引单元所占字节空间是不定长的,1个字母和1个数字均占 用1个字节。把相邻单词词尾中连续相同部分用数字表示,可以缩短单词的存储空间,降低单词库的硬件成本。在三级索引单元存储的词尾后还有一结束符号,用以区隔不同的单词以便以单词为单位进行遍历。词尾没有字母时可存储一填充字符,也可直接写入结束符号。
由于在进行单词查找的过程中,单词库的第一区块、第二区块和第三区块是载入内存中以便进行快速查找的,而音标库、中文解释库、附加信息库无需载入内存,可以根据索引过程中得到的起始地址和偏移量信息直接读取。
参见图7,定义P=2,Q=2,下面以词头均为“mi”的一组依次相邻单词“misact、misaddress、misadjusted、misadjustment和misadventure...,misbecome...,misc...”为例,来说明采用第二种单词库结构时,各单词在各区块中的存储形式:
首先进行如下假设:“misact、misaddress、misadjusted、misadjustment和misadventure”为依次相邻的单词,其词尾也存储在依次相邻的多个三级索引单元中。“misact”、“misbecome”和“misc”,分别为以“misa”、“misb”、“misc”为首的一系列单词序列中的头一个单词,其中,“misact”对应的序列号为101,以“misa”为词头和词中的单词数量为90个,以“misb”为词头和词中的单词数量为100个,那么:
单词misact:词中为“sa”,存储二级索引单元中的形式为“sa”,对应的序列号为101,等于misact在词头为“mi”的所有单词中的序号,词尾为“ct”,存储在三级索引单元中的形式为“ct”;
单词misaddress:词中为“sa”,存储在二级索引单元中的形式为“sa”,词尾为“ddress”,存储在三级索引单元中的形式为“ddress”;
单词misadjusted:词中为“sa”,存储在二级索引单元中的形式为“sa”,词尾为“djusted”,存储在三级索引单元中的形式为“djusted”;
单词misadjustment:词中为“sa”,存储在二级索引单元中的形式为“sa”,词尾为“djustment”,与上一单词“misadjusted”词尾的头5位连续相同, 因此存储在三级索引单元中的形式为“5ment”;
单词misadventure:词中为“sa”,存储在二级索引单元中的形式为“sa”,词尾为“dventure”,存储在三级索引单元中的形式为“dventure”;
单词misbecome:词中为“sb”,存储在二级索引单元中的形式为“sb”,对应的序列号均为101+90=191,等于misbecome在词头为“mi”的所有单词中的序号,词尾为“ecome”,存储在三级索引单元中的形式为“ecome”;
单词misc:词中为“sc”,存储在二级索引单元中的形式为“sc”,对应的序列号为191+100=291,等于misc在词头为“mi”的所有单词中的序号,词尾不存在。
图8示出了基于上述图6所示的第二种电子词典单词库结构,输入一个单词后进行检索的方法,具体包含如下步骤:
步骤801:输入一单词并启动查询后,如在第一区块查找到存储的词头等于该头P个字母的一级索引单元,记录该词头,并读取该一级索引单元对应的起始地址单元中存储的第二起始地址、第三起始地址、音标起始地址、中文起始地址和附加信息起始地址;
对于找到的一级索引单元存储的词头大于输入单词头P个字母时的处理参考步骤501的说明,这里不再讨论。
步骤802:从第二起始地址指向的二级索引单元开始在第二区块中向下进行遍历查找,直到找到存储的词中大于等于输入单词第P+1~P+Q位字母的二级索引单元,记录该词中,如是等于,执行步骤803,如是大于,执行步骤806;
步骤803,读取找到的二级索引单元对应序列号单元中的序列号X,在第三区块中,先找到第三起始地址对应的三级索引单元之后的第X-1个三级索引单元,下文用U1 3表示,置序号i=1,从U1 3开始向下对三级索引单元逐个查找;
U1 3存储的是具有之前记录的词中和词头的所有单词中的首个单词的词尾。该步中,可以采用第一实施例中的分组查询方式以快速定位到要查找的 三级索引单元,也可以从第三起始地址对应的三级索引单元开始向下进行遍历,遍历时累计结束符号的个数,将第X个结束符号所在的三级索引单元作为要查找的三级索引单元。
步骤804:对当前查找的三级索引单元Ui 3,先得到该Ui 3对应单词的词尾,再判断该词尾是否大于等于输入单词第P+Q位字母之后的字母组,如果是,执行步骤807,否则,执行步骤805;
在确定Ui 3对应单词的词尾时,如Ui 3存储的词尾信息是数字S加字母形式时,用上一个三级索引单元Ui 3(i=1,2,3,...)对应单词词尾中的头S个字母替换该数字,再加上Ui 3存储的所有字母即可得到Ui 3对应单词的词尾。如果Ui 3存储的词尾信息是字母形式时,存储的所有字母即为Ui 3对应单词的词尾。
步骤805,令i=i+1,以下一个三级索引单元为新的Ui 3,返回步骤804;
步骤806,读取找到的二级索引单元对应序列号单元中的序列号X,在第三区块中找到第三起始地址对应的三级索引单元之后的第X-1个三级索引单元,作为当前查找的三级索引单元Ui 3,然后执行步骤807;
步骤807,用记录的词头和词中,加上Ui 3对应单词的词尾,得到查询到的目标单词,再根据读取到的音标起始地址、中文起始地址以及附加信息起始地址,以X+i为偏移的单元数,从音标库、中文解释库和附加信息库的相应单元中分别查找到该目标单词的音标、中文解释和附加信息,输出查询结果,结束。
如果根据起始地址和偏移量信息查找目标单词的音标、中文解释和附加信息,在第一实施例中已详细说明,不再重复。
相应的单词查询系统,包括:
用于将要写入单词库的每一单词的组成字母分为N个字母组或保存有各单词分成的N个字母组的字母分组装置;特别地,该字母分组装置将单词分成的N个字母组中,第n’个字母组之前的字母组定长,第n’个字母组及之后的字母组不定长,第n’级索引单元与单词库中的单词一一对应;本实 施例中,该字母分组装置将每一单词的组成字母分为三个字母组:词头、词中和词尾,词头为单词的头P个字母,词中为单词的第P+1~P+Q个字母,词尾为词中后余下的字母,N=n’=3,P=2,Q=2,Rj=2~9。
用于将单词库分为N个区块,第n个区块包括多个n级索引单元,构成N级索引结构的区块创建装置;本实施例中,该区块创建装置将单词库分为第一区块、第二区块和第三区块,三个区块均创建在内存中。
用于在各个n级索引单元中分别存储单词库中单词的第n个字母组的信息并按照字母组从小到大的顺序排列的信息载入装置,第2~N个区块中对应于前一级同一索引单元的一个或多个索引单元为同组的索引单元;特别地,该信息载入装置在第j个单词与第j-1个单词的第n’个字母组之前的字母组均相同且从第n’个字母组的首字母开始连续相同的字母数为Rj时,用数字Rj加该字母组余下字母的形式表示载入的第j个n’级索引单元存储的第n’个字母组的信息,否则全用字母形式表示,2≤n’≤N,Rj≥2或1,j=2,3,...J,J为单词库包含的单词数;本实施例中,该信息载入装置在第一区块的一级索引单元存储单词的词头,占P字节;第二区块的二级索引单元存储单词的词中,占Q字节;第三区块的三级索引单元存储数字加字母形式或者字母形式的词尾信息并用结束符分隔,不定长;将字母组写入定长的索引单元时单词字母不足时用填充字符填充;第一区块保存有每个一级索引单元对应的第一个二级索引单元的地址信息,在第一区块中还保存了每个一级索引单元对应的第一个三级索引单元的地址,在第二区块中保存的地址信息为与二级索引单元一一对应的序列号,每一序列号等于对应的二级索引单元对应单词组中的首个单词在同组二级索引单元对应的所有单词中的序号。该信息载入装置还在单词库的一个区块中保存了每个一级索引单元在各个关联信息库中对应的第一个信息单元的地址信息。该信息载入装置在第三区块的各个单元集中,将第a*k+1~a*(k+1)个单元分别组成一个小组,余下单元组成一个小组,a为设定的一个小组包含的单元数,k=0,1,2...K,a*(K+1)<单元集中单元数≤a*(K+2);在第三区块划分的各个小组的起始位置增加本小组数据长度和本小组在各个关联信息库中对应小组的关联信息长度;其中,在第三区块中,每个一级索引单元对应的多个三级索引单元构成一单元集,在每个关 联信息库中,每个一级索引单元对应的多个信息单元构成一单元集。
用于根据N级索引结构对输入单词逐级索引,定位到要查询的单词索引装置;特别地,该单词索引装置对输入单词进行索引时,对n’级索引单元中的数字Rj,识别为同组的上一n’级索引单元对应单词的第n’个字母组的首字母开始连续Rj个字母。本实施例中单词索引装置查询的具体步骤可参上文中的流程和发明内容中的内容,在此不再赘述。
该单词查询系统还包括关联信息库创建装置和关联信息索引装置,该两个装置与第一实施例相同,不再重复。
其中,字母分组装置、区块创建装置、信息载入装置和关联信息库创建装置构成了词库创建系统。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
例如,在背景技术中提到的图1所示的单词库中,也可以应用本发明提出的数字加字母形式的表达方式。变换后的方案为,在其信息层中采用实施例二中的三级索引方式即只保存单词的第3个字母组,在第j个单词与第j-1个单词前2个字母组相同且从第3个字母组的首字母开始连续相同的字母数Rj大于1,则在第j个三级索引单元中用数字Rj加字母的形式表示单词余下的字母,这样将三级索引结构载入内存时可以节约存储的空间。
容易理解地,本发明可以应用于英文之后由字母构成的单词库和单词查询,如德语、法语等等。本发明同样可以应用于除电子词典外的任何单词查询系统中。