基于Web搜素引擎的设计与实现.docx
《基于Web搜素引擎的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于Web搜素引擎的设计与实现.docx(20页珍藏版)》请在冰豆网上搜索。
基于Web搜素引擎的设计与实现
目录
摘要I
AbstractII
1绪论1
1.1课题研究的背景1
1.2课题研究的目的和意义1
2相关技术介绍3
2.1html、css的介绍3
2.1.1html的介绍3
2.1.2css的介绍4
2.2JavaScript的介绍6
3系统分析与实现8
3.1系统总体的设计与实现8
3.1.1系统框架8
3.1.2功能模块设计8
3.2主要功能模块的设计与实现9
3.2.1web页面下载模块9
3.2.2文档索引模块10
3.2.3文档元数据管理模块10
3.2.4查询处理模块11
3.2.5结果展现模块11
3.3搜索引擎的设计与实现11
3.3.1界面设计与实现11
3.3.2搜索引擎的实现13
4总结17
致谢18
参考文献19
基于Web搜素引擎的设计与实现
学生:
李家仁
指导教师:
饶彬
湖北科技学院计算机科学与技术学院湖北咸宁437100
摘要
本文主要介绍了一个基于Web的全文搜索引擎的设计与实现,并对该搜索引擎的基本框架设计和主要功能模块的实现作了详细介绍,随着互联网的高速发展,信息在海量的增长。
用户想要寻找到一些有用的知识非常困难,于是搜索引擎应运而生,满足广大用户的需要,现在人们已经把搜索引擎当做日常学习、工作、休闲不可缺少的一个工具。
在window系统中,使用Dreamweaver作为开发工具,论文中附上了搜索引擎的实现代码,并配上贴图,力图使本文生动,容易理解最后做了相依的试验结果。
关键字:
搜索引擎;Dreamweaver8;实现代码;
DesignandImplementationofWeb-basedSearchEngine
Student:
LiJiaRen
Supervisor:
RaoBin
SchoolofcomputerScience & Technology,HubeiUniversityofScienceandTechnology,XianningHubei437100
Abstract
ThispaperdescribesthedesignandimplementationofaWeb-basedfull-textsearchengineandtherealizationofthebasicframeworkforthedesignofthesearchengineandthemainfunctionmodulesaredescribedindetail,withtherapiddevelopmentoftheInternet,thegrowthoftheinformationinthemass.Theuserwantstofindsomeusefulknowledgeisverydifficult,sothesearchenginescameintobeingtomeettheneedsofthemajorityofusers,nowthesearchengineasaday-to-daylearning,work,leisureanindispensabletool.Inthewindowsystem,useDreamweaver8asadevelopmenttool,thepaperattachedtotheimplementationofthecodeofthesearchengine,andaccompaniedbyamap,tryingtomakethislively,easytounderstandthefinaltestresultsdependent.
Keywords:
SearchEngine;Dreamweaver8;Implementationcode
1绪论
1.1课题研究的背景
在信息大爆炸时代下,全球信息量每隔20个月就增加一倍,而这个增长速度还会进一步增加,信息增长呈现速度惊人,来源广泛,种类繁多,数量巨大的状态。
2006年制造、复制出的数字信息量共计1610亿GB,开启了前所未有的信息增长时期。
这些数字信息大约是现有书籍所含信息的300万倍,如果将书籍排列起来,总长度为地球到太阳距离(约1.5亿公里)的12倍。
面对极度膨胀的信息量,人们受到“信息爆炸”、“混沌信息空间(InformationChaoticSpace)”和“数据过剩(DataGult)”的巨大压力。
这种爆发性增长将改变机构和IT专业人员的工作方式以及消费者使用信息的方式,因此,如何从海量的信息得到有用的信息是大家关注的焦点。
从上世纪90年代互联网开始兴起,人们在方便的获得网上信息的同时,也越来越难搜索到对自己有价值的信息。
显然,通过浏览一个又一个的网页寻找所需要的信息已经不太现实,于是大多数人依赖搜索引擎来帮助自己来获得有用的信息,因此搜索引擎成为继电子邮件之后最典型的WEB应用。
早在WEB出现以前,互联网上就已经存在很多旨在让人们共享的信息资源了。
那些资源当时主要存在于各种允许匿名访问的FTP站点(anonymousftp),内容以学术技术报告、研究性软件居多,它们以计算机文件的形式存在,文字材料的编码通常是PostScript或者纯文本。
为了便于人们在分散的FTP资源中找到所需的东西,1990年出现了一个软件Archie,它可以说是所有搜索引擎的始祖。
1.2课题研究的目的和意义
随着网络的快速发展,XX和Google这些比较流行的搜索引擎能够满足了普通用户内容的搜索和资源的定位。
但是在访问一些特定网站的时候,网站资源比较繁杂,于是用户依靠自己去查找定位一些资源所要花费的时间较长。
同时企业或者学校内部的资源文档种类繁多,数量也比较大,企业和学校从这些文档中提取出自己需要资源需要花费很长时间。
伴随着Internet技术的飞跃发展,Web技术已经不再局限于单纯地提供娱乐休闲,而是逐渐成为人们搜索信息的一种工具。
网络上存在着大量的信息源,可以让人们花费最短的时间得到最想要的信息。
然而说到搜索,一个好的搜索引擎是必不可少的。
好的搜索引擎需要有高准确率和高效率。
因此,本系统设计的目的就是,希望设计一个搜索平台。
可以很容易的扩展到企业或者学校内部,实现企业内部非结构化文档的全文内容搜索,减少企业定位资源的时间。
同样也可以很容的扩展到网站内部,实现整个站点内容搜索,帮助用户在浏览器该网站的时候快速定位资源。
2相关技术介绍
2.1html、css的介绍
2.1.1html的介绍
HTML指的是超文本标记语言(HyperTextMarkupLanguage),它不是一种编程语言,而是一种标记语言。
HTML使用标签来描述网页,HTML标签是由尖括号包围的关键词,比如。
标签通常是成对出现的,比如和标签对中的第一个标签是开始标签,第二个标签是结束标签。
HTML文档和HTML元素是通过HTML标签进行标记的,由开始标签和结束标签组成的,某些HTML元素没有结束标签,比如
。
HTML元素指的是从开始标签(starttag)到结束标签(endtag)的所有代码。
开始标签常被称为开放标签(openingtag),结束标签常称为闭合标签(closingtag)。
HTML元素以开始标签起始,以结束标签终止,元素的内容是开始标签与结束标签之间的内容。
某些HTML元素具有空内容(emptycontent),空元素在开始标签中进行关闭(以开始标签的结束而结束)。
大多数HTML元素可拥有属性。
大多数HTML元素可以嵌套(可以包含其他HTML元素)。
HTML文档由嵌套的HTML元素构成。
元素定义了整个HTML文档。
这个元素拥有一个开始标签,以及一个结束标签。
即使您忘记了使用结束标签,大多数浏览器也会正确地显示HTML但不要依赖这种做法。
忘记使用结束标签会产生不可预料的结果或错误。
未来的HTML版本不允许省略结束标签。
空元素是在开始标签中关闭的。
就是没有关闭标签的空元素(
标签定义换行)。
在XHTML、XML以及未来版本的HTML中,所有元素必须被关闭。
在开始标签中添加斜杠,比如
,是关闭空元素的正确方法,HTML、XHTML和XML都接受这种方式。
即使
在所有浏览器中都是有效的,但使用
其实是更长远的保障。
HTML标签对大小写不敏感:
等同于
。
许多网站都使用大写的HTML标签。
W3School使用的是小写标签,因为万维网联盟(W3C)在HTML4中推荐使用小写,而在未来(X)HTML版本中强制使用小写。
标题(Heading)是通过
-等标签进行定义的。
定义最大的标题。
定义最小的标题。
浏览器会自动地在标题的前后添加空行。
默认情况下,HTML会自动地在块级元素前后添加一个额外的空行,比如段落、标题元素前后。
请确保将HTMLheading标签只用于标题。
不要仅仅是为了产生粗体或大号的文本而使用标题。
搜索引擎使用标题为您的网页的结构和内容编制索引。
因为用户可以通过标题来快速浏览您的网页,所以用标题来呈现文档结构是很重要的。
应该将h1用作主标题(最重要的),其后是h2(次重要的),再其次是h3,以此类推。
2.1.2css的介绍
随着Internet的迅猛发展,HTML被广泛应用,上网的人们当然希望网页做得漂亮些,因此HTML排版和界面效果的局限性日益暴露出来。
为了解决这个问题,人们也走了不少弯路,用了一些不好的方法,比如给HTML增加很多的属性结果将代码变得很臃肿,将文本变成图片,过多利用Table来排版,用空白的图片表示白色的空间等。
直到CSS出现。
CSS可算是网页设计的一个突破,它解决了网页界面排版的难题。
可以这么说,HTML的Tag主要是定义网页的内容(Content),而CSS决定这些网页内容如何显示(Layout)。
CSS的英文是CascadingStyleSheets,中文可以翻译成串联式样式表。
CSS按其位置可以分成三种:
1 内嵌样式(InlineStyle)
2 内部样式表(InternalStyleSheet)
3 外部样式表(ExternalStyleSheet)
内嵌样式(InlineStyle)
InlineStyle是写在Tag里面的。
内嵌样式只对所在的Tag有效。
20pt;
color:
red">这个Style定义里面的文字是20pt字体,字体颜色是红色
显示示例:
内嵌式样式(InlineStyle)20pt;
color:
red">这个内嵌样式(InlineStyle)定义段落里面的文字是20pt字体,字体颜色是红色。
这段文字没有使用内嵌样式。
内部样式表(InternalStyleSheet)
内部样式表是写在Html的
里面的。
内部样式表只对所在的网页有效。
H1.mylayout{border-width:
1;
border:
solid;text-align:
center;
color:
red}
这个标题使用了Style。
这个标题没有使用Style。
显示示例:
h1.mylayout{border-width:
1;
border:
solid;text-align:
center;color:
red}
这个标题使用了Style。
这个标题没有使用Style。
外部样式表(ExternalStyleSheet)
将样式(Styles)写在一个以.css为后缀的CSS文件里,然后在每个需要用到这些样式(Styles)的网页里引用这个CSS文件。
比如可以用文本编辑器(NotePad)建立一个叫home的文件,文件后缀不要用.txt,改成.css。
文件内容如下:
h1.mylayout{border-width:
1;
border:
solid;text-align:
center;color:
red}
然后你建立一个网页,代码如下:
href="../asdocs/css_tutorials/home.css"rel="stylesheet"
type="text/css">
这个标题使用了Style。
这个标题没有使用Style。
显示示例:
css"rel="stylesheet"
type="text/css">
这个标题使用了Style。
这个标题没有使用Style。
2.2JavaScript的介绍
JavaScript是一种基于对象(Object)和事件驱动(EventDriven)并具有安全性能的脚本语言。
使用它的目的是与HTML超文本标记语言、Java脚本语言(Java小程序)一起实现在一个Web页面中链接多个对象,与Web客户交互作用。
从而可以开发客户端的应用程序等。
它是通过嵌入或调入在标准的HTML语言中实现的。
它的出现弥补了HTML语言的缺陷,它是Java与HTML折衷的选择,具有以下几个基本特点:
1.是一种脚本编写语言
JavaScript是一种脚本语言,它采用小程序段的方式实现编程。
像其它脚本语言一样,JavaScript同样已是一种解释性语言,它提供了一个易的开发过程。
它的基本结构形式与C、C++、VB、Delphi十分类似。
但它不像这些语言一样,需要先编译,而是在程序运行过程中被逐行地解释。
它与HTML标识结合在一起,从而方便用户的使用操作。
2.基于对象的语言
JavaScript是一种基于对象的语言,同时以可以看作一种面向对象的。
这意味着它能运用自己已经创建的对象。
因此,许多功能可以来自于脚本环境中对象的方法与脚本的相互作用。
3.简单性
JavaScript的简单性主要体现在:
首先它是一种基于Java基本语句和控制流之上的简单而紧凑的设计,从而对于学习Java是一种非常好的过渡。
其次它的变量类型是采用弱类型,并未使用严格的数据类型。
4.安全性
JavaScript是一种安全性语言,它不允许访问本地的硬盘,并不能将数据存入到服务器上,不允许对网络文档进行修改和删除,只能通过浏览器实现信息浏览或动态交互。
从而有效地防止数据的丢失。
5.动态性的
JavaScript是动态的,它可以直接对用户或客户输入做出响应,无须经过Web服务程序。
它对用户的反映响应,是采用以事件驱动的方式进行的。
所谓事件驱动,就是指在主页(HomePage)中执行了某种操作所产生的动作,就称为“事件”(Event)。
比如按下鼠标、移动窗口、选择菜单等都可以视为事件。
当事件发生后,可能会引起相应的事件响应。
6.跨平台性
JavaScript是依赖于浏览器本身,与操作环境无关,只要能运行浏览器的计算机,并支持JavaScript的浏览器就可正确执行。
从而实现了“编写一次,走遍天下”的梦想。
实际上JavaScript最杰出之处在于可以用很小的程序做大量的事。
无须有高性能的电脑,软件仅需一个字处理软件及一浏览器,无须WEB服务器通道,通过自己的电脑即可完成所有的事情。
综合所述JavaScript是一种新的描述语言,它可以被箝入到HTML的文件之中。
JavaScript语言可以做到回应使用者的需求事件(如:
form的输入),而不用任何的网路来回传输资料,所以当一位使用者输入一项资料时,它不用经过传给伺服端(server)处理,再传回来的过程,而直接可以被客户端(client)的应用程式所处理。
JavaScript和Java很类似,但到底并不一样!
Java是一种比JavaScript更复杂许多的程式语言,而JavaScript则是相当容易了解的语言。
JavaScript创作者可以不那麽注重程式技巧,所以许多Java的特性在JavaScript中并不支援。
3系统分析与实现
3.1系统总体的设计与实现
3.1.1系统框架
该系统由5个部分构成,第1部分的是预处理部分,它的主要功能是进行Web页面的下载,并对下载下来的文档进行文档格式转换,提取出其中的文字信息,以利于后续的处理。
第2部分的是文档处理部分,其主要功能有3个:
(1)将经过预处理之后的文档信息进行索引并存放到索引库中;
(2)提取出文档的元信息添加到元数据库中;(3)将文档的正文信息添加到正文库中。
第3部分是检索服务部分,它提供了信息检索和检索结果展现的功能,同时也还可以对检索参数进行设置。
第4部分是系统管理部分,主要提供了一些有关系统运行参数的设置,用户管理等功能,是本搜索引擎系统的一个辅助部分。
最后一个部分是库文件部分,系统有多个库,其中包括索引库、正文库、元数据库,还包括其它一些辅助库,后面会对其中的部分库的组织作详细的介绍。
系统的功能结构图如图3.1所示:
图3.1系统的功能结构图
3.1.2功能模块设计
从功能上来讲,本系统由多个模块组成。
首先,预处理部分主要由两个功能模块组成:
Web页面下载模块和文档格式转换格式两个模块。
文档处理部分由两个模块组成:
文档索引模块和文档元数据管理模块,其中文档的正文管理功能包含在文档元数据管理模块中。
系统管理部分包括用户管理模块、运行参数管理模块等多个功能模块。
检索服务部分主要由查询处理模块和结果展现模块组成。
功能模块结构设计图如图3.2所示:
图3.2功能模块结构设计图
3.2主要功能模块的设计与实现
3.2.1web页面下载模块
Web页面下载模块相当于搜索引擎中的网络Crawler。
它的主要功能是从网络上收集需要处理的各种信息并做一些预处理,然后将这些信息提交给其他的功能模块。
它的基本算法是由一组种子URL开始,重复以下过程:
从种子URL集中取得一个URL,确定相应主机的IP地址,下载相应的文档,对于非重复的文档提取出包含在其中的链接,对于提取出来的链接,如果是相对链接,就将其转化为绝对链接。
然后对链接按一定策略进行过滤,通常包括检验该链接是否进行过下载以及对链接是否需要进行下载,如果需要下载且没有被下载过,就将其加入到URL集中,而下载下来的页面以某种方式存放到文件库中。
Web页面下载工作流程图如图3.3所示:
图3.3Web页面下载工作流程图
3.2.2文档索引模块
该模块负责将下载下来的页面进行处理,并将这些文档以便于有效查找的数据结构进行组织。
因为查询模块的效率直接决定了整个搜索引擎能否实现快速响应,而查询的速度又将取决于索引的组织情况,因此必须对索引进行高效组织以实现整个搜索引擎的高效率。
全文检索中索引的组织方法有两种,即正排表和倒排表[1]。
正排表是以文档的ID为关键字,表中记录项记录文档中每个字的位置信息,查找时扫描表中每个文档中字的信息直到找出所有包含查询关键字的文档。
这种组织方法在建立索引的时候结构比较简单,建立比较方便且易于维护,但是在查询的时候需对所有的文档进行扫描以确保没有遗漏,这样就使得检索时间大大延长,检索效率低下。
3.2.3文档元数据管理模块
文档元数据就是关于文档的一些说明信息,例如文档的标题、作者以及文档发布的时间等都是元数据,这些信息可以在当文档被检索出来时,给出文档的一些辅助信息,帮助检索用户从检索结果中更快地得到自己所需的信息。
除了提供一些辅助信息之外,通常我们可以在进行检索时设置一些检索结果的元信息必须满足的条件。
该模块的主要功能就是将文档的元数据以某种方式进行组织,以便快速地检索,同时对于更新和删除操作也有很好的适应性。
因为文档元数据相对于文档正文来说是比较规整的,而且每个文档都有这些元数据,因此我们给每个文档的元数据分配了一块同样大小的数据块,便于以后对元数据进行更新和删除操作。
当搜索引擎进行索引的页面达到一定的数量之后,文档的元数据信息量也会非常大,为了便于更好地进行查找,除了文档的元数据之外,我们另外建一个索引表,记录每个文档的标识及指向其所在元数据文件中出现的起始位置的指针。
我们可以把这个索引表的信息存放在内存中,对于以后查找时可以首先在内存中很快得到文档的元数据在元数据文件中存放的位置,然后通过文件指针操作,迅速得到文档的元数据,这样就可以提高查询的效率,对于整个搜索引擎的相应时间都有很大的提高。
为了更好地进行元数据的删除和更新操作,我们还维护了一个链表,用来存放已删除文档的元数据在元数据文件中的存放位置,这个链表我们也把它放在内存中。
当文档被删除的时候,我们就把它的元数据存放的位置加入到该链表中。
以后添加新文档的时候,我们首先查看该链表,如果链表不为空,那么我们就把新的文档的元数据存放在由该链表中节点所指定的位置上,然后从链表中删除该节点。
因为所有已删除了的元数据的存放位置都已经记录在删除链表中,这样元数据文件就不会因为删除链表中,因为删除而产生空隙,所以元数据文件也不要定期整理。
3.2.4查询处理模块
该模块负责从用户的输入中得到用户的查询请求,并将请求转换成系统所要求的请求格式,然后在索引库中进行查找,得到满足要求的文档并提交给后面的结果展现模块。
在本系统中,我们实现了最基本的基于单个关键字的全文检索以及多关键字逻辑运算组合查询,包括与、或、差操作。
在基于关键字的全文检索的基础上,我们扩充了系统的全文检索功能,实现了基于同义词的检索。
在系统的后台我们维护了一个同义词库,当用户提交一个或多个查询关键字之后,首先就到同义表中将其所有的同义词取出来,然后再进行基于这些词的全文检索,这样就可以大大提高查询的查全率。
但是随着时间的变化,同义词也是不断变化的,因此系统管理中还有一个同义词管理的功能。
在本系统中我们还添加了一个高级检索的功能。
在进行高级检索时,用户的查询请求中增加了一些额外的信息,例如文档的时间以及作者等。
通过高级检索,