搜索模块的研究与开发 毕业设计论文.docx

上传人:b****4 文档编号:11588755 上传时间:2023-03-19 格式:DOCX 页数:15 大小:229.94KB
下载 相关 举报
搜索模块的研究与开发 毕业设计论文.docx_第1页
第1页 / 共15页
搜索模块的研究与开发 毕业设计论文.docx_第2页
第2页 / 共15页
搜索模块的研究与开发 毕业设计论文.docx_第3页
第3页 / 共15页
搜索模块的研究与开发 毕业设计论文.docx_第4页
第4页 / 共15页
搜索模块的研究与开发 毕业设计论文.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

搜索模块的研究与开发 毕业设计论文.docx

《搜索模块的研究与开发 毕业设计论文.docx》由会员分享,可在线阅读,更多相关《搜索模块的研究与开发 毕业设计论文.docx(15页珍藏版)》请在冰豆网上搜索。

搜索模块的研究与开发 毕业设计论文.docx

搜索模块的研究与开发毕业设计论文

XXXXXXX学院

专科毕业论文

 

题目搜索模块的研究与开发

学生姓名XXXXX

专业班级XXXXXXXX

学号XXXXXXXXXX

院(系)XXXXXXXXXXXXXX

指导老师XXX

完成时间20XX年X月XX日

搜索模块的研究与开发

摘要

企业在激烈的竞争中如果不能或不会利用互联网的话,那是会被迟早淘汰掉的。

企业利用互联网的一个实例就是网站。

个人如果想在互联网展现自己的话也是频繁使用个人网站形式。

[网站相对于应用程序的一个主要的好处就是部署简单,升级方便,制作成本低,PS,你不会指望用户想看一条新闻而下一个客户端软件吧。

搜索在当今互联网时代已成为不可或缺的一部分,它就相当于一个目录,可以方便的导航到自己喜欢的部分。

如果本论文没有目录的话,假如你想找这篇论文内的核心算法部分,你就需要拖着长长的滚动条上下来回翻动,你会感慨如果有一个目录来导航该多好啊。

更进一步,如果有一个班的论文要看,如果想要找到里面的一篇某某人写的文章,需要一篇一篇打开看吗?

如果有1万篇文章呢?

搜索尤其适合于这种内容庞大,又有其特点的方面。

互联网是一个神奇的东西,世界上第一个网站由蒂姆·伯纳斯-李创建于1991年8月6日[1],在2011年3月的调查中,Netcraft在侦测时收到了298,002,705个站点的反馈信息。

我国域名总数为3,388,575个。

2010年末全国总人口数为134100万人[2],中国网民规模预计为4.77亿,互联网普及率为35.6%,截至2011年3月28日,中国大陆IPv4地址数量约为3.18亿个,居全球第二位。

就在2011年2月3日,全球互联网数字分配机构(IANA)正式宣布已经将IPv4地址库剩余的5个A地址平均分配给包括APNIC在内的五个地区性互联网注册管理机构(RIR),标志全球现有的IPv4地址资源已经分配完毕,流传多年的“IPv4地址耗尽”预言终于成真[3]。

关键字搜索模块/导航与搜索/C#

目录

摘要I

目录II

1搜索引擎简介1

1.1搜索引擎发展史1

1.2搜索引擎的工作原理2

2程序设计3

2.1程序原理3

2.2结构设计4

2.2.1数据类结构5

2.2.2逻辑类结构6

2.2.3接口类结构8

3接口文档9

3.1接口9

3.2事件10

结束语11

致谢12

参考文献13

附录14

1搜索引擎简介

1.1搜索引擎发展史

1990年初当时万维网还未出现,为了查询散布在各个分散的主机中的文件,曾有过Archie、Gopher等搜索工具,随着互联网的迅速发展,基于HTTP访问的web技术的迅速普及,他们就不再能适应用户的需要。

在1994年1月,第一个既可搜索又可浏览的分类目录EINetGalaxy(TradewaveGalaxy)上线,它还支持Gopher和Telnet搜索。

同年4月,Yahoo目录诞生,随着访问量和收录链接数的增长,开始支持简单的数据库查询。

这就是我们说的早期的目录导航系统,他们的缺点是网站收录/更新都要靠人工维护,所以在信息量剧增的条件下,就不是非常受用了。

1994年7月,Lycos推出了基于robot的数据发掘技术,并支持搜索结果相关性排序,并且他第一个开始在搜索结果中使用了网页自动摘要。

Infoseek也是同时期的一个重要代表,他们是搜索引擎史上一个重要的进步。

1995年,一种新的搜索引擎工具出现了——中介搜索引擎(MetaSearchEngine)或称为元搜索引擎,第一个中介搜索引擎是华盛顿大学的学生开发的Metacrawler。

用户只需提交一次搜索请求,由中介搜索引擎负责转换处理后提交给多个预先选定的独立搜索引擎,并将从各独立搜索引擎返回的所有查询结果,集中起来处理后再返回给用户。

1995年12月才登场亮相的AltaVista推出了大量的创新功能使它迅速到达当时搜索引擎的顶峰,它第一个支持自然语言搜索的搜索引擎,具备了基于网页内容分析,智能处理的能力,第一个实现高级搜索语法的搜索引擎(如AND、OR、NOT等),同时AltaVista还支持搜索新闻组,搜索图片等具有划时代意义的功能。

同时期还有inktomi、HotBot等搜索引擎。

1997年8月Northernlight公司正式推出搜索引擎,它第一个支持对搜索结果进行简单的自动分类,也是当时拥有最大数据库的搜索引擎之一。

1998年10月,Google诞生。

它是目前世界上最流行的搜索引擎之一,具备很多独特而且优秀的功能,并且在界面等实现了革命性创新。

1999年5月,Fast(Alltheweb)公司发布了自己的搜索引擎AllTheWeb,它的网页搜索可利用ODP自动分类,支持Flash和pdf搜索,支持多语言搜索,还提供新闻搜索、图像搜索、视频、MP3、和FTP搜索,拥有极其强大的高级搜索功能。

它曾经是最流行的搜索引擎之一,后在2003年2月被Overture收购。

在中文搜索引擎领域,1996年8月成立的搜狐公司是最早参与作网络信息分类导航的网站,曾一度有“出门找地图,上网找搜狐”的美誉。

由于其人工分类提交的局限性,随着网络信息的暴增,逐渐被基于robot自动抓取智能分类的新一代信息技术取代。

北大天网是教育网最流行的搜索引擎,它由北大计算机系网络与分布式系统研究室开发,于1997年10月29日正式在CERNET上提供服务,2000年初成立天网搜索引擎新课题组,由国家973重点基础研究发展规划项目基金资助开发,收录网页约6000万,利用教育网优势,有强大的ftp搜索功能。

XX中文搜索由超链分析专利发明人、前Infoseek资深工程师李彦宏和好友徐勇2000年1月创建,目前支持网页信息检索,图片,Flash,音乐等多媒体信息的检索。

并且XX在中文领域第一个开始使用ppc经营模式。

1.2搜索引擎的工作原理

搜索引擎的工作原理大致可以分为:

(1)搜集信息:

搜索引擎的信息搜集基本都是自动的。

搜索引擎利用称为网络蜘蛛的自动搜索机器人程序来连上每一个网页上的超链接。

(2)整理信息:

搜索引擎整理信息的过程称为“创建索引”。

搜索引擎不仅要保存搜集起来的信息,还要将它们按照一定的规则进行编排。

(3)接受查询:

用户向搜索引擎发出查询,搜索引擎接受查询并向用户返回资料。

2程序设计

2.1程序原理

程序运行时需要提供搜索关键字和首地址(这个地址可以是待查网站内的任意的一个网页)。

图2-1简要程序运行过程

在程序收到这两个参数时,程序首先会尝试与该网页(参数2)连接,并根据返回结果判断此网页地址是否可用,如果不可用弃之。

可用就会进一步请求网页头文件,并从头文件中取出此网页采用的编码方案,放入一个字符串类型的变量中,待以后解码网页内容时再强制转换为编码类型。

随后程序下载纯网页内容(不包含图片以及Javascript脚本和CSS样式表)如果不出错的话,程序查找整个网页内的内部链接并将其存入一个队列当中,每当存入一个URL时,会触发一个添加事件。

然后程序在当前网页内搜索关键字(参数1),等到搜索完整个页面时如果找到就生成一个SearchReault类的实例,并存贮在有序列表当中,有序表会根据页面的关键字数量进行自动排序,这保证了取结果时永远最先得到关键字最

多的网页。

如果以上步骤顺利就激活另一线程,与主程序分工合作,主线程用于判断URL,添加URL,处理错误信息。

而次线程专门用于取地址,分析网页内容。

每当从队列中取出一个地址时,激发取地址事件。

至此第一轮查找完成,之后主、次线程循环完成此过程,如果待分析的URL队列为空时并且标志位不为真时,次线程会休眠30毫秒,之后继续工作。

如果待分析的URL队列为空且标志位为真时,次线程退出,整个搜索完成。

参考图2-1

 

2.2结构设计

项目用到了三层结构设计-这是为了以后扩展程序提供了方便,因为目前这个程序能在一个页面内搜索,如果改动Search类中的一个函数,程序便可以搜索整个互联网。

各个类之间的关系请看图2-2;

图2-2类视图

⏹数据选择层

Jelly类用于连接各式各样的数据库、数据结构文件,为了使程序简单小巧,而且这个程序本身并不复杂。

我选择使用在内存中保存数据。

(程序也提供了将结果保存在磁盘上的功能,只要在构造函数中指定存储路径就可以了,默认保存在桌面上)。

⏹搜索逻辑层

程序的核心所在,功能实现在Search类中,由于需要多处处理html元素,于是又分出一个HtmlElement类来辅助Search类,它的功能是存储、处理单个HTML元素。

⏹通用接口层

其他程序能够使用这个模块,都是通过调用这个接口类来实现的,由于简单,名字就用默认类名了。

这个类封装了全部的底层功能实现,组合各个底层类的功能,方便了其它程序的调用。

 

2.2.1数据类结构

数据存储类包含两个,Jelly类和MyList类。

后者为核心,由于搜索的结果的每一项需要存储许多信息,于是另外写了一个数据类型SearchReault类供MyList类调用,每当MyList类插入数据时会自动判断要插入数据的价值,并插入到合适的位置。

前者为一个数据工厂类,其它类需要访问数据时,必须调用此类。

这两个类的详细信息看图2-3和图2-4。

图2-3

 

核心算法如下:

publicvoidAdd(SearchResultvalue)

{

if(value==null)

图2-4

return;

if(values.Count==0)

{

values.Add(value);

return;

}

values.Add(value);

for(inti=0;i

{

if(value.CompareTo(values[i])>=0)

{

SearchResulttemp=values[i];

values[i]=value;

for(intj=values.Count-1;j>i+1;j--)

{

values[j]=values[j-1];

}

values[i+1]=temp;

break;

}

}

}

 

2.2.2逻辑类结构

逻辑类当中也包含两个类,HtmlElement类和Search类。

主搜索引擎Search类会从上层类传来的网页地址下载网页的头文件,并从头文件中分析此网页的正确与否、编码方案等,如果顺利便下载此网页的内容,并用对应的编码方案读取网页内容。

然后搜索其中的内链接和关键字,如果找到,Search类会立即查找内链接或关键字周围的HTML标签,智能转换为HTML元素之后将转换后的HTML元素交给HtmlElement类来分析,HtmlElement类将分析的结果转换为一个SearchResult类的实例回交给Search类,Search类再将此结果递交给上层类。

这两个类的详细信息如图2-5和图2-6

图2-5Search类

图2-6HtmlElement类

2.2.3接口类结构

图2-7事件的参数类

接口层中的类会调用其它层中的类,并向外提供一个开放的标准接口调用,这个层中包含了一个委托类(ActionEActionEventHandler和一个用于在事件中传递参数的类(ActionEventArges,图2-7)、两个类(SearchReault类,图2-8和Class1类,图2-9),Class1类会在内部实例化Search类和Jelly类,声明一个Queue类用于存放可用的URL,实例化SearchResult类数组用于存放结果。

声明两个事件(addUrl_event和removeUrl_event)用于程序调试。

第一次启动程序时,

图2-8SearchResult类

主线程会分析参数2中的网页URL中的内连接并经过一个过滤函数(CheckUrl)存入URL队列中,之后程序执行GoNextPage函数然后激活次线程开始和次线程分工合作(在程序原理中已经讲到,在此不重复)。

图2-9Class1类

3接口文档

3.1接口

通过构造函数传入程序需要的参6570

表3-1程序中所需要提供的构造参数

参数名

类型

说明

startUrl

string

待搜索的网站内任意一个网页,之后程序会自动根据这个网页内的内链接搜索完整个网站

key

string

搜索的关键字

replace

string

找到关键字时用replace替换掉关键字。

例如key设置为“郑州”而replace设置为“郑州”这样在显示找到的内容中时,关键字会以粗体显示,可以使用任意替换,使结果中关键字任意显示,如高亮或斜粗体等

distanct

int

查找到内容的长度(以关键字为中心分别向左右最长扩展distanct个字符),搜索到的内容最长为distanct*2+key的长度

3.2事件

表3-2事件

事件名称

委托

说明

addUrl_event

ActionEventHandler

当在当前页搜索到一个可用的内链接,并将其添加到有序表的时候触发此事件,事件参数中会包含有序表的项数,和正要添加到有序表的URL。

removeUrl_event

ActionEventHandler

当从URL栈中删除一个URL时触发此事件,事件参数包含了正要删除的URL和栈中的项数。

当该事件触发时表明程序已经分析完该URL。

◆ActionEventHandler委托声明如下

publicdelegatevoidActionEventHandler(objectsender,ActionEventArgese);

◆ActionEventArges类如下:

publicclassActionEventArges:

EventArgs

{

publicActionEventArges(stringurl,intcount)

{

this.url=url;

this.count=count;

}

stringurl;

intcount;

publicintCount

{

get{returncount;}

}

publicstringURL

{

get{returnurl;}

//set{url=value;}

}

}

结束语

由于自己的自觉性不够导致自己在大一、大二两年没能把太多的时间花在学习上使得自己在对编程语言的基础知识没有很好的掌握,而到了大三就觉得什么也不会,都在慢慢的补救。

通过对毕业设计的完成使自己在编程方面成长了很多,也学到了很多。

在对本课题实现过程中,使自己更进一步了解了面向对象编程,使我自己的编程能力有了新的提高,考虑问题的角度也有了改进,组织软件结构的能力也有所提升。

这一过程是一个非常锻炼人的过程,也是一个非常适合提高自己的过程,在这个过程中,综合锻炼了一个人独立考虑问题,独立解决问题,以及不断反思的能力,应当好好把握。

目前知道的不足之处:

1)不支持“属性中=后面有空格”在Search.cs文件中行333

2)会引发异常(原理上如此,实际测试未出现过)在Search.cs文件中行239

致谢

在论文即将完成的时候,心情实在有些激动,回想一路走来所有帮助过我、支持过我、批评过我、嘲笑过我的人,我想说,谢谢你们。

帮助过我、支持过我的人们,谢谢你们给了我信心;批评过我的人们,谢谢你们让我明白了自己的错误、发现了自己的缺点;嘲笑过我的人们,谢谢你们给了我不断向前的动力,以反驳你们的嘲笑。

在此,我感谢张老师在大学最后阶段里给我的支持和帮助,您严谨的治学风范和平易近人的学术态度都是我为之学习和奋斗的目标。

正是有了您的帮助我才能在短短几个月中有这样的成果,才能认识到独立学习和研究的重要性。

在本文的完成过程中,许多同学都给予了不同形式的帮助,在这里我也表示感谢,谢谢他们默默无闻的付出。

参考文献

[1]维基百科----互联网http:

//zh.wikipedia.org/zh-cn/%E4%BA%92%E8%81%94%E7%BD%91

[2]根据国家统计局发布的《2010年国民经济和社会发展统计公报》初步预计

[3]中国互联网信息中心《CNNIC互联网发展信息与动态2011年3月总第65期》

附录

一个简单的程序调用示例代码

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingClassLibrary1;

usingSystem.Text.RegularExpressions;

usingSystem.IO;

usingSystem.Net;

namespaceConsoleApplication1

{

classProgram

{

staticvoidMain(string[]args)

{

stringurl2=@"

stringkey="版权";

Class1class1=newClass1(url2,key,"|"+key+"|",10);

sw=fi.AppendText();

Class1.addUrl_event+=addUrl;

Class1.removeUrl_event+=removeUrl;

class1.GoNextPage();

SearchResult[]srs=class1.Result;

Console.ForegroundColor=ConsoleColor.Yellow;

for(inti=0;i

{

Console.WriteLine(srs[i].UrlTitle);

foreach(stringsinsrs[i].Contents)

{

Console.WriteLine(s);

}

Console.WriteLine(srs[i].UrlPath+""+srs[i].WebDate.ToLongDateString()+""+srs[i].Contents.Length);

Console.WriteLine();

}

sw.Flush();

Console.WriteLine("完成共找到"+srs.Length+"个");

Console.ReadLine();

}

staticstringfilePath1=@"c:

\documentsandsettings\administrator\桌面\456.txt";

staticFileInfofi=newFileInfo(filePath1);

staticStreamWritersw;

staticvoidaddUrl(objectsender,ActionEventArgese)

{

Console.ForegroundColor=ConsoleColor.Green;

Console.WriteLine("{0}:

{1}",e.Count,e.URL);}

staticvoidremoveUrl(objectsender,ActionEventArgese)

{

Console.ForegroundColor=ConsoleColor.Magenta;

Console.WriteLine("{0}:

{1}",e.Count,e.URL);

sw.WriteLine("-"+e.Count+""+e.URL);

}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科

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

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