本科毕业论文 搜索引擎F - 图文(3)

2019-05-18 18:27

\class=\\\href=\\\target=\\\([^<>]*?)\\\\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的格式,只能存在文件系统里,按正常的方式存储。对于其他的信息,这里选择存储在Berkeley DB(简记为BDB)里面。BDB是一种轻量级的数据库,Mysql等数据库底层就是利用BDB来完成的。它的优点是可移动性,不用像Mysql那样搭建服务器,而且读取数据时较快。对于每一篇文章的基本信息metadata,按照表格 1中的形式存入BDB中:

表格 1

Key int64_t的一个整数 字符流,存储元数据信息,按如下格式: **************************************************name **************************************************source Value **************************************************abstract **************************************************citationCount **************************************************authors **************************************************references 7

**************************************************referenceName **************************************************url

获得这些基本信息之后,我们还要根据这些元信息,陆续建立一些BDB文件,用于存储其他信息,如表格 2:

表格 2

文件名 content.dpt fromto.dpt Key int64_t的整数,论文ID int64_t的整数,论文ID Value 这篇论文的全部文本内容 用于存储一篇论文所引用的所有文章 tofrom.dpt int64_t的整数,论文ID 用于存储一篇论文被哪些文章所引用 comment.dpt int64_t的整数,论文ID 存储最终要显示在页面上的文章的评价 summary.dpt int64_t的整数,论文ID 存储最终要显示在页面上的基于影响的文章的概括

其中content.dpt是通过将pdf格式转化为txt之后获得的。fromto.dpt是对整个论文的引用关系图进行解析获得的,从上面的元数据中,我们可以获得每篇论文所引用的论文的名称,这样,我们可以通过这些名称,来获得这个论文所引用的所有论文的ID号,并且存储到数据库中。获得fromto.dpt之后,对其进行倒置,就可以获得tofrom.dpt的内容

这里之所以选择BDB进行存储,是因为它有以下这些优点:

? 嵌入式(Embedded):它直接链接到应用程序中,与应用程序运行于同样

的地址空间中,因此,无论是在网络上不同计算机之间还是在同一台计算

机的不同进程之间,数据库操作并不要求进程间通讯。

? BDB为多种编程语言提供了API接口,其中包括C、C++、Java、Perl、Tcl、

Python和PHP,所有的数据库操作都在程序库内部发生。对于我们这个系

统,后台程序是由C++完成,而前台程序是由Python完成,他们都会共同访问一些文件,通过存储在BDB进行存储,就解决了不同语言之间兼容的问题。

? 轻便灵活(Portable):它可以运行于几乎所有的UNIX和Linux系统及其

变种系统、Windows操作系统以及多种嵌入式实时操作系统之下。它并不

8

需要搭建一个数据库服务器,以用户、服务器形式访问数据库,而是以函数调用的形式。一旦BDB被链接到应用程序中,终端用户一般根本感觉不到有一个数据库系统存在。这样提高了我们的系统的实用性,当用户需要自己搭建一个我们的论文系统时,不用再去搭建数据库服务器,进行各种繁琐的配置。

9

第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个位置,那么通常在文章中会利用\来对A进行引用。

4) 对于(3)的情况,有时候并不只是对k进行引用,可能文章中的一句话代

表的是好几篇文章的工作概括,因此会出现“[i,k,j]”这种类型的符号来对A进行引用,而且出现的概率很高。

5) 如果Bi中的某句话对A进行了评论,那么通常它的前一句话和后一句话

也会出现评价的信息

通过上面的5点,我们就可以获得了Bi中对A进行评价的句子,从而获得了一个候选句子集,里面的每一句话都不同程度的对A进行了评价。

10

图表 2

如图表 2所示流程,具体实现的时候,先要将Bi按句子进行划分为一个句子序列{Bis1,Bis2,Bis3.....},然后遍历这个句子序列,对于每一个句子,按照上面的前四条规则进行评判,如果满足其中任意一条,则这个句子是候选句子集合中的一个,并将其前后两个句子也合到一起,添加的候选句子集合中。 最终,得到对A进行评论的候选句子集{e1,e2,e3...},这里面可能会有一些评价来自同一篇论文。

3.2获得评论段落

获得了候选句子集之后,我们需要对其进行适当的排序,从中选出较好的几个句子,最终显示在页面上。由于不同的人,对这篇论文的评价可能也不太一样,因此,就不能简单的按照这些评价句子与原文的相似度来进行打分排序了,因为这样会造成和原文观点相近的评分较高,不是我们希望获得的结果。实际上,有时候越是和原文的观点不同,反而可能越重要,它可能是对这篇文章的批判,也有可能是原文的作者在写paper时没有发现的一些问题,这对我们寻找后续工作时可能会非常重要。

我们在提取数据的同时,会获得每一篇文章的citation信息,代表这篇文章被引用的次数,一般,一个较好的文章,被引用的次数也应当比较多,因此,对于每一个评价,根据它所在文章的被引用次数进行排序,可以获得较为专业,

11


本科毕业论文 搜索引擎F - 图文(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:第2章 MCS-51单片机结构及原理题解

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: