首页 >  硕士论文 > 软件工程硕士论文 >   正文

软件工程硕士论文:基于Lucene的博客搜索引擎设计与实现

添加时间:2018-01-01 16:17:23   浏览:次   作者: www.dxlwwang.com
专业论文资料, 搜索论文发表论文代写论文网为你解忧愁!详情请咨询我们客服。
获取免费的论文资料? 欢迎您,提交你的论文要求,获取免费的帮助

第一章 绪 论

 
1.1 课题研究背景
自上世纪 70 年代以来,互联网规模增长迅速。信息规模的急剧增加带来的一个问题是信息检索的困难。如何在浩如烟海的网络页面中找到用户需要的文档,是信息时代重要的问题。各个时期的科学家进行了不懈的探索,其中搜索引擎无疑是最有效的解决方式,现今被广泛应用。伴随着计算机计算能力和信息处理技术的不断发展,搜索引擎技术也在不断的提高。在互联网发展初期,站点和网页数量并不庞大。像 Yahoo[1]等公司,通过人工整理的方式将互联的信息按类别分类。用户上网是从 Yahoo 开始根据层级目录查找需要的网页。随着互联网规模的不断增大,靠人工整理的方式很难有效的覆盖互联网上众多的页面。搜索引擎开始逐渐使用文本检索的方式来工作。这种类型的搜索引擎收录大量的网页,并根据关键词匹配的方式评估用户关键词和文档的相似性[2],返回相似性高的文档。本文使用的开源搜索引擎框架 Lucene[3]就属于这种类型。该类搜索引擎面临的主要问题不是检索不到有效的信息,而是检索到太多相关的文档后如何将优质的文档排在检索结果前面。也就是如何衡量文档质量问题。该问题最有名的解决方法当属 Google[4]提出的 PageRank[5]算法,该算法通过分析网页间的超链接关系得到代表网页“权威度”的值。在检索结果排序阶段,将该值大的页面优先排在前面。PageRank 算法虽然大获成功,但现代大型商业搜索引擎在检索结果排序算法最依赖的却是用户点击模型[6]。该算法收集大量的用户上网记录来判断哪些页面更受用户欢迎,用户愿意花较长时间浏览的网页显然要比被用户打开接着就关闭的网页有更高的质量。因此该算法效果十分明显。但是收集用户的上网记录并不容易,百度,作为国内最大的搜索引擎 2016 年日均查询量为 640 亿次[7],可以基于搜索记录来获得部分用户上网记录。Google 凭借市场占有率高达 48.6%[8]的 Chrome 浏览器收集用户上网记录。因此,该算法虽然有效但难以被小的企业和个人应用。
........
 
1.2 课题来源和研究意义
Lucene 作为一个优秀的开源全文检索引擎,被广泛应用在各类信息检索场景中。以舆情监控系统中的关键词检索功能为例,舆情的来源通常是微博、博客和多种多样的论坛等站点,检索系统通常将舆情文本索引至 Lucene,基于 Lucene实现舆情监控中的检索功能。然而随着索引信息量的增加,大量的文档出现在检索结果中,而用户真正关心的是产生较大影响的文档,检索质量随之下降。因此优化 Lucene 的检索结果排序机制是提升检索效果的关键。虽然当今有许多搜索引擎可以选择,比如最大的中文搜索引起百度和全球最大的搜索引擎谷歌,并且他们也提供了稳定的检索服务和较高的检索质量。但是在许多应用还要构建专门的搜索引擎。相对于商用搜索引擎,这些搜索引擎规模较小,同时又有本身的特点。但是提高检索效率和检索结果质量却是共同的目标。本文所使用的提高 Lucene 检索结果排序的技术同样可以应用在使用 Lucene做检索的其他系统,有较高的应用价值。
...........
 
第二章 相关技术介绍
 
