[0018] 下面结合附图,对本发明的具体实施方案作进一步详细描述。其具体步骤描述如图1所示:
[0019] 步骤1.生成初始资源列表。利用基于相关度的资源选择方法,计算出每个资源的相关度并排序,得到一个依据相关度排序的列表。
[0020] 步骤2. 从查询结果中获取结果文档的指纹集。包括两个子步骤:
[0021] 1)从结果中提取指纹集。对每个结果文档,利用指纹提取技术提取出一串固定长度的数字来表示一个结果文档的标题内容。两个内容很接近的标题能够用同一个指纹来表现。对某个资源和查询,所有指纹的集合就是该资源的覆盖统计信息。为了更好地解决从短文本提取指纹的问题,本发明采用一种高效的,健壮的,不需要全局统计信息的指纹技术(Shingle-based Discrete Cosine Transform,S-DCT)。为过滤噪音词汇,S-DCT将停用词和标点符号删除;从词序列中生成一组shingle,利用DCT将每个shingle转化成一个指纹。具体地说,S-DCT方法包括以下步骤:
[0022] (1) 获得一个结果 的标题内容。
[0023] (2) 删除停用词和标点符号。
[0024] (3) 对每个词执行取词根操作。
[0025] (4) 对剩余词按字典序排列,生成一个词序。
[0026] (5) 利用滑动窗口技术,对词序生成一组shingles。
[0027] (6) 对每个shingle,计算shingle 中的哈希值。
[0028] (7) 对所有哈希值进行垂直变换,使之哈希值的均值落在0。
[0029] (8) 用哈希最大值,规范化所有的哈希值。
[0030] (9) 对所有规范化的哈希值进行DCT变换。
[0031] (10) 对每个DCT系数量化为少量的bit位上。
[0032] (11) 合并所有bit位,创建指纹。
[0033] (12) 所有shingles的指纹,用于表示这个结果 。
[0034] 2)压缩指纹集。为了节省带宽和存储空间,利用布隆过滤器来存储指纹集。从而,一个资源的覆盖统计信息的结构表示为:
[0035]
[0036] 通常情况下,一个文档的指纹应该基于文档的所有内容产生。
[0037] 步骤3.管理覆盖统计信息。
[0038] 当一组覆盖统计信息产生后,系统需要根据统计信息中查询词的语义,分发到P2P网络中。语义相近的查询对应的覆盖统计信息,能够被放在同一个资源上。相应地,查询一个特定关键词的覆盖统计信息,是依据该关键词的语义在语义空间里查询。相应地,给定一个查询,该查询相关的覆盖统计信息通过该查询的语义向量进行检索。从而能够在高效存储和检索覆盖统计信息的同时,减小系统的存储开销和提高系统的可扩展性。
[0039] 为了减小系统的存储开销和提高系统的可扩展性,本发明采用基于查询关键词语义的分发策略,利用潜在语义索引将每个查询向量映射到其语义向量,再将语义向量映射到一个位于Chord ID范围的整数值,决定该覆盖统计信息应该放在哪个资源。这个过程包含了三个子过程:从结果指纹集中提取覆盖统计信息的过程、覆盖统计信息的存储过程、覆盖统计信息检索的过程。
[0040] 1)从结果指纹集中提取覆盖统计信息,算法流程为:
[0041]
[0042] 其中建立潜在语义索引并映射到语义空间的步骤如下:
[0043] (1) 分析文档集合,构建文档集对应的词-文档的矩阵;
[0044] (2) 对词-文档矩阵进行奇异值分解(SVD);
[0045] (3) 对SVD分解后的矩阵进行降维;
[0046] (4) 使用降维后的矩阵构建潜在语义空间。
[0047] 2)覆盖统计信息的存储过程,算法执行过程如下:
[0048] (1) 当资源A获取一个查询Q的覆盖统计信息CV (Q)后,资源A利用潜在语义索引得到该查询的语义向量VQ。
[0049] (2) 然后,将VQ映射到Chord的ID空间,路由指向资源B。
[0050] (3) 最后,CV (Q)被发送到它的目的地资源B。
[0051] 3)覆盖统计信息检索过程。当一个资源(假定为A)发起一个查询Q 后,该查询被转换到语义向量VQ,进而映射到一个Chord ID,指向资源B。如果资源B存有查询Q对应的覆盖统计信息CV (Q),则将覆盖统计信息CV (Q)发给资源A。如果不存在,则资源B寻找是否存在与查询Q相似的查询Q’,满足 。如果找到,则返回覆盖统计信息CV (Q’);如果仍然没有找到相似,则返回一个查询覆盖统计信息失败的消息,并通知资源A在结果返回后需要提取查询Q 的覆盖统计信息。
[0052] 步骤 4.估算每个资源的新颖度
[0053] 比较资源 的布隆过滤器 与布隆过滤器 ,其中S是已选中的资源的集合。 表示已经覆盖的文档空间。定义一个资源 的新颖度为:
[0054]
[0055] 即在布隆过滤器 中置为1而布隆过滤器 中为0的bit位的数量。类似地,定义布隆过滤器 和布隆过滤器 的重叠度为:
[0056]
[0057] 步骤 5.综合相关度和新颖度对资源进行排序。包括三个子过程:
[0058] (1)利用CORI方法,计算每个资源与查询的相关度 ,并按相关度从高到低排序,得到一个候选资源列表。其中计算所有资源的相关度relevance[i]的算法流程为:
[0059]
[0060] 其中smax是所有候选资源的相关度得分的最大值。为了得到规一化的相关度分值relevance[i],每个资源的相关度为原始得分s[i] 除以smax。
[0061] (2)计算每个资源的新颖度 ,并根据新颖度重新调整候选资源的排列顺序。资源新颖度novelty[i] 计算过程为:
[0062]
[0063] 它调用两个函数novelDocs()和overlapDocs()分别计算出每个资源相对于已经选择出的资源列表的新颖文档数n[i]和o[i],计算n[i]和o[i]的比值c[i],最后对c[i]规一化得到新颖度novelty[i]。
[0064] 其中,函数novelDocs()返回布隆过滤器 中bit位为1且布隆过滤器中bit位为0的数量。具体来说,其计算公式表示为:
[0065]
[0066] 函数overlapDocs()返回布隆过滤器 和布隆过滤器 中均为1的bit位总数,其计算公式表示为:
[0067]
[0068] (3)计算最优资源列表。综合相关度和新颖度的详细流程为:
[0069]
[0070] 每个资源的相关度分值s[i] 及其布隆过滤器bf[i]作为算法的输入。算法首先将相关度最高的资源作为种子,每次从剩余资源中挑选最优的一个资源加入到新的资源列表中。其中,计算最优的方法是通过对每个资源的相关度和新颖度加权运算而获得:
[0071]
[0072] 其中 是一个[0,1]之间的参数。