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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(毕业论文搜索引擎的研究与实现Word文档下载推荐.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

毕业论文搜索引擎的研究与实现Word文档下载推荐.docx

1、每台微机运行多个爬虫程序搜集网页的峰值速度是每秒100个网页,平均速度是每秒48.5个网页,一天可以搜集超过4,000,000网页搜索引擎一词在国外因特网领域被广泛使用,然而他的含义却不尽一样。在美国搜索引擎通常指的是基于因特网的搜索引擎,他们通过网络机器人程序收集上千万到几亿个网页,并且每一个词都被搜索引擎索引,也就是我们说的全文检索。著名的因特网搜索引擎包括First Search、Google、HotBot等。在中国,搜索引擎通常指基于目录的搜索服务或是特定的搜索服务,本人这里研究的是基于因特网的搜索技术。第二章 搜索引擎的结构2.1系统概述 搜索引擎是根据用户的查询请求,按照一定算法从

2、索引数据中查找信息返回给用户。为了保证用户查找信息的精度和新鲜度,搜索引擎需要建立并维护一个庞大的索引数据库。一般的搜索引擎由网络机器人程序、索引与搜索程序、索引数据库等部分组成。系统结构图2.2搜索引擎的构成2.2.1网络机器人 网络机器人也称为“网络蜘蛛”(Spider),是一个功能很强的WEB扫描程序。它可以在扫描WEB页面的同时检索其的超并加入扫描队列等待以后扫描。因为WEB中广泛使用超,所以一个Spider程序理论上可以访问整个WEB页面。 为了保证网络机器人遍历信息的广度和深度需要设定一些重要的并制定相关的扫描策略。2.2.2索引与搜索 网络机器人将遍历得到的页面存放在临时数据库中

3、,如果通过SQL直接查询信息速度将会难以忍受。为了提高检索效率,需要建立索引,按照倒排文件的格式存放。如果索引不与时跟新的话,用户用搜索引擎也不能检索到。 用户输入搜索条件后搜索程序将通过索引数据库进行检索然后把符合查询要求的数据库按照一定的策略进行分级排列并且返回给用户。2.2.3Web服务器客户一般通过浏览器进行查询,这就需要系统提供Web服务器并且与索引数据库进行连接。客户在浏览器中输入查询条件,Web服务器接收到客户的查询条件后在索引数据库中进行查询、排列然后返回给客户端。2.3搜索引擎的主要指标与分析 搜索引擎的主要指标有响应时间、召回率、准确率、相关度等。这些指标决定了搜索引擎的技

4、术指标。搜索引擎的技术指标决定了搜索引擎的评价指标。好的搜索引擎应该是具有较快的反应速度和高召回率、准确率的,当然这些都需要搜索引擎技术指标来保障。召回率:一次搜索结果中符合用户要求的数目与用户查询相关信息的总数之比准确率:一次搜索结果中符合用户要求的数目与该次搜索结果总数之比相关度:用户查询与搜索结果之间相似度的一种度量精确度:对搜索结果的排序分级能力和对垃圾网页的抗干扰能力2.4小节 以上对基于因特网的搜索引擎结构和性能指标进行了分析,本人在这些研究的基础上利用JavaTM技术和一些Open Source工具实现了一个简单的搜索引擎新闻搜索引擎。在接下来的几章里将会就本人的设计进行详细的分

5、析。第三章 网络机器人3.1什么是网络机器人网络机器人又称为Spider程序,是一种专业的Bot程序。用于查找大量的Web页面。它从一个简单的Web页面上开始执行,然后通过其超在访问其他页面,如此反复理论上可以扫描互联网上的所有页面。基于因特网的搜索引擎是Spider的最早应用。例如搜索巨头Google公司,就利用网络机器人程序来遍历Web站点,以创建并维护这些大型数据库。网络机器人还可以通过扫描Web站点的主页来得到这个站点的文件清单和层次机构。还可以扫描出中断的超和拼写错误等。3.2网络机器人的结构分析Internet是建立在很多相关协议基础上的,而更复杂的协议又建立在系统层协议之上。We

6、b就是建立在(Hypertext Transfer Protocol)协议基础上,而 又是建立在TCP/IP ( Transmission Control Protocol / Internet Protocol ) 协议之上,它同时也是一种Socket协议。所以网络机器人本质上是一种基于Socket的网络程序。3.2.1如何解析HTML因为Web中的信息都是建立在HTML协议之上的,所以网络机器人在检索网页时的第一个问题就是如何解析HTML。在解决如何解析之前,先来介绍下HTML中的几种数据。文本:除了脚本和标签之外的所有数据注释:程序员留下的说明文字,对用户是不可见的简单标签:由单个表示的

7、HTML标签开始标签和结束标签:用来控制所包含的HTML代码我们在进行解析的时候不用关心所有的标签,只需要对其中几种重要的进行解析即可。超连接标签超连接定义了WWW通过Internet文档的功能。他们的主要目的是使用户能够任意迁移到新的页面,这正是网络机器人最关心的标签。图像映射标签图像映射是另一种非常重要的标签。它可以让用户通过点击图片来迁移到新的页面中。表单标签表单是Web页面中可以输入数据的单元。许多站点让用户填写数据然后通过点击按钮来提交容,这就是表单的典型应用。表格标签表格是HTML的构成部分,通常用来格式化存放、显示数据。我们在具体解析这些HTMl标签有两种方法:通过JavaTM中

8、的Swing类来解析或者通过Bot包中的HTMLPage类来解析,本人在实际编程中采用后者。Bot包中的HTMLPage类用来从指定URL中读取数据并检索出有用的信息。下面给出该类几种重要的方法。HTMLPage构造函数构造对象并指定用于通讯的 对象Public HTMLPage( )GetForms方法获取最后一次调用Open方法检索到的表单清单 Public Vector getForms()Get 方法获取发送给构造函数的 对象 Public get ()GetImage方法获取指定页面的图片清单 Public Vector getImage()GetLinks方法获取指定页面的连接清单

9、 Public Vector getLinks()Open方法打开一个页面并读入该页面,若指定了回调对象则给出所有该对象数据 Public void open(String url,HTMLEditorKit.ParserCallback a)3.2.2 Spider程序结构网络机器人必须从一个网页迁移到另一个网页,所以必须找到该页面上的超连接。程序首先解析网页的HTML代码,查找该页面的超连接然后通过递归和非递归两种结构来实现Spider程序。递归结构递归是在一个方法中调用自己本身的程序设计技术。虽然比较容易实现但耗费存且不能使用多线程技术,故不适合大型项目。非递归结构这种方法使用队列的数据

10、结构,当Spider程序发现超连接后并不调用自己本身而是把超连接加入到等待队列中。当Spider程序扫描完当前页面后会根据制定的策略访问队列中的下一个超连接地址。虽然这里只描述了一个队列,但在实际编程中用到了四个队列,他们每个队列都保存着同一处理状态的URL。等待队列在这个队列中,URL等待被Spider程序处理。新发现的URL也被加入到这个队列中处理队列当Spider程序开始处理时,他们被送到这个队列中错误队列如果在解析网页时出错,URL将被送到这里。该队列中的URL不能被移入其他队列中完成队列如果解析网页没有出错,URL将被送到这里。该队列中的URL不能被移入其它队列中在同一时间URL只能

11、在一个队列中,我们把它称为URL的状态。以上的图表示了队列的变化过程,在这个过程中,当一个URL被加入到等待队列中时Spider程序就会开始运行。只要等待队列中有一个网页或Spider程序正在处理一个网页,程序就会继续他的工作。当等待队列为空并且当前没有任何网页时,Spider程序就会停止它的工作。3.2.3如何构造Spider程序在构造Spider程序之前我们先了解下程序的各个部分是如何共同工作的。以与如何对这个程序进行扩展。流程图如下所示:IspiderReportable接口这是一个必须实现的接口,可以通过回调函数接受Spider所遇到的页面。接口定义了Spider向他的控制者发送的几个

12、事件。通过提供对每个事件的处理程序,可以创建各种Spider程序。下面是他的接口声明:publicinterface IspiderReportablepublic boolean foundInternalLink(String url);public boolean foundExternalLink(String url);public boolean foundOtherLink(String url);public void processPage( page);public void completePage( page,boolean error);public boolean

13、getRemoveQuery();public void SpiderComplete();3.2.4如何提高程序性能Internet中拥有海量的Web页面,如果开发出高效的Spider程序是非常重要的。下面就来介绍下几种提高性能的技术:Java的多线程技术线程是通过程序的一条执行路线。多线程是一个程序同时运行多个任务的能力。它是在一个程序的部进行分工合作。优化程序的通常方法是确定瓶颈并改进他。瓶颈是一个程序中最慢的部分,他限制了其他任务的运行。据个例子说明:一个Spider程序需要下载十个页面,要完成这一任务,程序必须向服务器发出请求然后接受这些网页。当程序等待响应的时候其他任务不能执行,这

14、就影响了程序的效率。如果用多线程技术可以让这些网页的等待时间合在一起,不用互相影响,这就可以极大的改进程序性能。数据库技术当Spider程序访问一个大型Web站点时,必须使用一种有效的方法来存储站点队列。这些队列管理Spider程序必须维护大型网页的列表。如果把他们放在存中将会是性能下降,所以我们可以把他们放在数据库中减少系统资源的消耗。3.2.5网络机器人的代码分析程序结构图如下:程序代码实现如下:package news;/* * 新闻搜索引擎*计算机99630 晨 * 版本 1.0 */import .heaton.bot. ;import .heaton.bot. Socket;imp

15、ort .heaton.bot.ISpiderReportable;import .heaton.bot.IWorkloadStorable;import .heaton.bot.Spider;import .heaton.bot.SpiderInternalWorkload; * 构造一个Bot程序publicclass Searcherimplements ISpiderReportable public static void main(String args) throws Exception IWorkloadStorable wl = new SpiderInternalWorkl

16、oad(); Searcher _searcher = new Searcher(); Spider _spider = new Spider(_searcher, 127.0.0.1/news.htm, new Socket(), 100, wl); _spider.setMaxBody(100); _spider.start(); / 发现部连接时调用,url表示程序发现的URL,若返回true则加入作业中,否则不加入。publicboolean foundInternalLink(String url) returnfalse;/ 发现外部连接时调用,url表示程序所发现的URL,若返回

17、true则把加入作业中,否则不加入。public boolean foundExternalLink(String url) return false;/ 当发现其他连接时调用这个方法。其他连接指的是非HTML网页,可能是E-mail或者FTP public boolean foundOtherLink(String url) / 用于处理网页,这是Spider程序要完成的实际工作。public void processPage( ) System.out.println(扫描网页: + .getURL(); new HTMLParse( ).start();/ 用来请求一个被处理的网页。pu

18、blic void completePage( , boolean error) / 由Spider程序调用以确定查询字符串是否应删除。如果队列中的字符串应当删除,方法返回真。publicboolean getRemoveQuery() return true;/ 当Spider程序没有剩余的工作时调用这个方法。 public void spiderComplete() 3.3小节在本章中,首先介绍了网络机器人的基本概念,然后具体分析了Spider程序的结构和功能。在最后还结合具体代码进行了详细说明。本人在编程中运用了JavaTM技术,主要涉与到了net和io两个包。此外还用了第三方开发包Bo

19、t(由Jeff Heaton提供的开发包)。第四章 基于lucene的索引与搜索4.1什么是Lucene全文检索Lucene是Jakarta Apache的开源项目。它是一个用Java写的全文索引引擎工具包,可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。4.2 Lucene的原理分析4.2.1全文检索的实现机制Lucene的API接口设计的比较通用,输入输出结构都很像数据库的表=记录=字段,所以很多传统的应用的文件、数据库等都可以比较方便的映射到Lucene的存储结构和接口中。总体上看:可以先把Lucene当成一个支持全文索引的数据库系统。索引数据源:doc(field1,fie

20、ld2.) doc(field1,field2.) indexer / _ | Lucene Index| - / searcher 结果输出:Hits(doc(field1,field2) doc(field1.)Document:一个需要进行索引的“单元”,一个Document由多个字段组成Field:字段Hits:查询结果集,由匹配的Document组成4.2.2 Lucene的索引效率通常书籍后面常常附关键词索引表(比如:12, 34页,:3,77页),它能够帮助读者比较快地找到相关容的页码。而数据库索引能够大大提高查询的速度原理也是一样,想像一下通过书后面的索引查找的速度要比一页一页

21、地翻容高多少倍而索引之所以效率高,另外一个原因是它是排好序的。对于检索系统来说核心是一个排序问题。由于数据库索引不是为全文索引设计的,因此,使用like %keyword%时,数据库索引是不起作用的,在使用like查询时,搜索过程又变成类似于一页页翻书的遍历过程了,所以对于含有模糊查询的数据库服务来说,LIKE对性能的危害是极大的。如果是需要对多个关键词进行模糊匹配:like%keyword1% and like %keyword2% .其效率也就可想而知了。所以建立一个高效检索系统的关键是建立一个类似于科技索引一样的反向索引机制,将数据源(比如多篇文章)排序顺序存储的同时,有另外一个排好序的

22、关键词列表,用于存储关键词=文章映射关系,利用这样的映射关系索引:关键词=出现关键词的文章编号,出现次数(甚至包括位置:起始偏移量,结束偏移量),出现频率,检索过程就是把模糊查询变成多个可以利用索引的精确查询的逻辑组合的过程。从而大大提高了多关键词查询的效率,所以,全文检索问题归结到最后是一个排序问题。由此可以看出模糊查询相对数据库的精确查询是一个非常不确定的问题,这也是大部分数据库对全文检索支持有限的原因。Lucene最核心的特征是通过特殊的索引结构实现了传统数据库不擅长的全文索引机制,并提供了扩展接口,以方便针对不同应用的定制。可以通过一下表格对比一下数据库的模糊查询:Lucene全文索引

23、引擎数据库索引将数据源中的数据都通过全文索引一立反向索引对于LIKE查询来说,数据传统的索引是根本用不上的。数据需要逐个便利记录进行GREP式的模糊匹配,比有索引的搜索速度要有多个数量级的下降。匹配效果通过词元(term)进行匹配,通过语言分析接口的实现,可以实现对中文等非英语的支持。使用:like %net% 会把netherlands也匹配出来,多个关键词的模糊匹配:使用like %net%就不能匹配词序颠倒的.xxx.匹配度有匹配度算法,将匹配程度(相似度)比较高的结果排在前面。没有匹配程度的控制:比如有记录中net出现5词和出现1次的,结果是一样的。结果输出通过特别的算法,将最匹配度最

24、高的头100条结果输出,结果集是缓冲式的小批量读取的。返回所有的结果集,在匹配条目非常多的时候(比如上万条)需要大量的存存放这些临时结果集。可定制性通过不同的语言分析接口实现,可以方便的定制出符合应用需要的索引规则(包括对中文的支持)没有接口或接口复杂,无法定制结论高负载的模糊查询应用,需要负责的模糊查询的规则,索引的资料量比较大使用率低,模糊匹配规则简单或者需要模糊查询的资料量少4.2.3 中文切分词机制对于中文来说,全文索引首先还要解决一个语言分析的问题,对于英文来说,语句中单词之间是天然通过空格分开的,但亚洲语言的中日文语句中的字是一个字挨一个,所有,首先要把语句中按“词”进行索引的话,这个词如何切分出来就是一个很大的问题。首先,肯定不能用单个字符作(si-gram)为索引单元,否则查“”时,不能让含有“海上”也匹配。但一句话:“天安门”,计算机如何按照中文的语言习惯进行切分呢?“ 天安门” 还是“北 京 天安门”?让计算机能够按照语言习惯进行切分,往往需要机器有一个比较丰富的词库才能够比较准确的识别出语句中的单词。另外一个解决的办法是采用自动切分算法:将单词按照2元语法(bigram)方式切分出来,比如:天安门 = 京天 天安 安门。这样,在查询的时候,无论是查询

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

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