2.1 搜索引擎和 Lucene 技术介绍
搜索引擎(Search Engine)是一个方便用户检索互联网信息的系统。其目的是为用户提供方便的检索服务,将与用户检索相关的信息展示给用户的系统。按照结构一个搜索引擎通常由网络蜘蛛(Web Crawal)、索引系统、检索系统组成。信息采集模块是指网络蜘蛛爬取互联网资源的模块,该模型根据搜索引擎设计的目标来设计。像百度等商业搜索引擎的网络蜘蛛要尽可能覆盖互联网上的全部信息,像“去哪儿”[28]等垂直搜索引擎的网络蜘蛛仅需要覆盖跟旅游相关的互联网资源。Lucene 是一个使用 Java 语言开发的全文检索开源库。实现了搜索引擎中的索引和检索功能。用户调用 Lucene 提供的接口可以方便的为文档建立全文倒排索引,同样也可以调用检索接口获得包含关键词的文档。
 
2.1.1 网络蜘蛛和 Scrapy
网络蜘蛛是搜索引擎的信息采集模块,是自动下载互联网信息的程序。通常也被称为网络爬虫、网络机器人等。网络蜘蛛的工作流程类似于数据结构中图的遍历,从图中的一个节点开始,按照特定的策略遍历完图中的所有节点[30]。不同的是互联网页面间超链接关系组成的图是动态的图,规模大并且正在变的更大。工程实现上,网络蜘蛛并不能覆盖到互联网上全部的页面。因此在网络蜘蛛设计时应当考虑如何在有限的时间内尽量多的下载重要的页面。Scrapy 是由 Python 语言编写的网络爬虫框架。提供了下载用户指定的 URL,的功能,使用该框架开发者不再需要手动跟网站之间建立连接,很大程度上减少了开发者的工作量。同时支持 xpath[31]语言,使得提取 HTML 中的元素变得很容易。尽管如此构建一个网络蜘蛛仍然有很多工作需要开发者完成。
.......
 
2.2 Hadoop 和 Spark
随着互联网规模的不断增长,大数据已经是各个行业不得不面对的一个问题。受物理内存和硬盘访问速度的限制,靠单机的方式处理处理大规模的数据已经变得不再不可行。为了对大数据量的高效处理,无论是工业界还是学术界都一致采用集群编程的模型。其中最典型的代表是 Hadoop 生态系统(简称 Hadoop)和 Spark。Hadoop 主要包括分布式文件存储系统 HDFS[32]、分布式计算模型 MapRed和非关系的型数据库 Hbase 等。Hadoop 生态系统提供了集群计算的框架 ,从超大文件存储和并行处理文件块两个方面实时处理超大数据。其中对超大文件的存储是基于 HDFS 来实现的。HDFS 是一个分布式的文件系统,在多个节点上安装、配置好 hadoop 后这些节点的资源(cpu、主存、辅存)就可以并行利用了,比如在 4 个有 100G 存储资源的 PC 上部署 HDFS 那么这个集群就可以处理 400G 大小的文件。这给大文件存储和分析提供了可能,另一方面对于上例中提到的 400G 大小的文件,Hadoop 通过 MapReduce 这个并行的处理框架,使同样达的作用在 4 个节点上同时执行,这样要比单节点处理快 4 倍。而且可以通过增加节点的办法使大文件的处理速度达到几乎线性的提升,这给大文件处理提供了运算能力上的支持。Hadoop 提供了分布式的存储 HDFS 也提供了分布式编程模型 MapReduce,这个框架包含两个部分 Map 和 Reduce。其中 Map 是作用在列表上的操作,对该列表里的每一个元素执行同样的操作。从编程的角度来说是将同一个函数作用在列表里的每一个元素上面。Reduce 操作是一个规约的过程,常将一个列表里的所有值规约到一个值。一个 MapReduce 的作业通常会将输入数据分割成许多独立的数据块,并且在这些数据块上完全并行的执行 Map 操作。该框架在 Map 操作执行完之后将结果进行排序,传递给 Reduce 操作。Map 和 Reduce 的输入通常来自 HDFS 并且将执行结果写回到 HDFS,在作业执行过程中框架会监控作业的执行情况,如果有作业执行失败,仅需要重新执行失败的作业。
...........
 
