CN110704645A - 一种基于指纹的语料库全文检索方法及系统 - Google Patents
一种基于指纹的语料库全文检索方法及系统 Download PDFInfo
- Publication number
- CN110704645A CN110704645A CN201910780481.5A CN201910780481A CN110704645A CN 110704645 A CN110704645 A CN 110704645A CN 201910780481 A CN201910780481 A CN 201910780481A CN 110704645 A CN110704645 A CN 110704645A
- Authority
- CN
- China
- Prior art keywords
- fingerprint
- document
- fingerprints
- corpus
- detected
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/38—Retrieval characterised by using metadata, e.g. metadata not derived from the content or metadata generated manually
- G06F16/383—Retrieval characterised by using metadata, e.g. metadata not derived from the content or metadata generated manually using metadata automatically derived from the content
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/31—Indexing; Data structures therefor; Storage structures
- G06F16/316—Indexing structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/22—Matching criteria, e.g. proximity measures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Library & Information Science (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Evolutionary Computation (AREA)
- Evolutionary Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Bioinformatics & Computational Biology (AREA)
- Artificial Intelligence (AREA)
- Life Sciences & Earth Sciences (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种基于指纹的语料库全文检索方法,包括:采用并行方式,基于距离图法为待检文档构建指纹,生成指纹索引;基于所述指纹索引,在预先构建的指纹库中并行查找与所述待检文档的指纹相似度最大的1个或多个指纹;所述指纹对应的文档为针对待检文档的检索结果。本发明提供的技术方案建立了基于距离图的指纹索引,采用逐位“与”操作计算指纹的相似性,采用并行的方式进行检索,能够准确全面地描述文档的结构和内容,提高了全文检索效率和准确率,对计算机的硬件要求低,适用性强,易于推广。
Description
技术领域
本发明涉及文档检索领域,具体涉及一种基于指纹的语料库全文检索方法及系统。
背景技术
随着互联网技术的快速发展,无论线上还是线下,文本库的规模急剧膨胀,如何对这些文本集合建立高效的索引和进行快速检索已经成为一个亟待解决的问题。
全文检索是指以全部文本信息作为检索对象的一种信息检索技术。全文检索的关键是文档的索引,即如何将源文档中所有基本元素的信息以适当的形式记录到索引库中。根据索引库中索引的元素不同,现有的全文检索系统可以分为基于字(word)表的全文检索和基于词(phrase)表的全文检索两种类型。
传统的基于关键字的检索方法,只对一条信息中具有检索意义的语词进行标引,它的标引深度总是有限的,无法满足人们对信息查全率的高要求;而全文检索系统可以对文本中的每个字、词进行标引,其标引的深度达到了极限,所以全文检索具有更高的查全率。主题词索引法和关键词索引法是采用人工赋词标引的方法,这些方法需要标引人员手工对各种信息进行加工处理,给出检索标识,所以效率低;而且标引质量由于手工的参与,带有很大的局限性。而全文检索系统可采用计算机自动抽取文本中的字、词进行标引,从而大大加快了标引的速度。全文检索系统除提供一般的“AND”、“OR”、“NOT”逻辑检索功能外,还能具备位置逻辑检索、字符串检索、截词检索等多种检索功能。
虽然现有的全文检索系统比传统的基于关键字的检索具有更强大的功能、更高的查全率以及效率等,但它本质上还是通过关键字匹配进行文本检索。除了效率低之外,准确率也低,这是由于全文检索技术的全词匹配和语词本身的特点导致的。例如,用户想检索我国长江流域的一些资料,如以“长江”作为检索词,则“长江日报”或是“长江大学”也会被搜索引擎认为是检索结果,从而降低了查准率。
在许多实际应用中,是在检索过程中使用短语、句子、文本片段甚至文档。可以称之为文档到语料库的查询,将文档作为检索过程的输入,在目标语料库中进行查询。在这种情况下,由于需要比较的文档对的数量非常多,计算量会很大。在高精度和快速响应的要求下,现有的基于关键字和全文检索系统均无法快速而准确地生成检索结果。论文《Searching by Corpus with Fingerprints》中,提出了一种串行的基于指纹的全文检索原型,并在小规模文档集上进行了简单验证,确实能够提高检索的准确性,但在海量文档规模、高精度和快速响应的要求下,现有的基于关键字和全文检索系统均无法有效处理此类情形。
发明内容
为了解决现有技术中所存在的无法快速而准确地生成检索结果的问题,本发明提供一种基于指纹的语料库全文检索方法及系统。
本发明提供的技术方案是:
一种基于指纹的语料库全文检索方法,其改进之处在于,所述方法包括:
采用并行方式,基于距离图法为待检文档构建指纹;
基于所述待检文档的指纹,在预先构建的指纹库中并行查找与所述待检文档的指纹相似度最大的1个或多个指纹;
所述指纹对应的文档为针对待检文档的检索结果。
优选地,所述指纹库的构建包括:
基于语料库中所有文档的全文采用距离图法为每个文档构建指纹,并生成指纹索引。
优选地,所述采用距离图法为文档构建指纹包括:
基于停用词表去除文档中的停用词,得到有效文档,并将有效文档转换为数字文档;
基于所述数字文档生成文档的距离图;
基于所述距离图,采用Hash函数集构建二维指纹;
所述Hash函数集中Hash函数的个数与所述距离图的边数相同;
所述距离图的边数不同采用不同的Hash函数集构建二维指纹。
优选地,所述将有效文档转换为数字文档包括:
为所述有效文档中的每个单词生成第一键值对;
合并相同的第一键值对后生成单词列表;
基于所述单词列表,对单词进行编号,每个单词的编号唯一,得到单词到数字的映射表;
基于所述单词到数字的映射表,将所述有效文档集中单词替换为数字,生成数字文档。
优选地,所述基于所述数字文档生成文档的距离图包括:
遍历所有阶数,针对于每一个固定阶数,对数字文档中的数字进行遍历,获取每一个数字后0到固定阶数个数字分别作为值,为每一个数字生成一组第二键值对,所述第二键值对的键为数字,值为数字的阶数;
基于所述数字文档中的第二键值对,生成所述数字文档的各阶距离图,且所述距离图以邻接表形式进行存储;
所述阶数为所述数字文档中的第一数字在第二数字之前至少出现过1次的位置偏移量。
优选地,所述基于所述距离图,采用Hash函数集构建二维指纹包括:
按照所述距离图的边数计算指纹的高度;
新建二维数组,数组的两个维度分别为预先设定的宽度和所述指纹的高度;
遍历所述距离图中的边,每个边采用与所述宽度个数相同的Hash函数进行计算,计算结果作为所述指纹的高度维度的值,并将所述二维数组对应宽度和高度的位置标志为1,得到距离图对应的二维指纹;
所述指纹高度按下式进行计算:
式中,hk(D):k阶指纹的高度;k:指纹的阶数;D:语料库中的文档;mk(D):语料库中的文档D的k阶指纹对应的距离图中的边数;α:扩充系数。
优选地,所述基于所述待检文档的指纹,在预先构建的指纹库中并行查找与所述待检文档的指纹相似度最大的1个或多个指纹包括:
基于所述待检文档的指纹,根据指纹高度确定指纹级数;
基于指纹索引读取与待检文档的指纹级数相同的指纹库中的指纹,计算两个指纹的相似度;
将所述相似度的值作为键,所述指纹库中指纹对应的文档ID作为值,组成第三键值对;
计算生成所述预先构建的指纹库中所有同级指纹对应的第三键值对,并按照键进行降序排序,其中最大的1个或者多个第三键值对应的值,就是与待检文档最相似的文档。
优选地,所述指纹索引包括:
所述指纹索引的内容包括:指纹的级数、指纹和指纹对应的文档ID。
指纹的级数由指纹对应的距离图中的边数唯一,按下式进行计算:
式中,lk(D):指纹的级数。
优选地,所述指纹相似度计算公式如下式所示:
式中,D1:待检文档;D2:语料库中的一个文档;f(D1):待检文档的一个指纹;f(D2):语料库中的文档D2的一个指纹;w:二维指纹数组的宽度;h:二维指纹数组的高度;fi,j(D1):指纹f(D1)对应的二维数组中坐标为(i,j)的单元的值;fi,j(D2):指纹f(D2)对应的二维数组中坐标为(i,j)的单元的值;m(D1):待检文档D1对应的距离图的边数;m(D2):语料库中的文档D2对应的距离图的边数;i:二维指纹的行号;j:二维指纹的列号;
其中,所述m(D1)和m(D2)的关系如下式所示:
所述待检文档的指纹和语料库中的文档的指纹的级数相同。
基于同一发明构思,本发明还提供一种基于指纹的语料库全文检索系统,包括指纹模块、相似度模块和检索模块:
指纹模块:用于采用并行方式,基于距离图法为待检文档构建指纹;
相似度模块:用于基于所述待检文档的指纹,在预先构建的指纹库中并行查找与所述待检文档的指纹相似度最大的1个或多个指纹;
检索模块:用于所述指纹对应的文档为针对待检文档的检索结果。
与现有技术相比,本发明的有益效果为:
本发明提供的技术方案能够快速而准确地生成检索结果;
本发明提供的技术方案采用并行方式,基于距离图的建立了指纹,充分利用了计算机逐位操作效率高的优点,在指纹的相似性度量的过程中采用逐位“与”操作,能够准确全面地描述文档的结构和内容,提高了全文检索的准确率;
本发明提供的技术方案在全文检索的过程中,采用了并行处理方式,相比于单机或者串行检索,具有更快的速度,并且对于计算机的硬件要求低,适用性强,易于推广。
附图说明
图1为本发明基于指纹的语料库全文检索方法示意图;
图2为本发明基于指纹的语料库全文检索系统示意图;
图3为本发明实施例三的倒排索引结构示意图;
图4为本发明实施例三的构建单篇文档的指纹过程示意图;
图5为本发明实施例三的对文档去除停用词的并行计算过程示意图;
图6为本发明实施例三的获取语料库有效词集合的并行计算过程示意图;
图7为本发明实施例三的单词到数字的并行转换过程示意图;
图8为本发明实施例三的文档单词替换过程示意图;
图9为本发明实施例三的针对文档生成各阶距离图的过程示意图;
图10为本发明实施例三的基于文档的距离图生成对应的二维指纹的过程示意图;
图11为本发明实施例三的文档指纹并行检索过程示意图;
图12为本发明实施例三的基于指纹的两种索引结构的示意图;
图13为本发明实施例三的二维指纹示意图;
图14为本发明实施例三的对原始文档去除停用词的并行处理过程示意图;
图15为本发明实施例三的有效文档到数字文档的转换过程示意图。
具体实施方式
为了更好地理解本发明,下面结合说明书附图和实例对本发明的内容做进一步的说明。
实施例一:
一种基于指纹的语料库全文检索方法,如图1所示,包括:
步骤1:采用并行方式,基于距离图法为待检文档构建指纹;
步骤2:基于所述待检文档的指纹,在预先构建的指纹库中并行查找与所述待检文档的指纹相似度最大的1个或多个指纹;
步骤3:所述指纹对应的文档为针对待检文档的检索结果。
步骤1:采用并行方式,基于距离图法为待检文档构建指纹。
具体地,所述指纹库的构建包括:
基于语料库中所有文档的全文采用距离图法为每个文档构建指纹,并生成指纹索引。
具体地,所述采用距离图法为文档构建指纹包括:
基于停用词表去除文档中的停用词,得到有效文档,并将有效文档转换为数字文档;
基于所述数字文档生成文档的距离图;
基于所述距离图,采用Hash函数集构建二维指纹;
所述Hash函数集中Hash函数的个数与所述距离图的边数相同;
所述距离图的边数不同采用不同的Hash函数集构建二维指纹。
具体地,所述将有效文档转换为数字文档包括:
为所述有效文档中的每个单词生成第一键值对;
合并相同的第一键值对后生成单词列表;
基于所述单词列表,对单词进行编号,每个单词的编号唯一,得到单词到数字的映射表;
基于所述单词到数字的映射表,将所述有效文档集中单词替换为数字,生成数字文档。
具体地,所述基于所述数字文档生成文档的距离图包括:
遍历所有阶数,针对于每一个固定阶数,对数字文档中的数字进行遍历,获取每一个数字后0到固定阶数个数字分别作为值,为每一个数字生成一组第二键值对,所述第二键值对的键为数字,值为数字的阶数;
基于所述数字文档中的第二键值对,生成所述数字文档的各阶距离图,且所述距离图以邻接表形式进行存储;
所述阶数为所述数字文档中的第一数字在第二数字之前至少出现过1次的位置偏移量。
具体地,所述基于所述距离图,采用Hash函数集构建二维指纹包括:
按照所述距离图的边数计算指纹的高度;
新建二维数组,数组的两个维度分别为预先设定的宽度和所述指纹的高度;
遍历所述距离图中的边,每个边采用与所述宽度个数相同的Hash函数进行计算,计算结果作为所述指纹的高度维度的值,并将所述二维数组对应宽度和高度的位置标志为1,得到距离图对应的二维指纹;
所述指纹高度按下式进行计算:
式中,hk(D):k阶指纹的高度;k:指纹的阶数;D:语料库中的文档;mk(D):语料库中的文档D的k阶指纹对应的距离图中的边数;α:扩充系数。
步骤2:基于所述待检文档的指纹,在预先构建的指纹库中并行查找与所述待检文档的指纹相似度最大的1个或多个指纹,包括
基于所述待检文档的指纹,根据指纹高度确定指纹级数;
基于指纹索引读取与待检文档的指纹级数相同的指纹库中的指纹,计算两个指纹的相似度;
将所述相似度的值作为键,所述指纹库中指纹对应的文档ID作为值,组成第三键值对;
计算生成所述预先构建的指纹库中所有同级指纹对应的第三键值对,并按照键进行降序排序,其中最大的1个或者多个第三键值对应的值,就是与待检文档最相似的文档。
具体地,所述指纹索引包括:
所述指纹索引的内容包括:指纹的级数、指纹和指纹对应的文档ID。
指纹的级数由指纹对应的距离图中的边数唯一,按下式进行计算:
式中,lk(D):指纹的级数。
具体地,所述指纹相似度计算公式如下式所示:
式中,D1:待检文档;D2:语料库中的一个文档;f(D1):待检文档的一个指纹;f(D2):语料库中的文档D2的一个指纹;w:二维指纹数组的宽度;h:二维指纹数组的高度;fi,j(D1):指纹f(D1)对应的二维数组中坐标为(i,j)的单元的值;fi,j(D2):指纹f(D2)对应的二维数组中坐标为(i,j)的单元的值;m(D1):待检文档D1对应的距离图的边数;m(D2):语料库中的文档D2对应的距离图的边数;i:二维指纹的行号;j:二维指纹的列号;
其中,所述m(D1)和m(D2)的关系如下式所示:
所述待检文档的指纹和语料库中的文档的指纹的级数相同。
步骤3:所述指纹对应的文档为针对待检文档的检索结果。
实施例二:
基于同一发明构思,本发明还提供一种基于指纹的语料库全文检索系统,如图2所示,包括索引模块、相似度模块和检索模块:
指纹模块:用于采用并行方式,基于距离图法为待检文档构建指纹;
相似度模块:用于基于所述待检文档的指纹,在预先构建的指纹库中并行查找与所述待检文档的指纹相似度最大的1个或多个指纹;
检索模块:用于所述指纹对应的文档为针对待检文档的检索结果。
指纹模块中,所述指纹库的构建包括:
基于语料库中所有文档的全文采用距离图法为每个文档构建指纹,并生成指纹索引。
具体地,所述采用距离图法为文档构建指纹包括:
基于停用词表去除文档中的停用词,得到有效文档,并将有效文档转换为数字文档;
基于所述数字文档生成文档的距离图;
基于所述距离图,采用Hash函数集构建二维指纹;
所述Hash函数集中Hash函数的个数与所述距离图的边数相同;
所述距离图的边数不同采用不同的Hash函数集构建二维指纹。
具体地,所述将有效文档转换为数字文档包括:
为所述有效文档中的每个单词生成第一键值对;
合并相同的第一键值对后生成单词列表;
基于所述单词列表,对单词进行编号,每个单词的编号唯一,得到单词到数字的映射表;
基于所述单词到数字的映射表,将所述有效文档集中单词替换为数字,生成数字文档。
具体地,所述基于所述数字文档生成文档的距离图包括:
遍历所有阶数,针对于每一个固定阶数,对数字文档中的数字进行遍历,获取每一个数字后0到固定阶数个数字分别作为值,为每一个数字生成一组第二键值对,所述第二键值对的键为数字,值为数字的阶数;
基于所述数字文档中的第二键值对,生成所述数字文档的各阶距离图,且所述距离图以邻接表形式进行存储;
所述阶数为所述数字文档中的第一数字在第二数字之前至少出现过1次的位置偏移量。
具体地,所述基于所述距离图,采用Hash函数集构建二维指纹包括:
按照所述距离图的边数计算指纹的高度;
新建二维数组,数组的两个维度分别为预先设定的宽度和所述指纹的高度;
遍历所述距离图中的边,每个边采用与所述宽度个数相同的Hash函数进行计算,计算结果作为所述指纹的高度维度的值,并将所述二维数组对应宽度和高度的位置标志为1,得到距离图对应的二维指纹;
所述指纹高度按下式进行计算:
式中,hk(D):k阶指纹的高度;k:指纹的阶数;D:语料库中的文档;mk(D):语料库中的文档D的k阶指纹对应的距离图中的边数;α:扩充系数。
相似度模块中,基于所述待检文档的指纹,在预先构建的指纹库中并行查找与所述待检文档的指纹相似度最大的1个或多个指纹,包括
基于所述待检文档的指纹,根据指纹高度确定指纹级数;
基于指纹索引读取与待检文档的指纹级数相同的指纹库中的指纹,计算两个指纹的相似度;
将所述相似度的值作为键,所述指纹库中指纹对应的文档ID作为值,组成第三键值对;
计算生成所述预先构建的指纹库中所有同级指纹对应的第三键值对,并按照键进行降序排序,其中最大的1个或者多个第三键值对应的值,就是与待检文档最相似的文档。
具体地,所述指纹索引包括:
所述指纹索引的内容包括:指纹的级数、指纹和指纹对应的文档ID。
指纹的级数由指纹对应的距离图中的边数唯一,按下式进行计算:
式中,lk(D):指纹的级数。
具体地,所述指纹相似度计算公式如下式所示:
式中,D1:待检文档;D2:语料库中的一个文档;f(D1):待检文档的一个指纹;f(D2):语料库中的文档D2的一个指纹;w:二维指纹数组的宽度;h:二维指纹数组的高度;fi,j(D1):指纹f(D1)对应的二维数组中坐标为(i,j)的单元的值;fi,j(D2):指纹f(D2)对应的二维数组中坐标为(i,j)的单元的值;m(D1):待检文档D1对应的距离图的边数;m(D2):语料库中的文档D2对应的距离图的边数;i:二维指纹的行号;j:二维指纹的列号;
其中,所述m(D1)和m(D2)的关系如下式所示:
所述待检文档的指纹和语料库中的文档的指纹的级数相同。
实施例三:
基于指纹的语料库全文检索方法以划分成两大阶段:生成索引和基于索引的搜索。生成索引的过程一般是一次性的,只要文档的主要内容和结构不发生变化,对应的索引一般不进行更新操作。
本发明涉及到的相关概念及其符号表示定义如下:
k阶距离:对于给定文档D,其单词序列记作seq(D),单词集合记作N(D)。如果在seq(D)中,单词,也称节点,用n表示,ni在单词nj之前最多k个位置至少出现过1次,其中ni,nj∈N(D),则称ni到nj的距离为k阶距离,k≥0。
k阶距离图:由N(D)中的所有节点以及连接这些节点的k阶边构成的图,称为该文档的k阶距离图,记作DGk(D)={N(D),Ek(D)},其中,N(D)表示距离图中的节点的集合,节点数量||N(D)||记作n(D),其大小与阶数无关;Ek(D)表示文档D的k阶距离图中边集合,也是文档D对应的k阶边的集合,k阶边集合的大小||Ek(D)||记作mk(D)。对于同一文档,阶数越高,对应的距离图中的边数越多。
级数:级数是对距离图中边的数量和指纹高度的一种度量表示。对于给定的距离图,其级数是确定,由距离图中的边数唯一确定。为保证指纹占用尽量小的空间,对于距离图DGk(D),定义其级数也记作lk(D),表示文档D的k阶距离图的级数。
指纹:距离图的一种二维压缩表示,一般用f表示。一个指纹对应一个宽w,高h的2维2进制数组,如图14所示,各列中1的数量是相同的。其中,w主要用来保证指纹的鲁棒性和检索的准确性,其取值一般是固定的,与文档或距离图无关;高度h则与距离图中的边数有关。由于指纹和距离图一一对应,因此指纹也是有级数的,q级指纹一般记作fq,q与h显然存在某种关系。
q级hash函数:能均匀映射到[0,2q-1]的hash函数称为q级hash函数。
步骤1:采用并行方式,基于距离图法为待检文档构建指纹。
索引结构
在传统的基于关键字的检索和全文检索系统中,一般采用倒排索引的结构来保存字、词、短语等及其出现的位置的映射关系。倒排索引一般采用链表的形式进行表示,包括两部分:字/词典和倒排表。其中,字/词典一般由一系列字/词或者短语构成,倒排表则由诸多链表构成,每一条链表对应一个字/词或者短语,记录其出现过的所有文档的ID,链表的每个节点存储一个文档ID,各节点通过链表连接。图3为常见的倒排索引结构示意图。
基于倒排索引结构,为文档创建基于二维指纹的索引结构。由于每一个指纹都对应着一篇文档的整体结构,每一个倒排表里面的节点数量都只有1个。这样,倒排索引的结构就从List<Map<word,List<docID>>>这种复杂结构简化成了List<Map<fingerPrint,docID>>。由于一篇文档一般是由大量字/词或者短语构成的,所以在倒排索引中,不同的字/词或者短语对应的倒排表中的节点存在大量重复,例如,图3中“lamb”和“stock”同时出现在了ID为15的文档中。由于一篇文档可以生成多个距离图,每个距离图具有不同的阶,而每个距离图都可以生成一个指纹,每个指纹对应一个不同的阶,所以,借鉴倒排索引的结构时,同一个docID可能出现多次。图12(a)是不考虑指纹级数level,情况下的基于指纹的索引结构,其中docID为17的文档就有两个指纹,这就是不同的指纹对应着同一文档,或者说一个文档有多个指纹。图12(b)是考虑了指纹级数情况下的索引结构,docID为17的文档的两个指纹的级数分别为11和14。由于相似度计算只能发生在相同大小的指纹之间,所以为了加快查询的速度,将相同级数的指纹聚到一起,将索引结构从List<Map<fingerPrint,docID>>变成List<level,List<Map<fingerPrint,docID>>>,对于某个固定的level,List<Map<fingerPrint,docID>>中的fingerPrint的大小相同。但从本质上讲,图12中的两种索引结构是一样的,图12(a)结构简单,但检索速度慢,而图12(b)则用空间换时间,结构复杂,但检索速度快。如无特殊说明,本发明后续所述文档索引结构均指图12(b)所述结构。
生成索引
从一篇原始文档开始构建该文档对应的指纹的过程如图4所示,包括下述3个步骤。
(1)去除停用词
对整个原始文档集即语料库执行停用词去除操作,得到有效文档集,主要过程如图14所示。基于MapReduce对整个原始文档集进行去除停用词操作过程如图5所示。其中map阶段处理逻辑主要包括:
A.map()读取停用词列表;
B.map()读取整篇文档;
C.map()对停用词列表进行遍历,如果文档中出现了该停用词,则替换为空;
D.输出被替换后的文档到分布式文件系统,文件名与原文档保持对应。
(2)生成距离图
为了生成距离图,首先要获取有效文档集的单词列表。基于MapReduce实现单词去重,输入为有效文档集,输出为单词列表,如图6所示。主要逻辑如下:
A.在map阶段,map()函数逐个读取单词并生成<word,1>这种形式的键值对。map阶段将reduce()函数作为combine()函数,将本文档内的相同单词进行合并,得到<word,1>键值对;
B.在混洗阶段,按照reduce()函数的单词划分,同一个单词只能在一个reduce节点处理,键值对被传送到对应的reduce节点;
C.在reduce阶段,reduce()函数接收其处理的键值对,将相同的单词合并后输出,到分布式文件系统,生成单词列表。合并生输出指只输出单词,且每个单词只输出一次。
得到单词列表之后,需要对单词进行编号,得到单词到数字的映射表。基于MapReduce对上一阶段生成的单词列表中的单词进行编号,每个单词的编号唯一。处理过程如图7所示。处理逻辑主要包括:
A.在Map阶段,map()函数从单词列表文件中逐个读取单词,不作处理进行输出;
B.在混洗阶段,所有的单词被传送到唯一的reduce节点;
C.在Reduce阶段,reduce()函数维护一个计数器id,每接收一个单词,就更新计数器的值,执行id++操作,然后将计数器id的值作为值,单词作为键,组成<word,id>键值对然后输出到文件,得到单词映射表。
得到单词映射表之后,要对整个有效文档集进行单词替换,生成数字文档集,主要过程如图15所示。基于MapReduce对有效文档集进行并行处理,将文档中的单词替换为该单词对应的id,生成对应的数字文档,主要过程如图8所示。其中map阶段的处理逻辑主要是:
A.map()函数读取单词映射表;
B.map()函数读取整篇文档;
C.map()函数对单词映射表进行遍历,如果该单词出现在正在处理的文档中,则用单词对应的id替换该单词;
D.输出替换后的文档,得到数字文档。
得到数字文档之后,需要生成距离图。基于MapReduce对各数字文档进行并行处理,得到各文档对应的各阶距离图,具体过程如图9所示。其中map阶段处理的主要逻辑如下:
A.Map()函数读取一篇数字文档;
B.Map()函数对阶数c∈[0,k]进行遍历,k为给定的最高阶数;
C.对于固定的阶数c,Map()函数对数字文档中的数字f进行遍历;
D.对于文档中的每一个数字f,获取其后0到c个数字分别作为值,与f作为键组成键值对;
E.输出以邻接表形式存储的c阶距离图到文件。
(3)构建指纹,生成索引
由于指纹是文档的压缩表示,而hash函数天然具备压缩的性质,所以这里选择hash函数作为生成指纹的方法。又由于文档的长短差异可能非常大,为了能够用尽量少的hash函数覆盖尽可能广的范围,同时尽可能保证一定长度差异范围内的文档可比较,所以按照指数范围来根据距离图中的边数将指纹划分到不同层级level。
对于每一层级,都选择w个不同的hash函数构成对应层级的hash函数集,记作所有层级的hash函数集构成了针对语料库的一个hash函数库H={Hlower,Hlower+1,...,Hupper},此处的层级可以是不连续的。同一层级的所有距离图使用相同的hash函数集生成对应的指纹。由于不同级的hash函数的映射范围不同,所以不同级的距离图自然也就使用了不同的hash函数。
从前面级数的定义可知,hash函数库的最小级数和最大级数是由语料库中所有文档对应的距离图的最小边数和最大边数决定的。
指纹的计算过程如下:对于给定的距离图DGk(D)={N(D),Ek(D)}和对应的hash函数集以及所有的边通过连接i、‘#’和j创建一个新的字符串,然后将Hk中的所有hash函数直接作用于创建的字符串其中表示连接运算符,得到数值然后将该距离图对应的指纹fk(D)的下标为的单元值设置为1,该值默认为0。最终得到的指纹就是填充了0和1的宽为w,高为h的一个二维数组,每一列的1的数字都是相同的,如图13所示。
由于使用hash函数来生成指纹,所以存在映射冲突,即不同的输入得到相同的输出。因此,为了保证指纹的准确性,应当对指纹的高度进行相应的设置,以降低冲突的概率。对于距离图DGk(D),其对应的指纹fk(D)的高度很显然满足hk(D)≥mk(D),否则必存在冲突。而所以原则上讲,可以用作为指纹fk(D)的高度。为了进一步降低冲突的概率,需要引入了扩充系数α来增加冗余空间,将指纹fk(D)的高度设定为其中α≥0。
基于MapReduce生成某一语料库C对应的数字指纹集/库F(C)过程如图10所示。其中map阶段处理的主要逻辑如下:
A.Map()函数读取hash函数库H;
B.Map()函数读取距离图DG(D);
C.Map()函数读取距离图的第一行数据,得到该距离图的边数m;
E.Map()函数根据h=(2l-1)·(1+α)计算出指纹高度,然后创建并初始化一个大小为w·h的2维数组;
G.输出指纹f对应的二维数组到文件,得到各距离图对应的指纹文件。这些指纹一起构成了语料库C的指纹库F(C)。
至此,语料库中的所有文档都生成了对应的指纹,针对语料库的索引构建完毕。
步骤2:基于所述待检文档的指纹,在预先构建的指纹库中并行查找与所述待检文档的指纹相似度最大的1个或多个指纹。
指纹的相似度计算方法
检索文档最简单的方法是基于相似度的顺序扫描。在顺序扫描之前,需要建立一个基于指纹的相似性函数,例如余弦函数。由于在许多平台上逐位操作的效率非常高,因此可以使用位操作的方式进行相似计算。本发明使用逐位“与”的方式进行相似度计算,并将结果进行归一化处理,使得相似度sim(f1,f2)∈[0,1]。由于指纹是距离图的一种表现形式,指纹的相似度其实表征的是距离图的相似度,而距离图又是文档的表示,所以文档的相似度计算,可以看成是指纹相似度的计算。又由于指纹采用了2维数组表示,指纹的相似度计算也就变成了2维数组之间的相似度计算。而2维数组是由0和1填充的,可以通过确定两个数组之间1的重合度来计算相似度。数组中的每一个元素1,都对应了距离图中的某条边,而0不对应任何边。两个指纹之间的相似度按下式进行计算,指纹必须大小相同,即级数必须相同:
式中,D1:待检文档;D2:语料库中的一个文档;f(D1):待检文档的一个指纹;f(D2):语料库中的文档的一个指纹;w:二维指纹数组的宽度;h:二维指纹数组的高度;fi,j(D1):指纹f(D1)对应的二维数组中坐标为(I,j)的单元的值;fi,j(D2):指纹f(D2)对应的二维数组中坐标为(i,j)的单元的值;m(D1):待检文档D1对应的距离图的边数;m(D2):语料库中的文档D2对应的距离图的边数;i:二维指纹的行号;j:二维指纹的列号;
其中,进行指纹相似度计算的两个指纹必须大小相同,即级数必须相同。
对于某一具体的k级指纹,其相似度计算如下所示:
式中,fk(D1):待检文档的一个K级指纹;fk(D2):语料库中的一个K级文档的一个指纹;hk:K级二维指纹数组的高度;K级指纹f(D1)对应的二维数组中坐标为(I,j)的单元的值;K级指纹f(D2)对应的二维数组中坐标为(i,j)的单元的值;mk(D1):k阶边的集合的大小待检文档D1对应的K阶距离图的边数;mk(D2):语料库中的文档D2对应的K阶距离图的边数。
基于指纹相似度的文档并行检索方法
基于指纹的文档检索的目标是对于给定文档,根据其对应的指纹,在指纹库中查找与之相似度最大的1个或多个指纹,这些指纹对应的文档,就是要检索的结果。基于MapReduce的并行文档检索过程如图11所示,并行检索的主要逻辑如下:
A.在map阶段,map()函数读取指纹库中的某一指纹f,假设对应的文档为D,根据指纹高度h确定其级数q,则f又可记作fq(D),表示文档D对应的q阶指纹;
B.在map阶段,map()函数读取待检索文档T的q级指纹fq(T);
C.在map阶段,map()函数计算两个指纹之间的相似度sim(fq(D),fq(T)),然后将相似度的值作为键,而该指纹对应的文档ID作为值,组成键值对<sim(fq(D),fq(T)),docID(D)>输出;
D.在混洗阶段,map阶段输出的键值对被传送到某个reduce节点;
E.在Reduce阶段,reduce()函数接收map阶段生成的各键值对,然后按照键进行降序排序,并输出到文件。
F.Reduce阶段输出的结果里面最大的1个或者多个键对应的值,即docID就是与待查询文档最相似的文档。
在上述过程中,如果在Reduce阶段只设置1个reduce节点,则reduce()函数接收完map阶段传过来的结果之后,经过一次遍历即可找到最相似的文档,将该文档对应的文档名直接输出即可,不再需要后面的F步骤。
步骤3:所述指纹对应的文档为针对待检文档的检索结果。
上述实施例说明,对整个语料库中的文档进行指纹生成的过程,其实就是对整个语料库建立索引的过程。文档检索过程,就是在指纹库中通过效率极高的位操作进行相似度计算的过程。本发明提供的技术方案建立了基于距离图的指纹索引,采用逐位“与”操作计算指纹的相似性,能够准确全面地描述文档的结构和内容,提高了全文检索效率和准确率;在全文检索的各阶段都是基于MapReduce的分布式并行框架实现的,所以相比于单机或者串行检索,具有更快的速度,且MapReduce分布式并行框架对于计算机的硬件要求低,适用性强,易于推广。
显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上仅为本发明的实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均包含在申请待批的本发明的权利要求范围之内。
Claims (10)
1.一种基于指纹的语料库全文检索方法,其特征在于,包括:
采用并行方式,基于距离图法为待检文档构建指纹;
基于所述待检文档的指纹,在预先构建的指纹库中并行查找与所述待检文档的指纹相似度最大的1个或多个指纹;
所述指纹对应的文档为针对待检文档的检索结果。
2.如权利要求1所述的基于指纹的语料库全文检索方法,其特征在于,所述指纹库的构建包括:
基于语料库中所有文档的全文采用距离图法为每个文档构建指纹,并生成指纹索引。
3.如权利要求1或2所述的基于指纹的语料库全文检索方法,其特征在于,所述采用距离图法为文档构建指纹包括:
基于停用词表去除文档中的停用词,得到有效文档,并将有效文档转换为数字文档;
基于所述数字文档生成文档的距离图;
基于所述距离图,采用Hash函数集构建二维指纹;
所述Hash函数集中Hash函数的个数与所述距离图的边数相同;
所述距离图的边数不同采用不同的Hash函数集构建二维指纹。
4.如权利要求3所述的基于指纹的语料库全文检索方法,其特征在于,所述将有效文档转换为数字文档包括:
为所述有效文档中的每个单词生成第一键值对;
合并相同的第一键值对后生成单词列表;
基于所述单词列表,对单词进行编号,每个单词的编号唯一,得到单词到数字的映射表;
基于所述单词到数字的映射表,将所述有效文档集中单词替换为数字,生成数字文档。
5.如权利要求3所述的基于指纹的语料库全文检索方法,其特征在于,所述基于所述数字文档生成文档的距离图包括:
遍历所有阶数,针对于每一个固定阶数,对数字文档中的数字进行遍历,获取每一个数字后0到固定阶数个数字分别作为值,为每一个数字生成一组第二键值对,所述第二键值对的键为数字,值为数字的阶数;
基于所述数字文档中的第二键值对,生成所述数字文档的各阶距离图,且所述距离图以邻接表形式进行存储;
所述阶数为所述数字文档中的第一数字在第二数字之前至少出现过1次的位置偏移量。
7.如权利要求6所述的基于指纹的语料全文检索方法,其特征在于,所述基于所述待检文档的指纹,在预先构建的指纹库中并行查找与所述待检文档的指纹相似度最大的1个或多个指纹包括:
基于所述待检文档的指纹,根据指纹高度确定指纹级数;
基于指纹索引读取与待检文档的指纹级数相同的指纹库中的指纹,计算两个指纹的相似度;
将所述相似度的值作为键,所述指纹库中指纹对应的文档ID作为值,组成第三键值对;
计算生成所述预先构建的指纹库中所有同级指纹对应的第三键值对,并按照键进行降序排序,其中最大的1个或者多个第三键值对应的值,就是与待检文档最相似的文档。
9.如权利要求8所述的基于指纹的语料库全文检索方法,其特征在于,所述指纹相似度计算公式如下式所示:
式中,D1:待检文档;D2:语料库中的一个文档;f(D1):待检文档的一个指纹;f(D2):语料库中的文档D2的一个指纹;w:二维指纹数组的宽度;h:二维指纹数组的高度;fi,j(D1):指纹f(D1)对应的二维数组中坐标为(i,j)的单元的值;fi,j(D2):指纹f(D2)对应的二维数组中坐标为(i,j)的单元的值;m(D1):待检文档D1对应的距离图的边数;m(D2):语料库中的文档D2对应的距离图的边数;i:二维指纹的行号;j:二维指纹的列号;
其中,所述m(D1)和m(D2)的关系如下式所示:
所述待检文档的指纹和语料库中的文档的指纹的级数相同。
10.一种基于指纹的语料库全文检索系统,其特征在于,所述系统包括指纹模块、相似度模块和检索模块:
指纹模块:用于采用并行方式,基于距离图法为待检文档构建指纹;
相似度模块:用于基于所述待检文档的指纹,在预先构建的指纹库中并行查找与所述待检文档的指纹相似度最大的1个或多个指纹;
检索模块:用于所述指纹对应的文档为针对待检文档的检索结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910780481.5A CN110704645B (zh) | 2019-08-22 | 2019-08-22 | 一种基于指纹的语料库全文检索方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910780481.5A CN110704645B (zh) | 2019-08-22 | 2019-08-22 | 一种基于指纹的语料库全文检索方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110704645A true CN110704645A (zh) | 2020-01-17 |
CN110704645B CN110704645B (zh) | 2020-12-22 |
Family
ID=69193225
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910780481.5A Active CN110704645B (zh) | 2019-08-22 | 2019-08-22 | 一种基于指纹的语料库全文检索方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110704645B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101694672A (zh) * | 2009-10-16 | 2010-04-14 | 华中科技大学 | 一种分布式安全检索系统 |
CN105608205A (zh) * | 2015-12-25 | 2016-05-25 | 北京奇虎科技有限公司 | 结构化数据的指纹校验方法及装置 |
CN105912514A (zh) * | 2016-04-28 | 2016-08-31 | 吴国华 | 基于指纹特征的文本复制检测系统及方法 |
US20170322930A1 (en) * | 2016-05-07 | 2017-11-09 | Jacob Michael Drew | Document based query and information retrieval systems and methods |
CN108132929A (zh) * | 2017-12-25 | 2018-06-08 | 上海大学 | 一种海量非结构化文本的相似性计算方法 |
CN108573045A (zh) * | 2018-04-18 | 2018-09-25 | 同方知网数字出版技术股份有限公司 | 一种基于多阶指纹的比对矩阵相似度检索方法 |
CN108959538A (zh) * | 2018-06-29 | 2018-12-07 | 新华三大数据技术有限公司 | 全文检索系统及方法 |
CN109857898A (zh) * | 2019-02-20 | 2019-06-07 | 成都嗨翻屋科技有限公司 | 一种海量数字音频指纹存储与检索的方法及系统 |
-
2019
- 2019-08-22 CN CN201910780481.5A patent/CN110704645B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101694672A (zh) * | 2009-10-16 | 2010-04-14 | 华中科技大学 | 一种分布式安全检索系统 |
CN105608205A (zh) * | 2015-12-25 | 2016-05-25 | 北京奇虎科技有限公司 | 结构化数据的指纹校验方法及装置 |
CN105912514A (zh) * | 2016-04-28 | 2016-08-31 | 吴国华 | 基于指纹特征的文本复制检测系统及方法 |
US20170322930A1 (en) * | 2016-05-07 | 2017-11-09 | Jacob Michael Drew | Document based query and information retrieval systems and methods |
CN108132929A (zh) * | 2017-12-25 | 2018-06-08 | 上海大学 | 一种海量非结构化文本的相似性计算方法 |
CN108573045A (zh) * | 2018-04-18 | 2018-09-25 | 同方知网数字出版技术股份有限公司 | 一种基于多阶指纹的比对矩阵相似度检索方法 |
CN108959538A (zh) * | 2018-06-29 | 2018-12-07 | 新华三大数据技术有限公司 | 全文检索系统及方法 |
CN109857898A (zh) * | 2019-02-20 | 2019-06-07 | 成都嗨翻屋科技有限公司 | 一种海量数字音频指纹存储与检索的方法及系统 |
Non-Patent Citations (2)
Title |
---|
CHARU C. AGGARWAL, PEIXIANG ZHAO: "Graphical models for text a new paradigm for text representation and processing", 《PROCEEDINGS OF THE 33RD INTERNATIONAL ACM SIGIR CONFERENCE ON RESEARCH AND DEVELOPMENT IN INFORMATION RETRIEVAL》 * |
CHARU C.AGGARWAL, WANGQUN LIN, PHILIP S. YU: "Searching by corpus with fingerprint", 《PROCEEDINGS OF THE 15TH INTERNATIONAL CONFERENCE ON EXTENDING DATABASE》 * |
Also Published As
Publication number | Publication date |
---|---|
CN110704645B (zh) | 2020-12-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10521441B2 (en) | System and method for approximate searching very large data | |
Navarro | Spaces, trees, and colors: The algorithmic landscape of document retrieval on sequences | |
US9342582B2 (en) | Selection of atoms for search engine retrieval | |
Yao et al. | K nearest neighbor queries and knn-joins in large relational databases (almost) for free | |
US8171029B2 (en) | Automatic generation of ontologies using word affinities | |
US8533203B2 (en) | Identifying synonyms of entities using a document collection | |
CN106156082B (zh) | 一种本体对齐方法及装置 | |
CN111324750B (zh) | 一种大规模文本相似度计算及文本查重方法 | |
KR100903961B1 (ko) | 시그니처 파일을 이용한 고차원 데이터 색인 및 검색방법과 그 시스템 | |
CN104199965A (zh) | 一种语义信息检索方法 | |
CN104252484A (zh) | 一种拼音纠错方法及系统 | |
CN101794307A (zh) | 基于互联网分词思想的车载导航poi搜索引擎 | |
US20140082021A1 (en) | Hierarchical ordering of strings | |
CN109902142B (zh) | 一种基于编辑距离的字符串模糊匹配和查询方法 | |
CN107291895B (zh) | 一种快速的层次化文档查询方法 | |
CN111801665A (zh) | 用于大数据应用的分层局部敏感哈希(lsh)分区索引 | |
CN105404677A (zh) | 一种基于树形结构的检索方法 | |
Mäkinen et al. | Transposition invariant string matching | |
Cai et al. | Scalable image search with multiple index tables | |
CN110704645B (zh) | 一种基于指纹的语料库全文检索方法及系统 | |
CN110866088B (zh) | 一种语料库之间的快速全文检索方法及系统 | |
CN105426490A (zh) | 一种基于树形结构的索引方法 | |
Donkó et al. | An implementation of the m-tree index structure for postgresql using gist | |
CN110704579B (zh) | 一种基于分支界定的全文检索方法及系统 | |
Vesanto | Detecting and analyzing text reuse with BLAST |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |