基于PARADISE平台的论文检索系统-计算机科学与技术系本科生毕业论文_第1页
基于PARADISE平台的论文检索系统-计算机科学与技术系本科生毕业论文_第2页
基于PARADISE平台的论文检索系统-计算机科学与技术系本科生毕业论文_第3页
基于PARADISE平台的论文检索系统-计算机科学与技术系本科生毕业论文_第4页
基于PARADISE平台的论文检索系统-计算机科学与技术系本科生毕业论文_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本科生毕业论文题目:基于PARADISE平台的论文检索系统 Literature Search Design and Implementation based on PARADISE姓 名: 李峰 学 号: 00548193 院 系: 信息科学技术学院 专 业: 计算机科学与技术系 指导教师: 闫宏飞 副教授 二一九二一九年十一月二十日 30摘要:本文基于天网实验室的Platform for Applying, Researching And Developing Intelligent Search Engine (PARADISE)搜索引擎平台,通过以从抓取的计算机网络方向的2500多篇论文为数据,搭建成一个论文搜索系统,最终目的是通过论文之间的引用关系,获得其他引用这篇论文的作者对这篇论文的评价,形成一个小的评价段落,以及Impact-based Summaries,从而使得我们能够从专业级的角度获得这篇论文的内容以及优劣。我们首先根据我们首先从上面抓取了文章之间的引用关系,然后通过一个算法获得了对一篇文章评价的候选句子集,根据这些句子的重要程度进行排序,获得一个评价短文。并且构建了一个语言模型,通过这些候选句子集对原文的句子进行评分,取得分最高的几个句子,获得原文基于影响的概括。关键词搜索引擎, 论文评价, 语言模型, KL-divergence算法, 基于影响的概括 AbstractIn this paper, based on the PARADISE (Platform for Applying, Researching and Developing Intelligent Search Engine) and the data of 2500 papers in area of computer network, we construct a search engine of papers. Our goal is to get the comment and impact-based summaries of one paper based on the reference relations between the papers. We firstly get candidate sentences which comment on the previous paper and generate a citation context. Then we construct a Language Model, through the citation context, we can score the sentence in the previous paper, and get the impact-based summaries. Key wordsSearch Engine, Paper Comment, Language Model, KL-divergence Scoring, Impact-based Summaries目录目录第1章 引言51.1研究背景51.2工作内容21.2.1抓取所需要的论文数据21.2.2获得一篇论文的评价并较好的显示出来21.2.3获得一篇论文基于影响的总结段落31.2.4基于PARADISE平台搭建搜索平台31.3实验的意义3第2章 数据的收集52.1如何提取数据52.2数据抓取的过程62.3数据的存储及解析7第3章 生成评论集103.1获得评价的候选句子集103.2获得评论段落11第4章 建立模型并生成基于影响的概括134.1建模之前我们所有的数据134.2建模算法134.3算法的实现144.4获得基于影响的概括15第5章 搭建搜索引擎165.1 PARADISE结构简介165.2修改索引部分175.3修改前台部分185.4系统示意图195.4.1主界面195.4.2搜索结果界面205.4.3评论界面21第6章 实验结果与分析226.1实验结果226.2具体分析22第7章 后续工作26第8章 致谢27参考文献28第1章 引言11.1研究背景11.2工作内容21.2.1抓取所需要的论文数据21.2.2获得一篇论文的评价并较好的显示出来21.2.3获得一篇论文基于影响的总结段落31.2.4基于PARADISE平台搭建搜索平台31.3实验的意义3第2章 数据的收集52.1如何提取数据52.2数据抓取的过程62.3数据的存储及解析7第3章 生成评论集103.1获得评价的候选句子集103.2获得评论段落11第4章 建立模型并生成基于影响的概括134.1建模之前我们所有的数据134.2建模算法134.3算法的实现144.4获得基于影响的概括15第5章 搭建搜索引擎165.1 paradise结构简介165.2修改索引部分175.3修改前台部分185.4系统示意图195.4.1主界面195.4.2搜索结果界面205.4.3评论界面21第6章 实验结果与分析226.1实验结果226.2具体分析22第7章 后续工作26第8章 致谢27第1章 引言1.1研究背景如今,全世界范围内学术活动日益积极,所产生的论文也在不断增多,因此,如何搜索到自己所需要的论文,以及自动获取一些关于论文的信息,是客观需要的。学术检索,绝不简简单单的检索出所要查找的论文,这样就和普通的通用搜索引擎如Ggoogle等一样了。学术检索,应该更侧重于深层次的内容挖掘。例如,可以通过一篇论文所引用的文章以及所属领域,寻找出这个文章所在领域的主要论文,这对了解一篇论文的背景知识以及理解一个领域的发展非常重要。在Nie, et al.,2007, Volkert,2005 在1 L. Gwenn Volkert. The Science and Art of Literature Searching for Computer Science Research.(L. Gwenn Volkert)中提到了文献检索现在主要的发展方向,有以下几点:1.提高检索的质量,这是从语言模型的角度,让人们更加准确的找到所需要的论文。2.找到相关领域的最主要论文,以及一些较 权威的作者,帮助读者了解相关知识。3.从reference和citation角度,挖掘出一些知识,最常见的,就是通过一篇论文的被引用次数确定它的 排名以及影响力。我们知道,国外的PHD学生在第一年的学习之后都是要通过QE考试的,考试的形式一般是先读几十篇论文,然后根据这些论文的内容进行一些答辩。这时候,他们往往很想知道别人是如何评价这篇论文的,这篇论文有什么优点和缺点,有什么后续的研究等等。这就像我们准备去一个地方去旅游,不仅需要该景点本身的介绍(有点类似于摘要),往往更想知道去过这个地方的人都是如何评价这些地方的。通过对这篇论文的评价,我们可以从更专业并且更加广阔的角度获得这篇论文的一些信息,并且可以知道在这篇论文工作之后可以做哪些事情。基于上面的观点,我们就准备做出这样一个知识提取系统,通过这个系统,可以自动获得别人对这篇论文的评价Nanba and Okumura,1999 ,2 Hidetsugu Nanba, Manabu Okumura. Towards Multi-paper Summarization Using Reference Information. Proceedings of the Sixteenth International Joint Conference on Artificial Intelligence, pages: 926 931, 1999,以及论文中的一些较有影响力的信息,从而帮助人们更好的理解这篇论文。整体流程如图表 1所示。在3 Qiaozhu Mei, ChengXiang Zhai. Generating Impact-Based Summaries for Scientific Literature. Proceedings of the 46th Annual Meeting of the Association for Computational Linguistics (ACL 08), pages 816-824, 2008(Qiaozhu Mei, ChengXiang Zhai)Mei and Zhai,2008中,作者利用KL-divergence算法建立了一个模型,生成了一篇论文基于影响的概括,但是它并没有强调评论的重要性(这里的评论,是指别的作者对它引用的一篇文章的评 论),它只讲评论当成一个中间状态,当成一个求得基于影响的概括的手段。实际上,这些评论和最终经过KL算法形成的概括是同等重要的,有时候,它甚至比后者更加清晰易懂。本文相对于Mei and Zhai,200833的优点是,赋予评论以及概括同等重要的意义,并且形成了一个实际的系统供人使用,而不仅仅是用于研究。图表 1 论文检索和挖掘系统框架论文1正文引用1引用2论文2正文引用1引用2源论文句子1句子2句子3句子4.引用评论引用评论评论基于影响的概括1.2工作内容1.2.1抓取所需要的论文数据要进行论文搜索,首先需要一批实验数据,我是从上抓取下来的。之所以选择从这上面抓取,是因为我们不仅需要论文的pdf文档,还需要从中自动提取摘要、引用等信息,而这本身就应该是一个挺复杂的算法了,而且不是我们工作的目的,而上述网站已经人工的将论文的摘要、引用信息提取了出来,并且对于每一个引用还有相应的链接,因此会节省我们抓取数据所要花费的工作量。最终我们会将抓取的数据存储在BerkeleyDB中。1.2.2获得一篇论文的评价并较好的显示出来 我们这个系统的主要工作是通过别的论文对原论文的评论,来获得一些不能直接从原论文中获得的信息,因此,最基础的,就是如何获得这些评论。关于这一点,我们通过上面的数据收集工作,会获得一个论文之间的引用图,然后通过引用的倒置,能够获得引用一篇论文的所有文章,然后,通过一个算法,可以从这些文章中提取出对原文进行评价的句子。最终,为了便于使用者观看,还需要对这些句子进行一些整理,进行排序、整理成一个段落出来。1.2.3获得一篇论文基于影响的总结段落在获得对原文进行评论的句子之后,将原文划分成一个一个的句子,我们利用了KL-divergence算法(参看Croft, et al.,2009的7.3节)(33),对这些句子进行打分,这里分数的高低,代表了原文中每一个句子影响程度的高低,显然,影响越大的句子,在别的文章中提及的越多,其分数就越高。最后,我们取一定数量得分最高的句子,组成一个段落,这个段落是对原文的一个概括,而且会获摘要所不能获得一些信息的一些信息。1.2.4基于PARADISE平台搭建搜索平台我们基于PARADISE搜索引擎平台搭建成了一个关于pdf的全文搜索系统。 PARADISE由预处理,建立简历索引,检索,前台四部分组成。由于我们的数据是论文,并且已经转化为了txt文本格式,预处理这一部就略去了,需要继承一个建立索引的类,并且修改一些前台的接口就可以了,这样就搭建成了一个论文搜索系统。这一过程也体现出了PARADISEparadise的可扩展性以及易用性,PARADISEparadise中的每一个组件都是可以通过继承一个自定义的新类来完成的,其中包括预处理、索引、检索、语言模型、排序、压缩等等所有的模块都可以自己选择或者自己重新定义来完成。1.3实验的意义我们在读一篇论文之前,一般能简单的看到它的摘要、作者等信息。而在读完一篇论文之后,我们能获得什么信息呢?主要有以下几种:1) 这篇文章做了什么事情,这可以从摘要中获得。2) 这篇文章中涉及到的核心算法,这个只有在细致的读完了这篇文章之后才能理解,应该是没法依靠辅助来获得的。3) 这篇文章哪些部分比较重要,哪些部分比较好,哪些部分需要改正,我们可以从哪些方向进行扩展。对于第三点,如果完全自己理解,可能会比较困难,而且对读者自己的要求也比较高,可能要读了很多这方面的背景知识、后续论文等等才可能获得,而通过我们做的这个系统,就可以帮助大家更简单的获得一些从文章中不能直接获得的信息。一般来说,作者如果想从自己的角度归纳本文的大体内容,通过阅读摘要,我们可以看到作者写这篇文章大体做了什么。但是文章中很有可能有一些作者没有发现,或者作者当前没有重视但是以后被别人发掘出来很重要的意义。通过将那些对文章进行引用的句子,与本文建模,对原文中的句子进行排序,从而获得文章中一些有特殊意义,影响较大的句子,这样,我们可以获得文章中最重要的信息,而这些重要信息和摘要的区别就是,它们不是作者提出来的,而是别的作者在读了这篇文章以及其他的文章,经过很多思考之后,总结出来的这篇文章最重要的地方。此外,别的文章中对原文进行评论的句子(4 Nakov, A. Schwartz, and M. Hearst. Citances: Citation sentences for semantic analysis of bioscience text. In Proceedings of ACM SIGIR04 Workshop on Search and Discovery in Bioinformatics. 2004)Nakev, et al.,2004,本身就是很重要的信息,可以让我们知道原文都做了哪那些后续工作,或者哪那些部分比较好,哪些部分需要改正。简单来说,我们这个系统的意义,就是通过数据挖掘的方法,获得一些直接从原论文很难发现的信息,并且结合PARADISEparadise系统,以搜索引擎的方式呈现出来,便于大家检索查找。第2章 数据的收集我们这个系统的目的是为了方便读者理解论文,因此除了需要基本的论文的pdf格式,还需要提取发表期刊、作者、摘要、被引应用次数,引用文章这些信息。其中,发表期刊、作者以及被引用次数是用来在后面获得comment以及impact-based summary进行排序的时候加权用的,显而易见,较好的期刊,较有名的作者,引用次数较高的文章,它做出的评价应该要重要一些(当然,这里只是预留着为以后的扩展用,而我们的系统实际上并没有用到作者的知名度信息)。当然,其中最重要的是提取引用的信息。我们的目标是通过获得每篇文章所引用过的文章,建立一个映射表,然后将映射表倒置过来,从而获得每篇文章被哪些文章引用过。2.1如何提取数据首先,是如何提取文章的摘要等各种信息了。本来我是准备直接从文章中提取的,随着工作的深入,发现这样做有很多的缺点,首先,从paper中提取各种信息就是一个很繁重的工作,这本身就可以当做一个毕业设计来做了,会消耗我大量的时间,但却不一定能够达到工作的目的;其次,最重要的是,在每一篇文章里,reference是以(作者,文章名,发表期刊,年份)的形式表现出来的,例如:G. Luecke, H. Chen, J. Coyle, J. Hoekstra, M. Kraeva,and Y. Zou. MPI-CHECK: A tool for checking Fortran90 MPI programs. Concurrency and Computation:Practice and Experience, 15:93100, 2003. 而我们存储每篇文章的时候,是以期刊作为文件夹,以文章标题作文文件名来存储的,例如这篇论文,以下面的形式存储的。pdf/Concurrency_and_Computation:Practice_and_Experience/MPI-CHECK:_A_tool_for_checking_Fortran90_MPI_programs.因此,我们需要从上面的那句话中提取会议名以及文章名,才能获得文章之间的引用关系,建立一个FromTo表。,这之中即使甚至是相差一个空格都不行的,会直接导致整个系统的失败。于是,我们想出了一个简单的办法。可以看到,在上,每一篇论文的格式都是规整的,从上面可以很容易的提取出摘要、文章名、期刊等信息,可以下载到pdf版的文件;更重要的是,对于论文的引用信息,在该网页上给该出了一个超链接,点击之后就可以进入引用的文章的信息。因此,可以利用递归的方法,进入引用的文章,从中提取出会议名以及文章名,这样,每篇文章的引用就可以形成上面的格式,并且是完全正确的,方便我们建立引用映射表。接着,要设定递归的种子以及递归的层数。因为我们的实验所需要的数据最好是在一个领域里面的相同一个方向的论文,并且需要引用关系较紧密的,以便于后续的工作,因此,这里采用WWWwww会议的文章作为种子,对于每一篇文章递归三层。如果递归四层,就会太多了。假设一篇文章有又十个引用,那么递归四层,就会导致每没从WWWwww会议中抓取一篇文章,就需要抓取1000篇相应的其他文章,这个数量实在是太大了;如果递归两层,就会导致每篇文章只能抓取其引用的文章,这样引用的层次较浅,很有可能导致最后引用倒置时,每一篇文章只被一两篇文章引用,这样不利于我们的实验。 最后,我们需要将pdf转化为txt格式,这是利用Llinux自带的pdf2txt工具来实现的。,但是这个工具并不支持对文件夹的递归操作,因此,我用python写了一个脚本,通过递归操作,可以将一个sourceDir里面的所有pdf文件递归转化为txt文件,并按照原来的相对路径存在destDir里面。2.2数据抓取的过程已经确定好抓取数据的大体方法了,下面就要开始正式的抓取数据了。所用的工具比较简单,就是利用Llinux下的wget工具,将下载网页下载到文本文件里并进行分析。另外我们这里利用了第三方库boost:regex,这种正则表达式非常适合从网页中进行模式匹配并且提取出数据。有了前面的两项工具,我们只需要分析好网页的模式,尽量正确的提取数据既可以了。,需要注意的是,由于网页并不是完全规整的,因此,有时候,对于同一个数据,往往要写多种匹配的公式才可以,这其中,最麻烦的当属提取引用部分了(我们不仅要提取引用,还要提取这个引用对应得url,从而递归进入提取它的论文名)。以提取作者信息为例:Yong Yu我们需要从上面的得公式中提取出作者名,需要以下几步:(1) 利用boost regex公式写一个正则表达式匹配上面的文本boost:regex ePaperAuthors(s*(*?)s*,boost:regex:normal |boost:regbase:icase);其中引号中的内容为匹配的正则表达式,注意其中的一对小括号,其中的内容就是我们需要提取的信息(2) 利用split函数,将结果存入list里面list authors;boost:regex_split(std:back_inserter(authors), content, ePaperAuthors);这样,文章中所有匹配上面正则表达式的字符串,其中的作者信息(即上面括号中的内容),都会存在authors这个容器里面还需要注意的一点就是,由于网页的不规整性,所以要排除一些错误的情况。还有一些文章,确实没有摘要、引用或者其他信息(这些文章多出现在引用链的顶层,主要是一些书籍等参考资料,所以也比较正常),遇到这些情况我们就不抓取下来了。2.3数据的存储及解析在将数据从网页下载下来之后,需要存储起来。首先,对于pdf的格式,只能存在文件系统里,按正常的方式存储。对于其他的信息,这里选择存储在Bberkeley DB(简记为BDB)里面。BberkeleyDB是一种轻量级的数据库,Mysql等数据库底层就是利用BberkeleyDB来完成的。它的优有点是可移动性,不用像想Mysql那样搭建服务器,而且读取数据时较快。对于每一篇文章的基本信息metadata,按照【表格 1】中的形式存入berkeleyBDB中:表格 1Keyint64_t的一个整数Value字符流,存储元数据信息,按如下格式:*name*source*abstract*citationCount*authors*references*referenceName*url获得这些基本信息之后,我们还要根据这些元信息,陆续建立一些BberkeleyDB文件,用于存储其他信息,如表格 2:表格 2文件名KeyValuecontent.dptint64_t的整数,论文ID这篇论文的全部文本内容fromto.dptint64_t的整数,论文ID用于存储一篇论文所引用的所有文章tofrom.dptint64_t的整数,论文ID用于存储一篇论文被哪些文章所引用comment.dptint64_t的整数,论文ID存储最终要显示在页面上的文章的评价summary.dptint64_t的整数,论文ID存储最终要显示在页面上的基于影响的文章的概括其中content.dpt是通过将pdf格式转化为txt之后获得的。fromto.dpt是对整个论文的引用关系图进行解析获得的,从上面的元数据中,我们可以获得每篇个论文所引用的论文的名称,这样,我们可以通过这些名称,来获得这个论文所引用的所有论文的ID号,并且存储到数据库中。获得fromto.dpt之后,对其进行倒置,就可以获得tofrom.dpt的内容这里之所以选择BerkeleyDB进行存储,是因为它有以下这些优点: 嵌入式(Embedded):它直接链接到应用程序中,与应用程序运行于同样的地址空间中,因此,无论是在网络上不同计算机之间还是在同一台计算机的不同进程之间,数据库操作并不要求进程间通讯。 Berkeley DB为多种编程语言提供了API接口,其中包括C、C+、Java、Perl、Tcl、Python和PHP,所有的数据库操作都在程序库内部发生。对于我们这个系统,后台程序是由Cc+完成,而前台程序是由Ppython完成,他们都会共同访问一些文件,通过存储在BerkeleyDB进行存储,就解决了不同语言之间兼容的问题。 轻便灵活(Portable):它可以运行于几乎所有的UNIX和Linux系统及其变种系统、Windows操作系统以及多种嵌入式实时操作系统之下。它并不需要搭建一个数据库服务器,以用户、服务器形式访问数据库,而是以函数调用的形式。一旦Berkeley DB被链接到应用程序中,终端用户一般根本感觉不到有一个数据库系统存在。这样提高了我们的系统的实用性,当用户需要自己搭建一个我们的论文系统时,不用再去搭建数据库服务器,进行各种繁琐的配置。第3章 生成评论集通过上面的内容工作完成之后,我们获得了所有的基本的信息,其中,最重要的,获得了tofrom表,该表的key是一篇论文A的ID,value是引用A的所有论文ID的集合。下面我们就要结合前面获得的数据,包括论文的文本、元数据,来获得一篇论文的评论集。3.1获得评价的候选句子集通过tofrom表,我们可以获得一个集合 B1,B2,B3.,其中Bi对A进行了引用。我们相信,如果Bi对A进行了引用,那么Bi中可能会有一些句子对A进行了评价。一般有以下几种情况:1) Bi中的句子出现了A的论文名2) Bi中的句子出现了A的作者名3) 在Bi的reference列表中,如果A出现在第k个位置,那么通常在文章中会利用k来对A进行引用。4) .对于(3)的情况,有时候并不只是对k进行引用,可能文章中的一句话代表的是好几篇文章的工作概括,因此会出现“i,k,j”这种类型的符号来对A进行引用,而且出现的概率很高。5) (如果Bi中的某句话对A进行了评论,那么通常它的前一句话和后一句话也会出现评价的信息通过上面的5点,我们就可以获得了Bi中对A进行评价的句子,从而获得了一个候选句子集,里面的每一句话都不同程度的对A进行了评价。图表 2 如图表 2所示流程,具体实现的时候,先要将Bi按句子进行划分为一个句子序列Bis1,Bis2,Bis3.,然后遍历这个句子序列,对于每一个句子,按照上面的前四条规则进行评判,如果满足其中任意一条,则这个句子是候选句子集合中的一个,并将其前后两个句子也合到一起,添加的候选句子集合中。 最终,得到对A进行评论的候选句子集e1,e2,e3.,这里面可能会有一些评价来自同一篇论文。3.2获得评论段落获得了候选句子集之后,我们需要对其进行适当的排序,从中选出较好的几个句子,最终显示在页面上。由于不同的人,对这篇论文的评价可能也不太一样,因此,就不能简单的按照这些评价句子与原文的相似度来进行打分排序了,因为这样会造成和原文观点相近的评分较高,不是我们希望获得的结果。实际上,有时候越是和原文的观点不同,反而可能越重要,它可能是对这篇文章的批判,也有可能是原文的作者并在写paper时是并没有发现的一些问题,这对我们寻找后续工作时可能会非常重要。 我们在提取数据的同时,会获得每一篇文章的citation信息,代表这篇文章被引用的次数,一般,一个较好的文章,被引用的次数也应当比较多,因此,对于每一个评价,根据它所在文章的被引用次数进行排序,可以获得较为专业,也较为合理的结果。同时,需要注意的是,如果一个篇论文的被引用次数很高,而且它又有两段评论原文的句子时,那么这两段会一起出现在最终的结果里,在这里我们就需要对结果进行调整,保证在权重相同的情况下,尽可能选择尽量不同的文章的评论。第4章 建立模型并生成基于影响的概括通过获得了对源论文的评论集合,下面就可以与源论文建立模型来获得基于影响的概括。所谓基于影响的概括,简单来说,就是某句话与评论之间的关系越紧密,那么这句话的影响力就越大。最终将影响力最大的几个句子合在一起,就形成了基于影响的概括。4.1建模之前我们所有的数据在建模之前,我们先来看看我们已经获得了哪些数据:(1)所有论文集合D,以及D里所出现的所有单词,构成一个单词表V,并且可以统计出每个单词w出现的次数C(w,D)(2)对于一篇论文d,将其划分为多个句子s1, s2, s3(3)已经获得了这篇片论文进行评论的所有句子e1, e2, e3,把他们的集合成为C(Citation Context)。下面,我们就可以参照KL-divergence算法(33,Qiaozhu Mei and ChengXiang Zhai),对d中的句子s进行打分。这里的打分,主要是基于词频以及相似度来做的。4.2建模算法首先,为任何一个句子打分的公式Score(s)如下:从信息理论的观点,其中即为KL-divergence,可以被解释为通过句子s来表示基于影响的段落,需要从文章中删除的信息量。显然,其值越小,Score则越大,它也越能代表文章以及其他文章对它的评价的意思(因为它只要删除较少的信息)可以看出,公式中最重要的是求出和。对于公式(1),其中,表示一个单词w在句子s中出现的次数,表示单词w出现在所有论文空间中出现的概率,D为我们的整个论文空间。而为平滑参数。我们假设为|s|的n倍,则(1)式可以看成是,可见,n越大,表示w与整个论文空间的关系越大,而与这个句子的关系则较少。W等于|s|1时,则表示二者一样,各占1/2。我在这里将n设置为了1。对于公式(2),其中表示一个单词w在当前要求的这篇论文中出现的次数,而表示单词w在我们为这篇论文求出的评价句子的集合C中出现的概率。为平滑参数。我们仍然假设u为|s|w的n倍,则(2)式可以看成,可见,n越大时,表示这个单词w与C的关系越大,而n小于1时,则与论文本身关系较大。可以看出,极端的情况,当n为0时,则w只与原论文有关系了,与我们获得的那些评价都没有关系了,因此获得的句子实际上对其他论文也没有什么影响了。因此,对于本实验,应当将n设置的越大越好。4.3算法的实现具体实现算法时,会出现一些问题:我们假设一篇论文可以划分成1000个句子,每个句子有20个不同单词,我们总共有2000篇论文,那就有4亿个单词。那么,对于每一个句子s,我们在进行上面的算法时,需要进行如下一步这就需要对这4亿个单词进行遍历一遍,并且分别计算括号中的那一步。而每篇论文有1000个句子,就相当于要计算4000亿次,这个计算量对我们来说太庞大了,因此,我在这里选取了一个简便一点的方法,就是在上面的一步时,并不是对整个单词空间进行计算,而只是对论文d和评论集合C中出现的所有单词进行遍历计算打分。可以看出,对于一个既不在d中又不在C中的单词, = 0.对结果也没有影响。因此,上面的公式只是理论的公式,具体应用时,只需要对d和C中出现的单词进行计算即可,这就节省了大量的计算量。整个流程如图表 3,需要用到图表 2中的前三步部算法获得的评论列表。这里之所以不用图表 2的最终结果,是因为我们需要更多的信息,信息越多,获得的概括越具有影响力。图表 4.4获得基于影响的概括通过上面的模型,可以对A中的每个句子进行打分,然后根据所打得分数进行从打大到小排序。这里因为每篇论文只有1000左右的句子,数量级并不是很大,就自己写了一个简单的冒泡排序算法来排序。之后,选择其中得分最高的k个句子,组合在一起,就获得了原文基于影响的概括了。从整个建模的过程中也可以看出,所谓基于影响,就是通过那哪些对A进行评价的句子集C,分别获得Si与这些句子的相似程度,与其相似程度最高的,证明这个句子被其他作者提及的最多,影响最大。而这个概括与摘要的区别就是,影响较大的句子,可能原来的作者并没有想到,因此在摘要中并没有提及(正所谓无心插柳柳成荫);而摘要中提及的部分,影响可能反而没有那么大。图表 3第5章 搭建搜索引擎本章段内容主要介绍如何利用paradisePARADISE搜索引擎平台来搭建我们的论文检索系统。通过这段内容,我们可以了解到PARADISEparadise使用的基本过程,最终我们会发现,如果想搭建其他方向的搜索引擎,使用PARADISEparadise也是非常方便的。5.1 PARADISEparadise结构简介paradisePARADISE系统,全称是Platform for Applying, Researching And Developing Intelligent Search Engine, 是网络实验室搜索引擎组耗时一年多开发的在一个国家863项目支持下开发的,其目的是建立一个搜索引擎平台,将搜索引擎的各个部分模块化,使得这个搜索引擎不只在针对专一 的某一个领域,而是可以针对各个领域。其功能有点类似于Llucene系统,与其不同的是paradisePARADISE是用Cc+编写的。PARADISEparadiese有以下几大的模块,见表格 3。表格 3analysisindexsearchfront_evidence(1)analysis是预处理模块,用于对网页进行去噪、消重以及编码转换等等处理,如果是针对paper的pdf转换后的text文件建立索引网页构建搜索引擎,这一步骤就可以省略了。(2)index是索引模块,用于将需要检索的部分建立倒排索引。具体如何使用5.2会提到。(3)search是搜索模块,将index建成之后,就可以利用index数据开启搜索服务,对于每一个词,去倒排索引里面查找包含它的文档中的id号(网页中为url),从而完成检索。(4)front_evidence是前台模块,完成一个类似于天网搜索引擎的前台界面。除了显示现实结果之外,还进行摘要处理,一个文档的摘要。这个地方需要注意的就是与index部分有一定的结合,会在后面提到。除了以上4个大的模块之外,PARADISEparadise还提供了很多可供选择以及继承修改的小模块。例如,在search的语言模型这个部分,可以选择需要的模型,也可以自己重写一些语言模型。压缩的时候,可以选择vint、pfordelta等等各种压缩算法PARADISEparadise系统接口设计得非常好,当需要对上面任何一个模块进行修改时,不需要修改源代码,只需要自己重写一些继承的类就可以了。5.2修改索引部分对于本次的文献检索部分,只需要继承一个索引部分的类就可以了,具体代码如下(这里只贴出最关键的两端代码,中间还省略了一些代码),其中黄色背景的是需要我们修改的部分。void main()Analyzer* analyzer = new NaiveAnalyzer();compressorFactory = new PForDeltaCompressorFactory();IndexWriter * writer = new IndexWriter(fsdir, analyzer, compressorFactory); writer-setMergeThreshold(mergesize); PDFParser parser; if (begin != 0) while (begin 0) parser.hasNext(); begin-; int doc_id = 1; Timer t; while (parser.hasNext() shared_ptr pContent = parser.getContent(); addDocument(pContent, writer, doc_id); if (num = 0 & doc_id = num) break;在上面的这段代码中,可以看出,首先建立了一个分析模块,然后选择压缩方式为pfordata,然后建立一个IndexWriter,这个是建立索引的类。而我们需要做的事情,就是:(1) 重写一个Parser类,这里的名称为PDFParser,这个parser需要有hasNext,getContent这两个函数即可。(2) 重写一个Content类,里面存有所需要建立索引的document的内容,由上面的getContent类返回。(3) 重写addDdocument函数,如下,其中关键部分用黄色背景标注。int addDocument(shared_ptr pContent, IndexWriter* pWriter, int & doc_id) paradise:index:document:Document document; shared_ptr field_content = Field:TextStatistics(Content); shared_ptr field_content_data(new FieldData(pContent-getContentToken(); field_content.get()-setFieldData(field_content_data); document.addField(field_content, NONSTATIC); shared_ptr field_ID = Field:Keywords(Url); shared_ptr field_ID_data(new FieldData(PDFFunction:Int2Str(pContent-getID(); field_ID-setFieldData(field_ID_data); document.addField(field_ID, NONSTATIC); document.setDocId(doc_id); pWriter-addDocument(document); doc_id+; 上面的代码中,首先建立一个Content域,内容为我们的文献全文形成的字符串。然后建立了一个url域。其中,url域及其重要,是必须有的一个域,而且必须名为Url。我们知道,所谓倒排索引,是指对一系列文本的内容建立简历索引,通过这些内容,可以获得这些文本的IDID号,就如网页搜索一样,我们通过那些网页的内容,搜索到网页的url。这里我们将文献的文本内容存在BerkeleyDB中的,因此需要获得每个文章的IDid号。PARADISEaradise系统的设置是,在我们开启一个搜索服务时,一个请求发向服务器端之后,服务器端会将搜索到得结果的url列表返回给前端,这个url列表必须是来自上面的Url域。因为PARADISEaradise主要是针对网页搜索的,所以称这个域为Url,实际上应该叫DocumentID更确切一点。5.3修改前台部分ParadisePARADISE的前台部分也设计的很好,特别是摘要算法也已经完成测试。,因此对于前台部分,只需要修改一点,就是提供一个候选摘要的数据库。我们知道,不可能对整篇文章进行摘要算法,那样会耗费大量的时间,最终会导致前端段所耗费的时间比后端检索所花费的时间还多,这显然是用户无法接受的。因此,前台部分唯一需要修改的部分,就是给定一个ID号,获得它的摘要。这里,我们利用了前面获得的metadata.dpt文件,里面存有一篇论文的摘要,获得摘要段落之后,对其利用摘要算法,可以获取较好的效果。另外,我们这个系统不是简单的一个论文检索系统,检索只是方便使用的工具,更重要的,它是一个知识提取系统,因此,还需要自己编写一些界面用来显示知识,这些就不再赘述。5.4系统示意图5.4.1主界面5.4.2搜索结果界面5.4.3评论界面第6章 实验结果与分析6.1实验结果在我们的实验数据里,我们总共抓取了2500篇论文,其中在我们的论文集里被其他论文引用的文章个数为1686篇,总共被引用72471次,平均每个论文被42论文引用。这些论文中,总共能找到的评论句子个数为160046个。平均每个论文有个95评论句子,每个论文在被另外一篇论文引用时,平均约被评论2.2次根据上面的比率,可以看出,如果我们最终显示在界面上的评论个数需要是5个,那么一篇论文,它被1到2篇论文引用时,就会获得足够的评论集。如果被5篇论文引用时,就会获得效果很好的评论集了。 6.2具体分析为了更很好的说明我们所做的这个系统的效果,下面随机即选取一篇评论较多论文为例,来说明我们获得的这些评论以及概括的作用Elkiss, et al.,2008。5 Aaron Elkiss, Siwei Shen, Anthony Fader. Blind men and elephants: What do citation summaries tell us about a research article? Journal of the American Society for Information Science and Technology, pages 51-62, 2008.Paper Name:Three-level caching for efficient query processing in large Web search engines从题目可以看出,这篇论文是用三级缓存来处理搜索引擎中大规模的请求的。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论