ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:1.42MB ,
资源ID:10939641      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10939641.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(利用开源工具构建小型搜索引擎项目报告.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

利用开源工具构建小型搜索引擎项目报告.docx

1、利用开源工具构建小型搜索引擎项目报告 深圳大学考试答题纸(以论文、报告等形式考核专用)二 二 学年度第 学期课程编号1501320002课程名称搜索引擎技术主讲教师王旭评分学 号姓名专业年级 教师评语:题目:利用开源工具构建小型搜索引擎1、项目操作环境及基本操作工具:操作系统:Win10。基本操作环境:基于Heritrix+ Lucene;java。基本操作工具:JDK 1.8,MyEclipse Professional 2014,Tomcat 8.0.27,Heritrix 1.14.4,Lucene 2.1.0, JE-analysis-1.5.3,Htmlparser 1.5。基本操作

2、工具基本功能介绍:JDK 1.8:JDK(Java SE Development Kit)包括Java开发包和Java开发工具,是一个写Java 的applet和应用程序的程序开发环境。它由一个处于操作系统层之上的运行环境还有 开发者编译,调试和运行用Java语言写的applet和应用程序所需的工具组成。MyEclipse Professional 2014:Eclipse是一种可扩展的开放源代码IDE。2001年11月,IBM公 司捐出价值4,000万美元的源代码组建了Eclipse联盟,并由该联盟负责这种工具的后 续开发。集成开发环境(IDE)经常将其应用范围限定在“开发、构建和调试”的周

3、期 之中。为了帮助集成开发环境(IDE)克服目前的局限性,业界厂商合作创建了Eclipse 平台。MyEclipse,是在eclipse基础上加上自己的插件开发而成的功能强大的企业级集 成开发环境。 Tomcat 8.0.27:Tomcat服务器是一个免费的开放源代码的Web 应用服务器,它是Apache 软件 基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、 Sun 和其他一些公司及个人共同开发而成。Tomcat 8支持最新的Servlet 3.1 和JSP 2.3 规范。因为Tomcat技术先进、性能稳定,而且免费,因而

4、深受Java 爱好者的喜爱并 得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器。Heritrix 1.14.4:Heritrix是一个开源、可扩展的Web爬虫项目。Heritrix设计成严格按照robots.txt 文件的排除指示和META robots标签。Lucene 2.1.0:Lucene是Apache软件基金会jakarta项目组的一个子项目,是一个开放源代码的 全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的 架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方 语言)。JE-analysis-1.5.3:是一个免费的L

5、ucene中文分词组件。Htmlparser 1.5:是一个纯的java写的html解析的库,Htmlparser不依赖于其它的java库, Htmlparser主要用于改造或提取html。2、该搜索引擎系统的基本构架:先通过爬虫爬取原始网页并进行网页搜集;然后进行网页预处理;接着建立索引indexs;最后 进行查询服务。三、具体搭建和配置过程及问题分析:(1)基本工具的安装: a、JDK1.8的安装: 并配置环境变量: JAVA_HOME:C:Program FilesJavajdk1.8.0_66 JRE_HOME:C:Program FilesJavajre1.8.0_66 CLASSP

6、ATH:%JAVA_HOME%jrelibrt.jar;.; PATH:%JAVA_HOME%jrelibrt.jar;.; b、MyEclipse的安装:运行.exe文件 c、Tomcat的安装:解压安装; 设置环境变量:CATALINE_HOME:D:big workan zhuangapache-tomcat-8.0.30; 设置好之后,测试一下Tomcat。打开Bin文件夹,运行startup.bat; 打开浏览器,输入http:/localhost:8080(或者http:/127.0.0.1:8080),如果看到下图所示的界面, 表明Tomcat运行正常: d、其他工具解压即可。(

7、2)Heritrix工程的建立: a、解压Heritrix-1.14.4和Heritrix-1.14.4-src文件, b、新建项目工程Heritrix: c、配置该工程: 1、将Heritrix-1.14.4和Heritrix-1.14.4-src文件从上述网站中下载。 2、将文件中的lib放入工程中,右键工程-build path-configure build path-add external jars, 将lib中所有jar包添加到library中。 3、将文件中srcjava的org和st两个文件夹放到工程文件的src目录下。 4、将srcconf下的所有文件及其文件夹拖至工程文件