第三章 系统设计....14
3.1 系统总体设计........ 14
3.2 网络蜘蛛设计........ 16
3.2.1 爬取策略...... 16
3.2.2 页面去重...... 17
3.3 文本预处理............ 17
3.4 索引和信息存储.... 18
3.5 检索结果展现设计.......... 19
3.6 本章小结...... 20
第四章 检索结果排序优化........21
4.1 优化方案...... 21
4.2 Lucene 检索结果排序机制分析 ......... 21
4.3 基于好友关系的 PageRank....... 23
4.4 获取检索词的同义词...... 27
4.5 改进 Lucene 检索结果排序 ...... 29
4.6 本章小结...... 31
第五章 系统实现....32
5.1 网络蜘蛛实现........ 32
5.2 基于 Lucene 的索引实现 .......... 34
5.3 检索结果优化实现.......... 35
5.4 用户检索界面实现.......... 36
5.5 系统测试和评估.... 37
5.6 优化效果评估........ 40
5.7 与其他优化方案对比...... 40
5.8 本章小结...... 40
 
第五章 系统实现
 
5.1 网络蜘蛛实现
本文使用 Python Scrapy 搭建网络爬虫,爬取策略如 3.2.1 节所述。在下载用户阶段,首先需要人工确定初始用户列表,该列表要中的用户要尽量尽量有代表性。以 CSDN 为例,该列表中的用户是从各个博客专栏里的博客专家中选取的。Scrapy 的工作方式是读取待下载地址列表里的地址,访问该地址,然后解析下载到的文档。原始的下载页面是 HTML 格式,需要对该页面进行分析处理从HTML 标签中提取需要的信息。解析用户主页时需要提取的信息有该用户的关注好友列表和该用户的被关注好友列表。提取过程使用 xpath 完成。在 CSDN 网站上,从一个用户主页提取该用户好友关系的 xpath 表达式如下:网络蜘蛛虽然逻辑简单,但是构建一个能稳定运行的网络蜘蛛并不容易。为了增强网络蜘蛛的稳定性,本文从防止反爬虫方面对网络蜘蛛进行了优化。具体来说是采用限制爬取速度、修改 HTTP 头信息模拟不同的浏览器和使用代理 IP地址等方法。在错误页面处理方面,不仅考虑到了常见的 404 等错误还对 HTTP返回状态在 200 和 400 之外的做了屏蔽。
.........
 
总结
 
本文基于 Lucene 以博客应用场景使用一些开源工具构建了简单的博客搜索引擎。收率较大规模的数据,实现了基本的检索查询功能。并在之上对 Lucene的检索结果排序机制做了优化,基于这些数据评估优化效果取得了一定成效。由于时间有限,课题中尚有一些不完善的地方。最后简单总结一下本文所做的工作并对不完善的地方做一下展望。本文主要完成工作如下:(1)使用 scrapy 框架搭建起了网络蜘蛛,并且爬取到了 CSDN 博客用户信息 89 万多条,博客文章 54 万多篇。这些数据对于商业搜索引擎来说虽然九牛一毛。但是对于本课题的研究已经够用。(2)使用结巴分词工具对文章进行了分词。这代替了 Lucene 本身的中文分词工具,对最终的检索效果的改善有明显帮助。(3)使用 Apache Spark 实现了博客好友关系分析。计算出了各个博客用户的影响力因子。以此代表其博文质量。并根据此优化了 Lucene 原始的检索结果排序算法。取得明显效果。(4)使用 Word2vec 和爬取的博文数据,计算出常用词的词向量。根据此向量计算查询词的关键词。这解决了查询同义词的问题。(5)实现了浏览器/服务器形式的用户查询接口。
..........
参考文献(略)

提供海量毕业论文,论文格式,论文格式范文,留学生论文,商务报告相关资料检索服务。
本论文由代写论文网整理提供 http://www.dxlwwang.com/
需要专业的学术论文资料,请联系我们客服
本文地址:http://www.dxlwwang.com/ruanjian/6470.html
论文关键字:软件工程硕士论文 Word2vec 神经网络语言模型 Spark