论文部分内容阅读
字符串相似性搜索在众多的领域具有广泛的应用,例如:数据清洗、数据集成、拼写检查、抄袭检测、生物序列分析等。到目前为止,有很多度量标准用来衡量字符串之间的相似程度,然而众所周知不存在一个相似性函数在所有领域中都具有最好的性质,编辑距离是所有被广泛接受的相似性函数中的一个。因此本文通过编辑距离表示两个字符串之间的相似程度。一般而言,字符串相似性搜索主要有两种类型:范围查询和Top-k相似性搜索,本文主要研究Top-k搜索问题,即给定一个查询字符串q,Top-k搜索返回字符串集合S中k个字符串,满足这k个字符串和查询字符串q的编辑距离最小。现如今解决字符串Top-k相似性搜索共有三类算法,AQ和Appgram基于n-gram模型,但这两种方法忽略了n-gram的位置信息,同时AQ算法需要对不同长度n-gram建立多个索引导致很低的效率,Appgram不是精确查询,往往会丢失结果,Bedtree算法基于B+树结构,由于过滤条件过于宽松导致遍历过多节点,Range算法和Hstopk算法针对短字符串很有效,当处理长字符串集合时,为了提高查询性能,这两种算法需要很大的额外内存空间。针对现如今方法的缺陷,本文基于n-gram模型,结合n-gram位置信息,设计了新的倒排索引结构,在这个新的索引结构上设计了新的顺序搜索和改进的循环搜索算法;在过滤阶段,加入了长度过滤,数量过滤和位置过滤,同时加入了新的过滤方式频率过滤,实验证明频率过滤可以进一步过滤掉大量候选字符串;同时本文针对top-k查询的初始化进行了研究,结合字符串集合整体统计信息,将字符串集合分类,采用和查询字符串同一类的字符串进行初始化;最后设计了基于磁盘的索引构建和查询方法;最后本文在三个真实数据集上进行了多组对比实验验证本文提出算法的高效性,首先测试各种算法在这三个真实数据集上内存消耗,然后比较了各个算法查询性能,同时对索引的两种构建方式,两种搜索策略,堆的四种初始化算法进行了对比实验,然后对基于磁盘索引构建时间和查询性能进行了测试,最后对长度过滤策略和频率过滤策略进行了测试,通过多组实验证明了本文提出算法的高效性。