8、下,修改heritrix.properties中的 heritrix.version=1.14.4; heritrix.cmdline.admin=admin:admin,这是分别是版本号和登录所 需要的用户(左)和密码(右)。 5、将src下除了conf和java以外的所有文件夹,拖至工程文件目录下。 6、运行run,成功时会显示版本: 7、创建好的Heritrix目录结构如下: d、网页搜集:1、扩展Heritrix: 新建一个类,叫FrontierSchedulerForScu,派生于org.archive.crawler.postprocessor. FrontierScheduler

9、,它的代码如下: 屏蔽zip、rar、exe文件,只抓取网页,并且抓取的网页中必须包含scu(即四川大学) 打开文件 confmodulesProcessor.options 添加新建的module选项: org.archive.crawler.postprocessor.FrontierSchedulerForSzu|FrontierSchedulerForScu: 取消robots.txt的限制:找到org.archive.crawler.prefetch中的PreconditionEnforcer类:找到considerRobotsPreconditions函数,将该函数内的全部代码注释

10、掉或者直接删除添上return false: f、网页抓取: 1、登录Heritrix:运行Tomcat后登录http:/localhost:8080(或者http:/127.0.0.1:8080) 2、Heritrix的控制台如下: 3、设置seed:设置为四川大学的URL 4、点击Modules:设置各个处理模块: Select Crawl Scope选择org.archive.crawler.scope.BroadScope: Select Writers选择org.archive.crawler.writer.MirrorWriterProcessor并将另一个移除:然后 抓取网页后会

11、生成镜像文件便于查看: Select Post Processors第三项修改为org.archive.crawler.postprocessor.FrontierSchedulerForScu其他设置如图: 5、参数设置: 点击Settings,这里只需要修改user-agent和from:VERSION表示版本,后面的URL 输入 设置好之后,点击Submit Job,返回Console界面,刷新一下(start和refresh),就开始运 行:如图可得到一下的进度条:左边表示已经下载了得数目,右边表示在队列中等待下载的数目。 6、最终抓取的到的结果在工作区间的Heritrix下的jobs

12、文件夹中: 共抓取约13万个文件。 (3)进行网页预处理: a、添加htmlparser解析网页: 将下载的htmlparser相关的压缩包解压,找到htmlparser.jar文件,将至导入library中。 b、添加解析网页文件:Page.java:代码如下: c、对Config.properties进行配置: mirror.path是得到的网页文件的地址: D:bigworkHeritrix_Lucene-20151208Heritrix-1.14.4jobs sichuan-university-20151223130135337 files.path是将网页文件解析后存放的文件地址;

13、 Index.path是网页解析文件建立得到的索引的存放地址。 d、添加文件Extractor.java 代码如下: package cn.edu.szu.search.extractor;import org.htmlparser.*;import org.htmlparser.util.*;import org.htmlparser.visitors.*;import org.htmlparser.nodes.*;import org.htmlparser.tags.*;import cn.edu.szu.search.page.*;import cn.edu.szu.search.uti

