基于Nutch的新闻主题搜索引擎的设计与实现毕业论文.docx
- 文档编号:23833347
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:57
- 大小:633.76KB
基于Nutch的新闻主题搜索引擎的设计与实现毕业论文.docx
《基于Nutch的新闻主题搜索引擎的设计与实现毕业论文.docx》由会员分享,可在线阅读,更多相关《基于Nutch的新闻主题搜索引擎的设计与实现毕业论文.docx(57页珍藏版)》请在冰豆网上搜索。
基于Nutch的新闻主题搜索引擎的设计与实现毕业论文
毕业论文(设计)
论文(设计)题目:
基于Nutch的新闻主题搜索引擎的设计与实现
摘要
互联网上丰富的信息资源给人们的工作和生活带来巨大效益和便利的同时,也带来了巨大的信息冗余。
我们在使用传统的通用搜索引擎时,经常会遇到这样的问题,为了搜索到一些专业的基础知识,不得不在众多的网站中,花费大量的时间去寻找,而主题搜索引擎的出现为解决这类问题提供了很好的方法。
另外,由于Nutch具有高透明度,任何单位或个人都可以查看搜索引擎的工作原理并且程序设置灵活,用户可以根据自己需求定制,通过长时间的实际应用,结果表明Nutch运行非常稳定,因此选择Nutch为爱好搜索引擎的人们提供了一个很好的研究平台。
本课题的主要内容是基于Nutch的新闻主题搜索引擎的设计与实现。
现在很多人都喜欢从互联网阅读新闻,但是各大新闻网站为了获得点击率收录了很多低质量新闻,而报纸网站很难满足人们对不同地域和不同类型新闻的需求,所以一个新闻主题的搜索引擎是十分有必要的。
论文首先介绍了搜索引擎的发展历史、面临的问题,以及主题搜索引擎的的优势和研究现状,并在了解Nutch工作原理的基础上对主题爬虫抓取策略进了详细的讨论,分析了新闻主题搜索引擎的可行方案,接着介绍了Nutch、Tomcat等各组件的安装配置,测试运行结果并与XX做比较。
最后对论文进行了总结分析。
关键字:
Nutch;搜索引擎;Crawler;抓取策略;新闻
ABSTRACT
AbundantInternetinformationresourcesbringenormousbenefitsandconvenienceforourworkandlife;thesealsobringagreatdealofredundantinformation.WhenweusegeneralSearchEngine,weoftenencounterthisproblem;inordertosearchsomebasicprofessionalknowledge,wehadtospendalotoftimetofindtheknowledgeinmanywebsites.WhiletheVerticalSearchEnginewillsolvethisproblem.
Inaddition,Nutchhashighlytransparent,anyunitorindividualcanviewthesearchenginework,andtheprogramconfigurationflexibility,Userscancustomizeaccordingtotheirneeds.Throughalongperiodofpracticalapplication,theresultsshowthatNutchrunsverystable.Therefore,selectingtheNutchSearchEnginecanprovideagoodresearchingplatformforthelovingpeople.
TheobjectofthisprojectistosetupaNewsVerticalSearchEnginebasedonNutch.NowadaysplentyofpeoplereadnewsfromtheInternet.Whilethenewswebsitesalwaysputsomelow-qualitynewstocatchreaders’eyes,andthenewspaperwebsitescanhardlyfeedreaders’variousneeds.Thus,itisverynecessarytoprovideaNewsVerticalSearchEngineforthem.
Thepaperfirstintroducedthehistory,presentproblemsofSearchEngine,andtheadvantages,presentsituationofTopicalSearchEngine.ThenwediscussedthestrategiesofFocusedCrawlerandproposedasolutionofNewsTopicalSearchEnginewithknowledgeintheprocessofNutch.Afterthat,wetalkedaboutsettingupandconfiguringthecomponentsweneed.ThenwerantheenginesowecouldcomparetheresultswithBaidu’s.Atlast,wetestedtheSearchEngineandmadeasummaryofthisproject.
Keywords:
Nutch;SearchEngine;Crawler;FetchingStrategy;News
第1章绪论
1.1课题研究背景
随着社会的进步和科技的发展,人们对信息的需求量越来越大,对质量的要求也越来越高。
而互联网已经成为很多人获取信息的主要渠道。
怎样从海量的信息和庞大的地址群中找到自己想要的信息呢?
搜索引擎的出现很好的解决了这个问题,成为大多数用户的“上网第一站”[1]。
1.1.1搜索引擎发展史
所谓搜索引擎,就是一种能够自动对WWW资源建立索引或进行主题分类,并通过查询为用户返回相关资源的系统。
在互联网发展初期,网站相对较少,信息查找比较容易。
然而伴随互联网爆炸性的发展,普通网络用户想找到所需的资料简直如同大海捞针,这时为满足大众信息检索需求的专业搜索网站便应运而生了。
现代意义上的搜索引擎的祖先,是1990年由蒙特利尔大学学生AlanEmtage发明的Archie。
虽然当时WorldWideWeb还未出现,但网络中文件传输还是相当频繁的,而且由于大量的文件散布在各个分散的FTP主机中,查询起来非常不便,因此AlanEmtage想到了开发一个可以以文件名查找文件的系统,于是便有了Archie[2]。
Archie工作原理与现在的搜索引擎已经很接近,它依靠脚本程序自动搜索网上的文件,然后对有关信息进行索引,供使用者以一定的表达式查询。
由于Archie深受用户欢迎,受其启发,美国内华达大学于1993年开发了另一个与之非常相似的搜索工具SystemComputingServices,不过此时的搜索工具除了索引文件外,已能检索网页。
当时,“机器人”一词在编程者中十分流行。
电脑“机器人”(ComputerRobot)是指某个能以人类无法达到的速度不间断地执行某项任务的软件程序。
由于专门用于检索信息的“机器人”程序象蜘蛛一样在网络间爬来爬去,因此,搜索引擎的“机器人”程序就被称为“蜘蛛”程序。
世界上第一个用于监测互联网发展规模的“机器人”程序是MatthewGray开发的WorldwideWebWanderer。
刚开始它只用来统计互联网上的服务器数量,后来则发展为能够检索网站域名。
与Wanderer相对应,MartinKoster于1993年10月创建了ALIWEB,它是Archie的HTTP版本[3]。
ALIWEB不使用“机器人”程序,而是靠网站主动提交信息来建立自己的链接索引,类似于现在我们熟知的Yahoo。
随着互联网的迅速发展,使得检索所有新出现的网页变得越来越困难,因此,在MatthewGray的Wanderer基础上,一些编程者将传统的“蜘蛛”程序工作原理作了些改进。
其设想是,既然所有网页都可能有连向其他网站的链接,那么从跟踪一个网站的链接开始,就有可能检索整个互联网。
到1993年底,一些基于此原理的搜索引擎开始纷纷涌现,其中以JumpStation、TheWorldWideWebWorm(Goto的前身,也就是今天Overture),和Repository-BasedSoftwareEngineering(RBSE)spider最负盛名。
然而JumpStation和WWWWorm只是以搜索工具在数据库中找到匹配信息的先后次序排列搜索结果,因此毫无信息关联度可言。
而RBSE是第一个在搜索结果排列中引入关键字串匹配程度概念的引擎。
最早现代意义上的搜索引擎出现于1994年7月。
当时MichaelMauldin将JohnLeavitt的蜘蛛程序接入到其索引程序中,创建了大家现在熟知的Lycos[4]。
同年4月,斯坦福(Stanford)大学的两名博士生,DavidFilo和美籍华人杨致远(GerryYang)共同创办了超级目录索引Yahoo,并成功地使搜索引擎的概念深入人心。
从此搜索引擎进入了高速发展时期。
目前,互联网上有名有姓的搜索引擎已达数百家,其检索的信息量也与从前不可同日而语。
比如最近风头正劲的Google,其数据库中存放的网页已达30亿之巨!
随着互联网规模的急剧膨胀,一家搜索引擎光靠自己单打独斗已无法适应目前的市场状况,因此现在搜索引擎之间开始出现了分工协作,并有了专业的搜索引擎技术和搜索数据库服务提供商。
象国外的Inktomi(已被Yahoo收购),它本身并不是直接面向用户的搜索引擎,但向包括Overture(原GoTo,已被Yahoo收购)、LookSmart、MSN、HotBot等在内的其他搜索引擎提供全文网页搜索服务。
国内的XX也属于这一类,搜狐和新浪用的就是它的技术。
因此从这个意义上说,它们是搜索引擎的搜索引擎。
1.1.2通用搜索引擎面临的问题
通用搜索引擎信息采集的目标就是尽可能多地采集信息、页面,甚至是整个Web上的资源。
随着WWW信息的爆炸性增长,信息采集的速度越来越不能满足实际应用的需要。
最近的试验表明,即使大型的搜索引擎,它对Web的覆盖率也只有30-40%。
解决这一问题的直接办法是升级信息采集器的硬件,采用处理能力更强的计算机系统,然而这种方法的扩展性有限,性价比也不高。
一个更好的解决方法是采用分布式方法来提高并行能力,但是并行不但增加了系统的开销和设计的复杂性,并且并行换来的效益也随着并行采集器数目的增加而显著地减小。
目前,一般的大型搜索引擎都采用了并行机制,但并行带来的改善效果仍远不能满足人们的需要,人们需要从其它角度改善目前的困境。
针对上述情况,另一种形式的搜索引擎悄然出现,它可以在较小的范围内取得比通用搜索引擎更令人满意的结果,以满足某些特定用户的需要,这就是主题搜索引擎。
1.2主题搜索引擎
1.2.1什么是主题搜索引擎
所谓主题搜索引擎(TopicalSearchEngine),是针对某一特定领域、某一特定人群或某一特定需求提供的有一定价值的信息和相关服务。
其特点就是“专、精、深”,且具有行业色彩。
它是与通用搜索引擎截然不同的引擎类型。
主题搜索引擎专注具体、深入的纵向服务,致力于某一特定领域内信息的全面和内容的深入,这个领域外的闲杂信息不收录。
从竞争的角度来讲,主题搜索引擎要做通用搜索引擎无法做到的事情,或者说,要做得更胜一筹。
通用搜索引擎像一堵大墙,而墙上有很多裂纹,主题搜索引擎就是要去补这些墙上的裂纹[5]。
1.2.2主题搜索引擎研究现状
主题搜索引擎的优势,将决定它在互联网的一席之地。
那么主题搜索的突破点和创新的东西在哪里?
1.实时性
主题搜索引擎需要获取的信息来自于某一特定领域的,这比起通用搜索引擎漫无边际的信息抓取,有一个非常大的优势,那就是信息的实时性。
由于互联网上的信息量非常巨大,通用搜索引擎的数据更新周期短则十几天,长则几个月,而主题搜索引擎的数据更新完全可以以秒为单位。
酷讯()的火车票搜索就是典型的实时性主题搜索。
2.数据挖掘分析
行业的历史发展、最新动向、趋势都是行业从业人员非常关注的话题。
主题搜索引擎集中了行业海量的信息和数据,基于这些信息和数据的商务智能分析,将为行业创造非常有价值的信息增值服务。
目前,各个主题搜索引擎开始加强数据分析功能,分析的结果尚未向公众免费开放,毕竟,这也是一个非常好的盈利点。
3.个性化,社会化
查询服务只是主题搜索引擎的一部分,主题搜索引擎在用户的个性化方向的发展非常重要。
主题搜索引擎不能只提供一个窗口,它应该是一个用户高度参与交互的社会化平台。
这不光是用户粘度,忠诚度的问题,更为重要的是,主题搜索引擎需要能够获取并且分析用户的偏好信息,从而提供更加完善而且准确的数据服务。
职友集()可以说走在了前面,其职友圈为找工作的人提供了参与性很高的平台。
4.智能化语义网
语义网(SemanticWeb)将有可能成为下一代互联网,这样网络上的数据和信息将被计算机程序所理解。
这将为主题搜索引擎提供一个巨大的机会,爬虫程序如果能理解网络上的数据,将对信息的收集和整理更加准确和专业,搜索服务的查全率和查准率将更高。
国外的Pluggd(www.P)正在向这个方向努力。
5.多元化查询
目前的搜索引擎,都只局限于关键字搜索,其中主要的原因是,对用户的查询需求无法建模,无法模式化。
而关键字搜索带来的问题是,搜索结果过多,并且不准确。
互联网信息量越大,这种情况越严重,可以说是灾难。
多元化查询服务的提供,将会成为对竞争对手的杀手锏。
Riya()正在这方面尝试,它提出了可视化查询(VisualSearch)的概念[6]。
1.3文本组织结构
本文共分为五章,全文结构安排如下:
第一章绪论主要介绍了课题的研究背景以及发展现状;
第二章总体介绍了开发主题搜索引擎所用到的各个组件及软件,其中重点介绍了Nutch搜索引擎的系统架构、Crawler的组成和Crawler的工作流程以及中文分词的实现方法;
第三章讨论了几种实现主题爬取的爬虫搜索策略,包括本文所使用的爬虫策略;
第四章是基于Nutch的主题搜索引擎的具体实现,包括开发环境的搭建、环境变量的设置、主题爬虫和索引的设计;
第五章为本论文的结束语,对本次设计做了总结和展望。
第2章主题搜索引擎相关技术介绍
因为本文是在Apache的两个开源项目Nutch、Tomcat的基础上进行主题判别,而这两个项目的相关资料很少,只有在了解其工作原理的基础上才能做更好的改进,所以我们通过本章来分析项目中的关键技术。
2.1JavaCC简介
JavaCC是一个功能极其强大的“编译器的编译器”工具,可用于编制上下文无关的语法,集分词和语法分析于一身的针对Java语言的文本自动分词软件包,类似于UNIX系统中的LEX和YACC工具。
JavaCC把这两者的功能结合,形成了一个功能强大的分析工具。
用户只需写出分析脚本,JavaCC就会生成符合用户要求的类,用来进行词法和语法分析。
JavaCC使用了自动机的理论,而不是递归下降分析,Nutch正是利用JavaCC这个十分强大的工具,生成系统的分词器。
JavaCC的语法定义是由正规式(RegularExpression)来完成的[7]。
这里指的是上下文无关文法。
理解形式文法的定义,才能更好地理解和使用JavaCC。
在一种语言中,存在非终结符和终结符两种单词。
正规式就定义了一个非终结符怎样被替换为另一个字符串。
正规式可以描述一种语言,符合该正规式定义的所有句子都是这个语言的句子。
或者,正规式描述了正规文法,又称线性文法,或上下文无关文法。
称为线性是因为这种文法可以从前到后顺序的被指定为一个句子。
JavaCC的语法定义功能十分强大,可以做几乎所有的限制和指定。
JavaCC的长处在于它的简单性和可扩展性。
要编译由JavaCC生成的Java代码,无需任何外部JAR文件或目录。
仅仅用基本的编译器就可以进行编译。
而该语言的布局也使得它易于添加产生式规则和行为。
JavacCC的输入文本是一个词法和语法的规范文件,其中也包括一些动作的描述,它的后缀应该是jj。
一个jj文本由下面几个部分构成:
Options{}部分:
这个部分对产生的语法分析器的特性进行说明,例如向前看的token的个数(用来解除冲突)。
这一部分是可以省略的,因为每一个选项都有默认值,当我们没有对某个选项进行说明时,它就采用默认值。
也可以把这些选项作为JavaCC命令的参数来启动JavaCC,可以达到同样的效果。
分析器类的声明:
这个部分指定了分析器类的名字,以及其他类中成员的声明。
这个部分是必须有的。
这个部分的声明如下:
PARSER_BEGIN(elassname)
Classelassname{
}
PARSER_END(classname)[8]
词法部分的声明:
这里面有四类:
SKIP、TOKEN、SPECIALJOKEN、MORE。
其中,SKIP用来说明被忽略的串,TOKEN用来说明在词法层次上识别的token。
在词法声明部分,以#开头的token只是在词法分析时使用,不能作为语法分析的输入,也就是说,它相对词法分析是局部的。
语法声明和动作代码:
这一部分生成的代码会直接插入分析器类声明的结束括号之前。
一般而言,语法中的每一个非终结符都对应一个函数。
以上说明的是jj文件的组成部分,下面再说明一下jj文件中语法的表示方法。
JavaCC中的语法表示吸收了UNIX中正规文法的一些记号:
[]:
其中的内容是可选的。
+:
前面的内容出现一次或多次。
-:
前后构成的闭区间。
*:
前面的内容出现0次或多次。
?
:
前面的内容出现0次或一次。
~:
后面的内容的补。
|:
前面或后面。
():
改变运算的优先级,把其中的内容作为一个整体[9]。
利用JavaCC构造中文分析模块:
JavaCC是根据西方语言的形式文法理论设计的,不能直接解决中文问题。
当仔细研究后,发现所谓的“中文问题”实际上就是如何把上下文无关文法转变为上下文相关文法。
EBNF当然不能解决这个问题。
通过写入Java代码,用各种对象和标志变量制作特殊的“上下文”环境,就可以实现JavaCC的中文分词。
Nutch原来的脚本在TOKEN段进行了精细的刻画,对于英文单词、主机地址、电子邮件地址、数字、缩写等各种格式都进行了考虑。
只需利用中文分词功能,直接传入中文句子,得到ArrayList类型的返回结果。
因此,所做的工作就是事先分出一个全部是中文的字符串,这一点通过下面的定义实现:
( <#CJK: [ “\u3040”-“\u318f“, “\u3300”-“\u337f”, “\u3400”-“\u3d2d”, “\u4e00”-“\u9fff”, “\uf900”-“\ufaff” ] > 上面的CHINESE的定义为: 由汉字开头,包含汉字或空格的最长的字符串,而汉字则定义为CJK。 CJK即中国、日本、朝鲜和韩国使用的中国汉字的总称,全称为CJKIdeographs(CJK象形文字),这是Unieode标准所定义的[10]。 2.2Tomcat简介 用户一般通过浏览器进行查询,这就需要系统提供Web服务器并且与索引数据库进行连接。 用户在浏览器中输入查询条件,Web服务器接收到用户的查询条件后在索引数据库中进行查询、排列然后返回给用户。 Web服务器是在网络中为实现信息发布、资料查询、数据处理等诸多应用搭建基本平台的服务器。 在Web页面处理中大致可分为三个步骤,第一步,Web浏览器向一个特定的服务器发出Web页面请求;第二步,Web服务器接收到Web页面请求后,寻找所请求的Web页面,并将所请求的Web页面传送给Web浏览器;第三步,Web服务器接收到所请求的Web页面,并将它显示出来。 我们选择Tomcat的原因是因为它不仅仅是一个Servlet容器,也具有传统的Web服务器的功能,是Apache基金会的Jakarta项目中的一个核心项目,由Apache、Sun和其它一些公司及个人共同开发而成。 由于有了Sun的参与和支持,最新的Servlet和Jsp规范总能在Tomcat中得到体现。 本系统中用到的Tomeat6.0.26完整地实现了Servlet2.4和JavaServerPages2.0规范[11]。 由于Java的跨平台特性,基于Java的Tomcat也具有跨平台性。 与传统的桌面应用程序不同,Tomcat中的应用程序是一个WAR(WebArchive)文件。 WAR是Sun提出的一种Web应用程序格式,与JAR类似,也是许多文件的一个压缩包。 这个包中的文件按一定目录结构来组织: 通常其根目录下包含有Html和Jsp文件或者包含这两种文件的目录,另外还会有一个WEB-INF目录,这个目录很重要。 在WEB-INF目录下有一个web.xml文件和一个classes目录,web.xml是这个应用的配置文件,而classes目录下则包含编译好的Servlet类和Jsp或Servlet所依赖的其它类(如JavaBean)。 通常这些所依赖的类也可以打包成JAR放到WEB-INF下的lib目录下,当然也可以放到系统的CLASSPATH中,但那样移植和管理起来不方便。 Tomcat能处理Html页面。 在Tomcat中,可以利用Servlet提供的事件监听器功能,对应用或者Session实行监听。 Tomcat也提供其它的一些特征,如与SSL集成到一块,实现安全传输。 Tomcat与应用服务器的主要区别是: 应用服务器提供更多的J2EE特征,如EJB,JMS,JAAS等,同时也支持Jsp和Servlet。 而Tomcat功能则没有那么强大,它不提供EJB等支持。 但如果与JBoss(一个开源的应用服务器)集成到一块,则可以实现J2EE的全部功能。 既然应用服务器具有Tomcat的功能,那么Tomcat有没有存在的必要呢? 事实上,我们的很多中小应用不需要采用EJB等技术,Jsp和Servlet己经足够,这时如果用应用服务器就有些浪费了。 而Tomcat短小精悍,配置方便,能满足我们的需求。 2.3Nutch介绍 2.3.1系统架构 总体上Nutch可以分为2个部分: 抓取部分和搜索部分。 抓取部分抓取页面并把抓取回来的数据做成倒排索引,搜索部分则搜索倒排索引以回答用户的请求。 抓取部分和搜索部分的接口是索引,两者都使用索引中的字段。 抓取部分和搜索部分可以分别位于不同的机器上。 下面详细介绍一下抓取部分组成。 抓取部分是由Nutch的抓取工具驱动的。 这组工具用来建立和维护几个不同的数据结构: WebDB,segment,index。 1.WebDB。 是一个特殊存储数据结构,保存被抓取网站数据的结构和属性,只被抓取程序使用,搜索程序并不使用它。 WebDB存储2种实体: 页面和链接。 页面表示网络上的一个网页,这个网页的URL作为标识被索引,同时建立一个对网页内容的MDS哈希签名,跟网页相关的其它内容也被存储,主要包括: 页面中的链接数量(外链接)、页面抓取信息(在页面被重复抓取的情况下)、表示页面级别的分数Score。 链接表示从一个网页的链接到其它网页的链接。 因此WebDB可以说是一个网络图,页
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Nutch 新闻 主题 搜索引擎 设计 实现 毕业论文