发明内容
本发明的目的是提供一种基于多元切分的倒排索引检索方法,规避检索过程中的多分词距离运算,解决了多分词情况的检索速度慢的问题,省去了在倒排索引中对分词偏移的磁盘记录空间的占用。
为实现上述目的,本发明采用以下技术方案:
一种基于多元切分的倒排索引检索方法,包括如下步骤:
步骤1:建立索引系统,索引系统包括Hadoop云存储平台、索引客户端和文本客户端,索引客户端和文本客户端均通过互联网与Hadoop云存储平台连接;
步骤2:用户通过文本客户端上传数个文本数据,文本客户端将所有文本数据均通过互联网传送给Hadoop云存储平台,Hadoop云存储平台的MapReduce对每一个文本数据均设定一个数据ID,并将所有文本数据均存储到Hadoop云存储平台的HDFS中;
步骤3:MapReduce对任意一个文本数据执行清洗任务,并生成清洗后文本数据,清洗任务包括对该文本数据中的大写字母转换成小写字母和对该文本数据中的全角转换半角;
步骤4:MapReduce对清洗后文本数据执行多元分词,其步骤如下:
步骤A:设定分词的最小单位为一个词元,设定词元的个数最大为N,N为正整数,MapReduce创建词元序列,以便对所有词元进行排序;
步骤B:MapReduce尝试从文本中读取一个词元:如能读取,则将读取的词元加入词元序列,执行步骤C;如不能读取,则执行步骤D;
步骤C:判断词元序列中的词元个数是否等于N:是,则执行步骤D;否,则执行步骤B;
步骤D:判断词元序列中的词元个数是否等于0:是,则执行步骤H;否,则执行步骤E;
步骤E:MapReduce以词元序列的第一词元为基准,对词元序列中的所有词元执行一元分词、二元分词…N元分词;
步骤F:删除词元序列中的第一个词元,执行步骤B;
步骤H:对清洗后文本数据执行多元分词的任务结束,并根据多元分词的结果生成分词列表;
步骤5:MapReduce对分词列表执行去重任务,并生成去重分词列表,去重任务包括删除分词列表中重复的词元;
步骤6:重复执行步骤3到步骤5,对所有文本数据均生成相应的去重分词列表;
步骤7:创建倒排表,设定提取词为去重分词列表中的任意一个词元,设定一个提取词,将所有包含该提取词的文本数据的数据ID集合在一起组成一个ID集合,该提取词与该ID集合的映射表即为倒排表,MapReduce根据文本数据所对应的去重分词列表和数据ID构建倒排索引,其步骤如下:
步骤I:接收所有文本数据的数据ID和去重分词列表,创建倒排表;
步骤J:设定去重分词列表中的任意一个词元为提取词W,MapReduce对提取词W进行以下处理:首先在倒排表中查找提取词W,如果能查找到,则在倒排表中添加数据ID,该数据ID在倒排表中的位置为提取词W映射的ID集合;如果不能查到,则在倒排表中添加新ID集合,并将提取词W与所述新ID集合建立映射关系,将所述数据ID添加到所述新ID集合中;
步骤K:遍历去重分词列表,重复执行步骤J,直到去重分词列表中所有的词元均处理完;
步骤L:重复执行步骤I和步骤K,直到接收的所有文本数据均处理完,即倒排表创建完毕;
步骤M:MapReduce创建倒排文件,将倒排表中每个提取词映射的ID集合写入倒排文件;
步骤N:MapReduce创建字典文件,将倒排表中每个提取词及其对应的ID集合内容在倒排文件中的偏移和长度写入字典文件,并在字典文件中建立提取词列表;
步骤O:MapReduce对字典文件中的提取词列表,按照如下步骤构建字典索引:
步骤S1:设定提取词列表中的任意一个提取词为提取词Wn,n为正整数,n的最大值为提取词列表中所有提取词的个数,设定提取词Wn在字典文件中的偏移为偏移Pn,n为正整数,n的最大值为提取词列表中所有提取词的个数;
步骤S2:设定参数步长S,并预设步长S的值,步长S的值小于提取词列表中所有提取词的个数,设定参数m,m=S+n,n的初始值为1;
步骤S3:获取提取词Wm以及提取词Wm在字典文件中的偏移Pm,建立关系式<Wm,Pm>作为索引关系式;
步骤S4:重复执行步骤S2和步骤S3,直到m的值大于提取词列表中所有提取词的个数;
步骤S5:对提取词列表中所有提取词均建立索引关系式,即对所有提取词列表中所有提取词均构建字典索引;
步骤S6:将所有所述字典索引均写入字典索引文件;
步骤P:倒排索引构建结束;
步骤8:重复执行步骤2~步骤7,直到处理完用户输入的所有文本数据,并生成构建好的索引;
步骤9:通过所述构建好的索引执行各种索引查询,其步骤如下:
步骤Q:设定词元的个数最大为N,N为正整数,设定检索词中的词元数为X,X为正整数,用户通过索引客户端输入检索词,索引客户端将检索词均发送给Hadoop云存储平台,Hadoop云存储平台根据检索词和所述构建好的索引,将索引查询分为如下集中情况:
步骤S7:当检索词中的词元数X小于等于N时,MapReduce根据以下步骤进行检索:
步骤A1:搜索检索词在字典索引文件中的偏移位置Pi,i为整数,i小于N;
步骤A2;在字典索引文件中,从偏移位置Pi开始,向后搜索检索词,直到超过给定步长S或者搜索到检索词停止:如果能搜到检索词,则执行步骤A3;如果不能搜到检索词,结束检索,并返回无搜索结果;
步骤A3:从字典索引文件中获取检索词在倒排索引中的偏移和数据长度;
步骤A4:根据步骤A3中的偏移和长度读取倒排索引,获取对应的数据ID,并返回数据ID;
步骤S8:当检索词中的词元数X大于N时,MapReduce根据以下步骤进行检索:
步骤A5:设定检索词中的词元为Ci,1<=i<=X,遍历检索词的词元Ci,从第一个词元C1开始,提取长度为N的检索词作为提取词W1,提取词W1由C1…CN组成;
步骤A6:根据步骤A5中的提取规则,从下一个词元Ci开始,提取检索词作为提取词Wi;
步骤A7:循环执行步骤A6,直到剩余词元的个数不足N,则结束提取;
步骤A8:对每一个通过步骤A5~步骤A8所得到的提取词,根据步骤S7所述的方法进行检索操作,获取对应的数据ID;
步骤A9:对步骤A8中每个检索对应的数据ID执行交集运算;
步骤A10:结束检索,返回交集运算后的数据ID;
步骤S9:当输入的检索词需要进行多检索词的与或非检索时,MapReduce根据以下步骤进行检索:
步骤A11:分析检索词,根据后缀表达式原则,生成查询树;
步骤A12:遍历查询树,按照步骤S8中所述的方法,将词元数大于N的检索词,切分成多个词元数等于N的检索词作为分词检索词,并用逻辑与方式拼接;
步骤A13:遍历查询树,对每个分词检索词根据步骤S7中所述的方法进行检索操作,获取对应的数据ID;
步骤A14:对步骤A13)中获取的每一个数据ID列表均顺序执行交、并、差三种集合运算,生成运算后的数据ID;
步骤A15:返回运算后的数据ID,结束检索。
所述索引客户端为电脑。
所述文本客户端为电脑。
本发明所述的一种基于多元切分的倒排索引检索方法,规避检索过程中的多分词距离运算,解决了多分词情况的检索速度慢的问题,省去了在倒排索引中对分词偏移的磁盘记录空间的占用。
具体实施方式
如图1~图4所示的一种基于多元切分的倒排索引检索方法,其特征在于:包括如下步骤:
步骤1:建立索引系统,索引系统包括Hadoop云存储平台、索引客户端和文本客户端,索引客户端和文本客户端均通过互联网与Hadoop云存储平台连接;
步骤2:用户通过文本客户端上传数个文本数据,文本客户端将所有文本数据均通过互联网传送给Hadoop云存储平台,Hadoop云存储平台的MapReduce对每一个文本数据均设定一个数据ID,并将所有文本数据均存储到Hadoop云存储平台的HDFS中;
步骤3:MapReduce对任意一个文本数据执行清洗任务,并生成清洗后文本数据,清洗任务包括对该文本数据中的大写字母转换成小写字母和对该文本数据中的全角转换半角;
步骤4:MapReduce对清洗后文本数据执行多元分词,其步骤如下:
步骤A:设定分词的最小单位为一个词元,设定词元的个数最大为N,N为正整数,MapReduce创建词元序列,以便对所有词元进行排序;
步骤B:MapReduce尝试从文本中读取一个词元:如能读取,则将读取的词元加入词元序列,执行步骤C;如不能读取,则执行步骤D;
步骤C:判断词元序列中的词元个数是否等于N:是,则执行步骤D;否,则执行步骤B;
步骤D:判断词元序列中的词元个数是否等于0:是,则执行步骤H;否,则执行步骤E;
步骤E:MapReduce以词元序列的第一词元为基准,对词元序列中的所有词元执行一元分词、二元分词…N元分词;
步骤F:删除词元序列中的第一个词元,执行步骤B;
步骤H:对清洗后文本数据执行多元分词的任务结束,并根据多元分词的结果生成分词列表;
步骤5:MapReduce对分词列表执行去重任务,并生成去重分词列表,去重任务包括删除分词列表中重复的词元;
步骤6:重复执行步骤3到步骤5,对所有文本数据均生成相应的去重分词列表;
步骤7:如表5所示,创建倒排表,设定提取词为去重分词列表中的任意一个词元,设定一个提取词,将所有包含该提取词的文本数据的数据ID集合在一起组成一个ID集合,该提取词与该ID集合的映射表即为倒排表,MapReduce根据文本数据所对应的去重分词列表和数据ID构建倒排索引,其步骤如下:
步骤I:接收所有文本数据的数据ID和去重分词列表,创建倒排表;
步骤J:设定去重分词列表中的任意一个词元为提取词W,MapReduce对提取词W进行以下处理:首先在倒排表中查找提取词W,如果能查找到,则在倒排表中添加数据ID,该数据ID在倒排表中的位置为提取词W映射的ID集合;如果不能查到,则在倒排表中添加新ID集合,并将提取词W与所述新ID集合建立映射关系,将所述数据ID添加到所述新ID集合中;
步骤K:遍历去重分词列表,重复执行步骤J,直到去重分词列表中所有的词元均处理完;
步骤L:重复执行步骤I和步骤K,直到接收的所有文本数据均处理完,即倒排表创建完毕;
步骤M:MapReduce创建倒排文件,将倒排表中每个提取词映射的ID集合写入倒排文件;
步骤N:MapReduce创建字典文件,将倒排表中每个提取词及其对应的ID集合内容在倒排文件中的偏移和长度写入字典文件,并在字典文件中建立提取词列表;
步骤O:MapReduce对字典文件中的提取词列表,按照如下步骤构建字典索引:
步骤S1:设定提取词列表中的任意一个提取词为提取词Wn,n为正整数,n的最大值为提取词列表中所有提取词的个数,设定提取词Wn在字典文件中的偏移为偏移Pn,n为正整数,n的最大值为提取词列表中所有提取词的个数;
步骤S2:设定参数步长S,并预设步长S的值,步长S的值小于提取词列表中所有提取词的个数,设定参数m,m=S+n,n的初始值为1;
步骤S3:获取提取词Wm以及提取词Wm在字典文件中的偏移Pm,建立关系式<Wm,Pm>作为索引关系式;
步骤S4:重复执行步骤S2和步骤S3,直到m的值大于提取词列表中所有提取词的个数;
步骤S5:对提取词列表中所有提取词均建立索引关系式,即对所有提取词列表中所有提取词均构建字典索引;
步骤S6:将所有所述字典索引均写入字典索引文件;
步骤P:倒排索引构建结束;
步骤8:重复执行步骤2~步骤7,直到处理完用户输入的所有文本数据,并生成构建好的索引;
步骤9:通过所述构建好的索引执行各种索引查询,其步骤如下:
步骤Q:设定词元的个数最大为N,N为正整数,设定检索词中的词元数为X,X为正整数,用户通过索引客户端输入检索词,索引客户端将检索词均发送给Hadoop云存储平台,Hadoop云存储平台根据检索词和所述构建好的索引,将索引查询分为如下集中情况:
步骤S7:当检索词中的词元数X小于等于N时,MapReduce根据以下步骤进行检索:
步骤A1:搜索检索词在字典索引文件中的偏移位置Pi,i为整数,i小于N;
步骤A2;在字典索引文件中,从偏移位置Pi开始,向后搜索检索词,直到超过给定步长S或者搜索到检索词停止:如果能搜到检索词,则执行步骤A3;如果不能搜到检索词,结束检索,并返回无搜索结果;
步骤A3:从字典索引文件中获取检索词在倒排索引中的偏移和数据长度;
步骤A4:根据步骤A3中的偏移和长度读取倒排索引,获取对应的数据ID,并返回数据ID;
步骤S8:当检索词中的词元数X大于N时,MapReduce根据以下步骤进行检索:
步骤A5:设定检索词中的词元为Ci,1<=i<=X,遍历检索词的词元Ci,从第一个词元C1开始,提取长度为N的检索词作为提取词W1,提取词W1由C1…CN组成;
步骤A6:根据步骤A5中的提取规则,从下一个词元Ci开始,提取检索词作为提取词Wi;
步骤A7:循环执行步骤A6,直到剩余词元的个数不足N,则结束提取;
步骤A8:对每一个通过步骤A5~步骤A8所得到的提取词,根据步骤S7所述的方法进行检索操作,获取对应的数据ID;
步骤A9:对步骤A8中每个检索对应的数据ID执行交集运算;
步骤A10:结束检索,返回交集运算后的数据ID;
步骤S9:当输入的检索词需要进行多检索词的与或非检索时,MapReduce根据以下步骤进行检索:
步骤A11:分析检索词,根据后缀表达式原则,生成查询树;
步骤A12:遍历查询树,按照步骤S8中所述的方法,将词元数大于N的检索词,切分成多个词元数等于N的检索词作为分词检索词,并用逻辑与方式拼接;
步骤A13:遍历查询树,对每个分词检索词根据步骤S7中所述的方法进行检索操作,获取对应的数据ID;
步骤A14:对步骤A13)中获取的每一个数据ID列表均顺序执行交、并、差三种集合运算,生成运算后的数据ID;
步骤A15:返回运算后的数据ID,结束检索。
所述索引客户端为电脑。
所述文本客户端为电脑。
一元分词就是最简单的分词,将所有的中文字符按照单字形式输出;二元分词按双字形式输出;多元分词则是将一句话中可能的单词组合按照一定规则输出,允许输出的词有重叠。
以用户输入的文本数据的切分方法为为1~4元切分方法,步长S的预设值为10;用户输入的文本数据的数个为3;用户输入的文本数据的内容和文本数据所对应的数据ID如表1所示:
数据ID |
文本数据 |
0 |
农民经常用复合肥。 |
1 |
常用复合技术生产农用复合肥。 |
2 |
复合肥好用。 |
表1
根据步骤1~步骤8中所述的方法,对数据ID为0的文本数据执行1~4元切分,得到去重分词列表0:农、农民、农民经、农民经常、民、民经、民经常、民经常用、经、经常、经常用、经常用复、常、常用、常用复、常用复合、用、用复、用复合、用复合肥、复、复合、复合肥、合、合肥和肥;
根据步骤1~步骤8中所述的方法,对数据ID为1的文章内容执行执行1~4元切分,得到去重分词列表1:常、常用、常用复、常用复合、用、用复、用复合、用复合技、复、复合、复合技、复合技术、合、合技、合技术、合技术生、技、技术、技术生、技术生产、术、术生、术生产、术生产农、生、生产、生产农、生产农用、产、产农、产农用、产农用复、农、农用、农用复、农用复合、用复合肥、复合肥、合肥和肥;
根据步骤1~步骤8中所述的方法,对数据ID为2的文本数据执行1~4元切分,得到去重分词列表2:复、复合、复合肥、复合肥好、合、合肥、合肥好、合肥好用、肥、肥好、肥好用、好、好用和用;
如表2~表4所示,根据步骤1~步骤8中所述的方法对去重分词列表0、去重分词列表1、去重分词列表2倒排表;
提取词列表 |
ID集合 |
索引词标记 |
产 |
1 |
√ |
产农 |
1 |
|
产农用 |
1 |
|
产农用复 |
1 |
|
常 |
0 1 |
|
常用 |
0 1 |
|
常用复 |
0 1 |
|
常用复合 |
0 1 |
|
肥 |
0 1 2 |
|
肥好 |
2 |
|
肥好用 |
2 |
√ |
复 |
0 1 2 |
|
复合 |
0 1 2 |
|
复合肥 |
0 1 2 |
|
表2
提取词列表 |
ID集合 |
索引词标记 |
复合肥好 |
2 |
|
复合技 |
1 |
|
复合技术 |
1 |
|
好 |
2 |
|
好用 |
2 |
|
合 |
0 1 2 |
|
合肥 |
0 1 2 |
√ |
合肥好 |
2 |
|
合肥好用 |
2 |
|
合技 |
1 |
|
合技术 |
1 |
|
合技术生 |
1 |
|
技 |
1 |
|
技术 |
1 |
|
技术生 |
1 |
|
技术生产 |
1 |
|
经 |
0 |
√ |
经常 |
0 |
|
经常用 |
0 |
|
经常用复 |
0 |
|
民 |
0 |
|
民经 |
0 |
|
民经常 |
0 |
|
民经常用 |
0 |
|
农 |
0 1 |
|
农民 |
0 |
|
农民经 |
0 |
√ |
农民经常 |
0 |
|
农用 |
1 |
|
农用复 |
1 |
|
农用复合 |
1 |
|
表3
提取词列表 |
ID集合 |
索引词标记 |
生 |
1 |
|
生产 |
1 |
|
生产农 |
1 |
|
生产农用 |
1 |
|
术 |
1 |
|
术生 |
1 |
√ |
术生产 |
1 |
|
术生产农 |
1 |
|
用 |
0 1 2 |
|
用复 |
0 1 |
|
用复合 |
0 1 |
|
用复合肥 |
0 1 |
|
用复合技 |
1 |
√ |
表4
表5
如表1~表4所示,根据步骤1~步骤8中所述的方法,将各提取词对应的ID集合内容依次写入倒排文件中,得到每段数据的写入偏移和长度。
根据步骤1~步骤8中所述的方法,将各提取词和提取词对应的ID集合内容在倒排文件中的偏移和长度,按提取词的排序顺序依次写入字典索引文件中。
根据步骤1~步骤8中所述的方法,生成构建好的索引;
根据步骤9所述的方法,当用户输入的检索词的词元数小于等于4时,假设检索词为:经常
根据步骤9所述的方法,按照最大元分词方法切分检索词后,得到检索词:经常;
根据步骤9所述的方法,在所述构建好的索引中,确定“经常”检索词所在的字典区间:“经”~“农民经”;
根据步骤9所述的方法,确定“经常”检索词在倒排文件中位置;
根据步骤9所述的方法,读取倒排文件得到ID集合的序号为0;
当用户输入的检索词的词元数大于4时,假设检索词为:农用复合肥;
根据步骤9所述的方法,按照最大元切分方法切分检索词后,得到检索词列表:农用复合,用复合肥;
根据步骤9所述的方法,确定“农用复合”检索词对应的ID集合序号为1;
根据步骤9所述的方法,确定“用复合肥”检索词对应的ID集合的序号为0和1;
根据步骤9所述的方法,执行交集运算得到结果ID集合的序号为1;
当用户收入的检索词的词元数大于4的检索词查询,假设检索词为:常用复合肥;
根据步骤9所述的方法,按照最大元切分方法切分检索词后,得到检索词列表:常用复合,用复合肥
根据步骤9所述的方法,确定“常用复合”检索词对应的ID集合的序号为0和1;
根据步骤9所述的方法,确定“用复合肥”检索词对应的ID集合的序号为0和1;
根据步骤9所述的方法,执行交集运算得到结果ID集合的序号为0和1;
其中序号0的结果正确,序号1的结果有问题,因为原始检索词的各个词元位置不连续,但是大部分词元位置是连续的,得到的结果近似;
根据步骤9所述的方法,执行组合检索词查询,假设检索词为:常用AND农OR农用复合肥;
根据步骤9所述的方法,得到检索词为:常用AND农OR(农用复合AND用复合肥);
根据步骤9所述的方法,确定“常用”检索词对应的ID集合的序号为0和1;
根据步骤9所述的方法,确定“农”检索词对应的ID集合的序号为0和1;
根据步骤9所述的方法,确定“农用复合”检索词对应的ID集合的序号为1;
根据步骤9所述的方法,确定“用复合肥”检索词对应的ID集合的序号为0和1;
根据查询树的节点优先级,执行与或非集合运算,得到结果ID集合的序号为0和1。
本发明所述的一种基于多元切分的倒排索引检索方法,规避检索过程中的多分词距离运算,解决了多分词情况的检索速度慢的问题,省去了在倒排索引中对分词偏移的磁盘记录空间的占用。