元搜索引擎论文2009-5-24
发布时间:2024-11-28
发布时间:2024-11-28
毕 业 论 文
题 目: 多元科技文献搜索引擎
学生姓名指导教师
二级学院专 业
班 级 05计本(软件工程) 学 号 0506110221
提交日期 2009年05月25日 答辩日期 2009年05月 31日
2009 年05月25日
金 陵 科 技 学 院 学 位 论 文 使 用 授 权 声 明
金陵科技学院有权保留本人所送交学位论文的复印件和电子文档,可以采用影印、缩印或其他复制手段保存论文。本人电子文档的内容和纸质论文的内容相一致。除在保密期内的保密论文外,允许论文被查阅和借阅,可以公布(包括刊登)论文的全部或部分内容。论文的公布(包括刊登)授权金陵科技学院教务处办理。
学生签名:
指导教师签名: 日 期:
金陵科技学院学士学位论文 摘要
目 录
摘 要 ............................................. (I) ABSTRACT ................................................ (II)
第1章 绪论 ............................................. (1)
1.1搜索引擎.......................................... (1)
1.2元搜索引擎(Meta-search engine) ..................... (1)
1.3多元科技文献搜索引擎 .............................. (2)
第2章 总体架构 .......................................... (3)
2.1请求提交.......................................... (3)
2.2接口代理.......................................... (3)
2.3结果显示.......................................... (3)
第3章 详细设计 .......................................... (5)
3.1 源搜索引擎选择算法 ................................ (5)
3.2结果集成算法 ...................................... (6)
3.2.1合并 ........................................... (6)
3.2.2去重 ........................................... (7)
3.3优先级算法 ....................................... (8)
3.4请求提交.......................................... (9)
3.4.1通信模式 ........................................ (9)
3.4.2源搜索引擎选择 .................................. (9)
3.5接口代理.......................................... (9)
3.5.1提取 .......................................... (10)
3.5.2去重与合并 ..................................... (11)
3.6结果显示......................................... (13)
3.6.1输出 .......................................... (13)
3.6.2保存 .......................................... (13)
第4章 运行界面与过程 ................................... (14)
4.1运行界面........................................
4.2运行过程........................................
4.3程序特点........................................
第5章 小结 ............................................ 致 谢 .................................................. 参考文献 ............................................... 附录:源搜索引擎........................................
14) 16) 18) 19) 21) 20) 22) (((((((
多元科技文献搜索引擎
——总体框架与用户界面
摘 要
本文基于当前流行的搜索引擎技术和visual C++可视化软件开发工具设计
和实现了一个较为专业的多元科技文献搜索引擎。本文首先介绍元搜索引擎技术的理论基础,然后重点研究了元搜索引擎结构原理和实现元搜索引擎过程中的关键技术,包括源搜索引擎选择技术、结果合并技术的算法。重点研究了各种己有的技术实现的常用算法,并且在分析比较的基础上提出本课题设计的算法—优先级算法。最后,借助多元科技文献搜索引擎软件验证了优先级算法的优越性。
关键字:多元科技文献搜索引擎、、源搜索引擎选择技术、优先级算法
Meta-search Engine for Literature of Science and
Technology
——Main Frame and Interface
Abstract
Based upon currently popular search engine technology and visible software
developing tool visual C++, the paper implements a professional Meta-search Engine for Literature of Science and Technology(MSELST)。 At first, the paper analyzes the base theories of Meta Search Engine. Then, the paper is with a view to the research in framework and principle of meta-search engine and pivotal technology used in realization, including single search engine choosing and the algorithm of results integration. It analyzes thoroughly the methods and algorithms which used in realization then compares them each other. On this base, we bring forward the Algorithms of Priority(AP)we used in paper . According to the Software of Meta-search Engine for Literature of Science and Technology,we tested and verified that AP is an advanced algorithm。
Key Words: Meta-search Engine for Literature of Science and Technology;
single search engine choosing;Algorithms of Priorit
第1章 绪论
目前人们在科技文献数据库上查找信息的主要工具是搜索引擎,在信息量浩
如烟海的服务器上找到满足用户需要的信息,是一项极富挑战性的工作。一个搜索引擎成功与否是由用户对其搜索结果的满意程度决定的,现有的传统的搜索引擎的发展,一方面使其实用性不断加强,部分解决了人们的信息搜索问题;另一方面,由于其自身的局限性,限制了人们对资源更有效的获取。
1.1搜索引擎
搜索引擎指能够自动从互联网上搜集信息,经过整理以后,提供给用户进行
查阅的系统。搜索引擎的工作原理大致如下:搜集信息,由于互联网上的数据量非常庞大,搜索引擎的信息搜集基本都是自动完成的。搜索引擎利用被称为网络蜘蛛的自动搜索程序来连上每一个网页上的超链接。从少数几个网页开始,连到数据库上所有到其他网页的链接。整理信息:搜索引擎整理信息的过程称为“建立索引”。搜索引擎不仅要保存搜集起来的信息,还要将它们按照一定的规则进行编排。这样,搜索引擎不用重新翻查它所有保存的信息就能迅速找到所要的资料。 接受查询:用户向搜索引擎发出查询,搜索引擎接受查询并向用户返回信息。搜索引擎能够按照每个用户的要求检查自己的索引,在极短时间内找到用户需要的资料,并返回给用户。目前,搜索引擎返回主要是以网页链接的形式提供的,这些通过这些链接,用户便能到达所需的网页。通常搜索引擎会在这些链接下提供一小段来自这些网页的摘要信息以帮助用户判断此网页是否含有自己需
要的内容。
1.2元搜索引擎(Meta-search engine)
元搜索引擎是在前述搜索引擎基础上建立的可以同时查询多个搜索引擎的
数据库,其英文原意是搜索引擎之后或之上的搜索引擎,因而也可以叫做后搜索引擎。按照搜索机制划分,元搜索引擎包括并行式和串行式两类,并行式元搜索引擎运行时是将查询请求同时发向各个独立搜索引擎,然后将的结果按特定的顺序呈现给用户;串行式元搜索引擎运行时是将查询请求先发向某个独立搜索引
擎,待其返回结果后再将请求发往另一个独立搜索引擎。显然,并行式元搜索引擎运行模式较好,搜索所需时间也较短。
1.3多元科技文献搜索引擎
随着网络信息数量的指数增长,引擎数据库急剧膨胀!检索速度也将会变慢,
检索效率急剧下降。为了解决单个搜索引擎信息覆盖面小,信息收集量有限,用户需要对不同搜索引擎进行适应,分别使用多个搜索引擎的缺点,既浪费时间与精力,又得不到理想的搜索效果!基于此,本文开发了一个多元科技文献搜索引擎软件以期解决以上问题,获得理想搜索的检索文献。
多元科技文献搜索引擎在技术实现上属于并行元搜索引擎,它可以同时向九
个搜索引擎发送搜索要求(具体视用户选择的数据库而定),并首先处理完成搜索并返回结果的数据模块。在后续返回的各个模块的数据按照优先级算法陆续添加到搜索结果中。在此需要说明的是,由于综合排序是通过优先级的最终确定来决定显示给用户的结果排序。而各个结果的优先级在最后一条结果加入之前,处于最终链表中的结果的优先级仍然是动态变化的,由于新加入的一条结果可能改变前面加入的结果的优先级。所以返回较早的搜索结果并不一定显示在最前面最后返回的结果不一定显示在后面,详细内容见“关键技术章”,“去重与合并”部分。
第2章 总体架构
多元科技文献搜索引擎系统设计分工主要分为以下两个部分:
(1)总体框架与用户界面。
(1)源搜索与被检索的数据库接口。
本文所设计的是总体框架与用户界面设计。用户界面通过Visual Studio2005
的可视化界面设计实现,其具体设计样式参见界面章节。
多元科技文献搜索引擎的框架结构由三部分组成:检索请求提交机制、检索
接口代理机制、检索结果显示机制。
2.1请求提交
请求提交负责实现用户“个性化”的检索设置要求,包括调用哪些搜索引擎、
检索时间限制、结果数量限制等。
2.2接口代理
接口代理负责将用户的检索请求“翻译”成满足不同搜索引擎“本地化”要
求的格式。由子模块接受由主模块传递的各种要求与关键字,通过继承接口的方式实现数据传输,实现接口代理。接口代理就像一个公司的代理商一样,主模块负责高级事务,而各个源搜索引擎就像公司代理一样去完成任务,而主模块没有必要去关心接口代理的实现细节。这也很好的实现了模块封装,与模块的独立性,方便系统扩展与错误局部控制,不会出现一个搜索引擎出错全都出错。
2.3结果显示
结果显示负责所有源搜索引擎检索结果的去重、合并、输出处理等。主模块
通过编辑框接受用户输入关键字信息,并通过复选按钮判别用户的搜索偏好搜索结果的HTML文件中去实现信息提取,去重、合并、输出、保存处理。
程序的体系结构如下图2-1所示:
2-1 体系结构图
图
第3章 详细设计
在体系结构确立以后,确定以下的关键技术:多元科技文献搜索引擎是建立
在九个成熟的搜索引擎基础之上,所以其核心技术并不是如何去发现与搜索关键字相关的文献(模糊查询技术),而是分析被调用的搜索引擎返回的搜索结果(网页),在必要时还需要进一步打开在该结果中的链接,并继续分析,直到得到想要的结果。简单说就是在结果中搜索与整理,并将整理后的每一条结果的关键信息返回到用户界面。
依照体系结构的设计,框架结构由三部分组成:检索请求提交机制、检索接
口代理机制、检索结果显示机制。请求提交与接口代理,通过C++的高级技术实现,包括继承、多态、封装。首先,主模块定义一个接口,子模块重载接口中的虚函数(主要是search函数),并在函数中将搜索结果放入接口中的数据成员中。当search函数完成搜索后,返回一个布尔值为真时表示搜索成功。此时主模块就可以通过多态的方式操作数据成员(主要是getfirstdata函数),而不需要知道子模块是如何实现的。主模块完成数据提取与合并后将结果显示给用户。
本文主要是处理选择调用并初始化源搜索模块,并集成返回的结果为统一的
格式显示给用户。核心算法有以下两个:(1)查询前的处理(检索请求提交机制和检索接口代理),检索请求提交机制负责接收用户的搜索请求,检索接口代理包括选择独立搜索引擎策略和激活相关引擎工作。(2)结果的集成,包括去重与合并两个技术,主要是通过优先级的确定来决定结果的排序,在下文将予以详细介绍。
3.1 源搜索引擎选择算法
在本软件中九个子搜索引擎各具特色, 元搜索引擎不可能同时使用它们,
也不应该同时使用它们。因为有的子引擎模块返回的结果与用户所期望的相关性较差,或者有的数据库根本就不可以同时支持中英文搜索。因此如何为用户选择数量合适并贴近用户搜索需求的源搜索引擎是多元科技文献搜索引擎需要考虑
的重要问题。过多的源搜索引擎会增加元搜索引擎的开销、降低搜索速度。一味追求大而全的综合性搜索引擎而排斥那些有特色的专业搜索引擎又会导致很多
重复搜索, 降低搜索的全面性, 也会给结果排序增加难度。
从总体上说, 多元科技文献搜索引擎收录的九个源搜索引擎质量较高且比
较稳定, 两个通用搜索引擎重点考虑到了用户认可度, 对于七个学术机构或出版机构专用数据库主要考虑其领域特色用户可以量体裁衣。
目前元搜索引擎的选择方法主要有两种: 一种是基于系统选择。由系统决定
选择哪几个源搜索引擎,一般是具有一定知名度、使用率较高的主流搜索引擎, 这是在元搜索引擎自己对源搜索引擎的性能效率进行评价的基础上实现的。另一种是基于用户选择。在元搜索引擎的界面上提供了相应的选项供用户选择。在用户选项部分, 用户能设定他们想使用的搜索引擎, 并且可以随时改变这些设置。
多元科技文献搜索引擎在设计时在一定程度上使用了以上两种选择方法,但
是又未完全将选择权交给系统,用户选择作为补充。考虑到功能的简洁与运行高效方面的因素,系统选择仅包括中英文数据库的选择,而向用户同时提供了使用数据库的偏好选择(特定用户钟爱某个或几个源搜索引擎)。通过这一设置, 元搜索引擎既可以满足用户偏好又可以避免一些不必要的搜索, 从而提高搜索的效率和准确度。
3.2结果集成算法
各个子模块逐渐完成搜索后,将搜索结果链表逐渐加入到各个源搜索引擎数
据链的完成队列中。此时,主模块通过去重与合并技术实现数据的整理,并保存到一个最终链表中等待显示函数的处理。需要说明的是虽然此处将去重与合并分开介绍,但是去重与合并是同时完成的一个过程,是密不可分的。合并与去重的整个过程是一个交替处理的过程,它们必然在同一时间开始与结束。
3.2.1合并
集成算法的科学程度直接决定了本软件的响应时间、重复率、准确率、相关
度等关键技术指标的高低。在此首先介绍几种基本的合并算法,本文的优先级算法就是基于以下基本算法思想,将其各个优点融会贯通运用于一体而成。
(1)根据响应速度排序, 对于某个查询来说,每个源搜索引擎查询结果的
速度不一样的,为了减少用户的等待时间,按照源搜索引擎搜索结果出现的时间先后顺序排序返回给主模块,先到先处理,而不必等到所有源引擎搜索完毕同时处理。这里并没有考虑先到者获得更高优先级,由于先完成搜索的源搜索返回的结果并没有更高的可信度而言,这里主要是出于处理效率考虑。
(2)用户偏好和权威期刊与出版社排序,用户控制各个源搜索引擎的优先
级初值,使得用户偏爱的搜索引擎获得较高的优先级,而那些用户不很喜欢的搜索引擎也参与搜索,但是只有其搜索结果非常靠前、匹配度相关性最好的结果才有机会被显示。权威期刊与出版社方式提升搜索结果的优先级,通常也是用户预先设置或者是系统自然统计后归纳保存下来的一个数据库。对结果处理时访问该数据库,如果该结果的出处来自数据库中权威期刊与出版社那么该条结果获得更高的优先级。
(3)Borda排序,最初是用于民主政治选举,选民对各候选人进行投票后,
对于每个候选人进行统计票数,最后按照得票数多少进行排序,票数最高的排在最前面。在此可将此法改进用于多元科技文献搜索引擎结果排序,对于某个查询,它被几个源搜索引擎检索到,则该结果记录就得几票,最后统计各个结果记录的票数,按照票数越高优先级越高的方式赋值。很明显,被多个源搜索引擎检索到的结果记录具有更高的优先级,为了更好地利用源搜索引擎的排序信息,对每个源搜索引擎的结果按照从前到后的顺序分配一定的权值,统计优先级的值为该源引擎的初始优先级乘以相应的权值(该权值是一个递减函数)。这样就能够将每个结果所得票数细化,排序就科学多了。
(4)位置排序的基本思想也是充分利用各独立搜索引擎返回的结果记录集
合中原来的排序信息,同时给每个成员搜索引擎分配了优先级。不同的搜索引擎对于相同的查询可能会得到一些相同的结果,但是相同的几个搜索结果在不同的成员搜索引擎中返回的次序可能不一样。位置排序法就是专门为了调和这种矛盾而设计的排序方法。对于某个元搜索引擎来说,假设其调用的成员搜索引擎个数为n,源搜索引擎Si ( i = 1,2, ,n)的优先级为Pi ( i = 1,2, ,n) 。对于某个搜索结果,令其在搜索引擎Si中的排序位置为qi(若不在该搜索引擎中出现,则qi为无穷大),那么该搜索结果的相关度计算公式为:
n
score(q) (P/q)
i 1通过此公式计算所有搜索结果的优先级,然后按照优先级大小的顺序排序。
通过比较可以发现,位置排序与Borda排序也有相似之处。
(5)概念可信度排序,它与Borda排序法有点相似,对于某个查询,将每个
搜索引擎的前50项按照位置前后顺序分配相关分值,第一项赋值为50,第二项赋值为48, 第二项赋值为44,依此类推,直到一项赋值为1时后续结果被抛弃。然后将每个结果在各个源搜索引擎中的相关分值相加(没有在其他搜索引擎中出现的则在该搜索引擎中的相关分值为0);最后将结果按照相关分值和的大小顺序排序分页返回给用户。元搜索引擎概念可信度排序给每个源搜索引擎的结果按照先后顺序分配了一定的分值,这些分值与其位置呈线性递减关系。实际上,相关分值与位置之间并不一定是线性关系,更多的是呈一定的曲线递减关系。若是每个源搜索引擎对其结果都分配了相关分值,则利用相关分值与其位置之间的关系拟定函数则比较好。MetaCrawler就是使用该方法来进行排序的。
3.2.2去重
去重主要考虑三个技术指标,包括标题(Title),作者(Editor),出版时间
(PubDate)。当以上三项的字符串完全匹配时认为该项已经在搜索结果中出现,认为搜索结果出现重复。在匹配的结果中提高该条目的优先级(升级),并丢弃
重复条目。合并时考虑各个子模块的优先级是不同的(由系统与用户决定),各个子模块返回的各条结果的初始化优先级也是不同的(降级)。合并的过程中还可以访问一个专门的数据文件,该文件中保存了某些期刊名(通常包括权威期刊或引用频率较高的的期刊),该文件的内容包括两项数据:
○1期刊或出版社名,主要是用户偏爱的那些权威期刊或出版社。
○2与期刊或出版社名相关的一个优先级数值。
搜索结果中来自于这些期刊的文章可获得高优先级(升级)。这个数据文件
可以由用户修改,并根据用户所使用的搜索结果自动维护该数据文件。
3.3优先级算法
综上所述,优先级算法设计如下(括号中方形数字表示使用了上一节介绍的
对应合并的思想或原理):
定义如下符号使用如如下:
引擎优先级基值: base priroryty of engine: BPE
搜索结果条目优先级: Priroryty of Result Item:PRI
线性增长数值:Steper=2 //该变量每被操作一次就自动加上2
链表中的位置:Location // 该变量为某项在其源搜索结果中的位置,第一
项值为1
○1初始化一个源引擎时,给其赋一个优先级初值BPE 。这个值可以通过访问
文件获得,或者由主模块传递。如果文件不存且主模块也未传递该值,则置默认值。
○2逐项递减策略,在处理某个源搜索返回的源搜索链表时,给其链表表头置
优先级为该源引擎的初值(PRI=BPE),链表的第二项优先级为递减一个线性增长的数值(PRI=BPE-steper),链表的第二项优先级为递减一个线性增长的数值
(PRI=BPE-steper)。直到该链表结束,或者当PREI的值小于零时丢弃后面的结果,结束递减策略。
○3去重提优策略,如果当前处理的源搜索结果条目与搜索结果列表中某项符
合去重条件(见上页去重详述)时,则将该条搜索结果的的PRI值(PRI=PRI+PRIx)改为两者PRI之和然后重新定位该条目在搜索结果列表中位置。
○4时间优先度策略,在该策略中并未提升或者降低搜索结果的优先级,而是
通过先来先服务的方式来处理各个源搜索引擎的返回结果。这样达到的效果就
是:各个源搜索返回的结果如果最后具有相同的优先级,那么先接受处理的项将会排在前列。当搜索时间超出最大值时,则自动返回所有未完成引擎一个空值放弃该引擎搜索。这样不仅忽略搜索时间对排序的影响,又提高了整个搜索引擎的
处理效率。
下面给出一条搜索结果最后的优先级值(PRI)计算公式:
Steper Steper*Location
PRI BPE Steper PRI
// PRI表示去重提优,将该条目出现在不同源引擎中PRI求和。
3.4请求提交
通过初始化符合条件的搜索引擎模块,传递唯一的数据项:关键字信息。不
符合条件的搜索模块不被初始化,不可以参与搜索。这里就存在三个关键问题,主模块如何与子模块引擎传递数,如何选择那些搜索引擎参与搜索呢?
3.4.1通信模式
在系统架构阶段定义了一个通信模式,就是通过在主模块中定义一个接口,
其中的数据项包括关键字信息,和一个搜索结果数据链表结构的类。主模块通过多态的方式来操作各个子模块,在初始化一个搜索引擎模块时传递关键字字符串给子模块,子模块将搜索结果保存到搜索结果数据链表类中供主模块调用。主模块通过超类源函数的调用将数据传递到listcontrol控件中,呈现给用户。 数据链表结构的类与接口的类定义将在下节中介绍。
3.4.2源搜索引擎选择
当主界面接收搜索请求后,初始化哪些源搜索引擎采用第四章介绍的源搜索
选择算法 ,将符合条件的初始化,并调用search函数开始搜索。
3.5接口代理
通过主模块定义一个接口,各个子模块继承这个接口,并重载接口中的函数
完成搜索过程,并将搜索结果保存到由主模块定义的一个数据结构类中,该类是一个链表格式的数据结构以链接多条搜索结果;
接口定义如下:
class BaseEngine
{
public:
BaseEngine();
virtual ~BaseEngine();
BaseEngine( CString & ); //initiate count=1,searchkey=&,firstdata=null
void setSearchKey( CString & );
CString getSearchKey();
void setID( int );
int getID();
void addFirstData(DB *);
DB *getFirstData();
virtual void search()=0;
private:
CString searchKey;
int engineID;
DB *firstData;
};
接口中数据成员(链表)定义如下: typedef struct dbs{ CString title; CString author; CString subject; CString page; CString DOI; CString journal;//此数据为林鸣霄的基本数据 CString issue; CString publisher; CString ISSN; CString strUrl2;//此数据为吴雯洁才有的数据 struct dbs *next; }DB;
3.5.1提取
提取主要是由各个源搜索引擎完成,不是本文探讨的主题,故在此只做简要
叙述。关于下载网页主要有以下三种方式:
(1)使用TCP/IP scocket编程实现http协议的通信过程;
(2)使用MFC的CInternetSession等类,它已经实现了http协议的通信过程;
(3)使用IE的ActiveX控件,也就是我前面提到IWebbrowser接口。
各个模块提取结果的基本原理相同,提取的关键在于对返回结果的解析。当
源搜索模块模拟IE发送搜索请求后就可以接收搜索的结果,但是前两种方式的搜索结果返回的是html文档,需要解析网页,获得有用的信息。当然有些网页是可以通过分析以下格式,看看需要的信息在网页文本中什么位置,前后有什么标记,然后程序在文本中寻找着些标记,定位需要的信息然后提取出来。第三种方法,使用ie的解析功能,自己监控一下DocumentComplete事件,当网页加载完成时,通过Document属性获取IHtmlDocument接口,然后通过该接口获取网页上的信息,同样需要解析哪些是有用的信息。