14、l.*;public class Extractor implements Runnable private String filename; private Parser parser; private Page page; private String encode; public void setEncode(String encode) this.encode = encode; private String combineNodeText(Node nodes) StringBuffer buffer = new StringBuffer(); for (int i = 0; i n

15、odes.length; i+) Node anode = (Node)nodesi; String line = null; if (anode instanceof TextNode) TextNode textnode = (TextNode)anode; line = textnode.getText(); else if (anode instanceof LinkTag) LinkTag linknode = (LinkTag)anode; line = linknode.getLinkText(); else if (anode instanceof Div) if (anode

16、.getChildren() != null) line = combineNodeText(anode.getChildren().toNodeArray(); else if (anode instanceof ParagraphTag) if (anode.getChildren() != null) line = combineNodeText(anode.getChildren().toNodeArray(); else if (anode instanceof Span) if (anode.getChildren() != null) line = combineNodeText

17、(anode.getChildren().toNodeArray(); else if (anode instanceof TableTag) if (anode.getChildren() != null) line = combineNodeText(anode.getChildren().toNodeArray(); else if (anode instanceof TableRow) if (anode.getChildren() != null) line = combineNodeText(anode.getChildren().toNodeArray(); else if (a

18、node instanceof TableColumn) if (anode.getChildren() != null) line = combineNodeText(anode.getChildren().toNodeArray(); if (line != null) buffer.append(line); return buffer.toString(); private String getUrl (String filename) String url = filename; url = url.replace(ProperConfig.getValue(mirror.path)

19、+/mirror, ); if (url.lastIndexOf(/) = url.length()-1) url = url.substring(0,url.length()-1); url = url.substring(1); return url; private int getScore(String url, int score) String subStr = url.split(/); score = score - (subStr.length-1); return score; private String getSummary(String context) if (co

20、ntext = null) context = ; return MD5.MD5Encode(context); public void extract(String filename) System.out.println(Message: Now extracting + filename); this.filename = filename.replace(, /); run(); if (this.page != null) PageLib.store(this.page); Override public void run() / TODO Auto-generated method

21、 stub try parser = new Parser(this.filename); parser.setEncoding(encode); HtmlPage visitor = new HtmlPage(parser); parser.visitAllNodesWith(visitor); page = new Page(); / get pages URL System.out.println(this.filename); System.out.println(getUrl(this.filename); this.page.setUrl(getUrl(this.filename)

22、; System.out.println(this.page.getUrl(); / get pages title String textInPage = visitor.getTitle(); System.out.println(textInPage); this.page.setTitle(textInPage); / testing is null or not, if null, un-extracting if (visitor.getBody() = null) this.page.setContext(null); else / if have value, extracti

23、ng this.page.setContext(combineNodeText(visitor.getBody().toNodeArray(); / count pages score this.page.setScore(getScore(this.page.getUrl(), this.page.getScore(); / count pages summary this.page.setSummary(getSummary(this.page.getContext(); catch (ParserException pe) this.page = null; pe.printStackT

24、race(); System.out.println(Continue.); e、PageLib.java文件: f、ProperConfig.java文件,代码如下: g、MD5.java文件,代码如下: h、TestExtractor.java测试类文件: (4)建立索引:1、将lucene的jar包和je分词的jar包导入到Project当中,导入方法同前边章节所示的htmlparser 的导入方法,导入成功后,再新建一个包,命名为cn.edu.scu.search.index。 2、添加一个新的类,叫作IndexBuilder。 package cn.edu.szu.search.in

25、dex;import org.apache.lucene.document.*;import org.apache.lucene.index.*;import jeasy.analysis.*;import java.io.IOException;import java.io.FileReader;import java.io.BufferedReader;import java.io.File;/ create index classpublic class IndexBuilder IndexWriter writer; public IndexBuilder(String path) t

26、hrows IOException writer = new IndexWriter(path, new MMAnalyzer(); public void build(String path) throws IOException BufferedReader reader = null; File files = new File(path).listFiles(); for(int i = 0; i files.length; i+) System.out.println(.); reader = new BufferedReader(new FileReader(filesi); Do

27、cument doc = new Document(); Field fields = new Field5; fields0 = new Field(id, String.valueOf(i), Field.Store.YES, Field.Index.NO); fields1 = new Field(url, reader.readLine(), Field.Store.YES, Field.Index.NO); fields2 = new Field(title, reader.readLine(), Field.Store.YES, Field.Index.TOKENIZED); fi

28、elds3 = new Field(score, reader.readLine(), Field.Store.YES, Field.Index.NO); fields4 = new Field(context, getBodyFile(filesi.getAbsolutePath(), reader), Field.Store.YES, Field.Index.TOKENIZED); / create Document for(int j = 0; j fields.length; j+) doc.add(fieldsj); / write Document into IndexWriter writer.addDocument(doc); writer.optimize(); writer.close(); reader.close(); private String getBodyFile(String path, BufferedReader reader) throws IOException StringBuffer buffer = new StringBuffer(); String line = reader.readLine(); while (line !

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1