版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要河南科技大学本科毕业设计(论文)PAGEIVPAGEI校园网搜索引擎设计摘要随着Internet的迅速发展与广泛应用,网络上的信息与日俱增,如何在海量的信息中快速地定位自己感兴趣的信息,已成为人们最关注的问题之一。而搜索引擎技术在用户和信息源之间架起了一道沟通的桥梁,为用户提供了一个有效的信息检索手段。因此,本着整合校园网资源的目的,在研究搜索引擎的基本原理、核心技术和处理流程的基础上,结合校园网搜索引擎的个性化需求,本文设计了一个灵活、可配置、具有良好可扩展性且效率较高的校园网搜索引擎系统。论文介绍了系统开发的背景和国内外搜索引擎技术的发展现状,并详细地说明了该搜索引擎系统的开发过程和方法。首先从功能需求和非功能需求两个方面对校园网搜索引擎的个性化需求进行分析,然后根据需求分析的结果提出了系统的实现目标和原则,继而从系统的功能架构和技术架构两个方面描述了系统的整体功能和总体流程,最后具体描述了插件机制的设计和爬取模块、文档解析模块及检索和索引模块几个关键模块的详细设计。关键词:校园网;搜索引擎;网络爬虫;文档解析;索引
TheDesineOfCampusNetworkSearchEngineABSTRACTWiththeInternet'srapiddevelopment,Howtheinformationinthemassrapidpositioninginformationofinteresttothemhasbecomeoneofthemostconcern.Thesearchenginetechnologybetweenusersandinformationsourcestobuildabridgetoprovideuserswithaneffectivemeansofinformationretrieval.Therefore,basedonintegrationofcampusnetworkresources,inthestudyofthebasicprinciplesofsearchengine,thecoretechnologyandprocesses,basedonthecampusnetworksearchenginecombinedwiththeindividualrequirements,thepaperdesignofaflexible,configurable,canbeagoodscalabilityandefficientsearchengineofcampusnetworksystems.Thispaperintroducesthecontextofsystemdevelopmentandsearchenginetechnologyathomeandabroadtodevelopthestatusquo,andadetaileddescriptionofthesearchenginesystemdevelopmentprocessandmethods.First,fromthefunctionalrequirementsandnon-functionalrequirementsofthecampusnetworkthetwoaspectsofthepersonalizedsearchengineneedsanalysis,needsanalysisbasedontheresultsofthesystemtoachievetheobjectivesandprinciples,andthenfromthesystemarchitectureandtechnicalstructureofthetwoaspectsdescribesthesystem'soverallfunctionandtheoverallprocess,andfinallydescribestheplug-inmechanismforthespecificdesignandclimbingaccessmodule,documentanalysisandretrievalandindexingmoduleofseveralmodulesofthedetaileddesignofkeymodules.KEYWORDS:CampusNetwork;searchengine;networkreptiles;documentanalysis;Index目录毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。作者签名:日期:
目录前言 1TOC\o"1-3"\h\z第1章绪论 2§1.1系统开发背景 2§1.2国内外搜索引擎发展现状 2§1.2.1国内外技术发展概况 2§1.2.2搜索引擎发展现状 3§1.3本文的主要工作 4§1.4本文的组织结构 4第2章系统架构设计 5§2.1需求分析 5§2.2系统设计目标和原则 5§2.3系统功能架构设计 6§2.3.1系统功能描述 6§2.3.2系统总体流程 7§2.3.3爬取模块设计 8§2.3.4中文分词模块 10§2.3.5索引和检索模块 11§2.4系统技术架构设计 15§2.4.1插件机制 15§2.4.2MapRedtic分布式处理模型 17第3章系统详细设计 20§3.1插件机制的详细设计 20§3.1.1重要概念 20§3.1.2类装载策略 21§3.1.3类图 22§3.1.4配置文件结构 23§3.1.5扩展点设计 24§3.2分布式处理和存储 24§3.3主要模块详细设计 25§3.3.1爬取模块 25§3.3.2文档解析模块 27§3.3.3索引和检索模块 28结论 31参考文献 32致谢 34REF_Ref168484390\r\h第2章REF_Ref168484424\h业务规则发现及管理PAGE6PAGE19前言随着校园网建设的迅速发展,校园网内的信息内容正在以惊人的速度增加着。如何更全面、更准确地获取最新、最有效的信息已经成为我们把握机遇、迎接挑战和获取成功的重要条件。目前虽然已经有了像Google、百度这样优秀的通用搜索引擎,但是它们并不能适用于所有的情况和需要。对学术搜索、政府类站点、校园网的搜索来说,一个公平的排序结果是非常重要的。另外,由于互联网上信息量之巨,远远超出哪怕是最大的一个搜索引擎可以完全收集的能力范围。因此,本着整合校园网资源的目的,为方便广大师生对校园网信息的获取和使用以及其他人对洛阳理工学院的了解,本文设计了一个灵活、可配置、具有良好可扩展性且效率较高的校园网搜索引擎系统。本文在研究Web搜索引擎的基本原理、核心技术和处理流程的基础上,结合校园网搜索引擎的个性化需求,设计了一个校园网搜索引擎系统。本文论述了系统开发的背景和国内外搜索引擎技术发展现状,并详细说明了该搜索引擎系统的开发过程和方法。首先从功能需求和非功能需求两个方面对校园网搜索引擎的个性化需求进行分析。然后根据需求分析提出了实现目标和原则,从系统的功能架构和技术架构两个方面描述了系统的整体功能和总体流程。在技术架构设计中,设计了插件机制,用于提高系统的可扩展性、灵活性、可维护性,并降低了设计和开发的复杂性。另外,采用Map/Reduce分布式处理模型作为存储和处理的基础,提高系统的并发处理能力,降低系统对硬件配置的要求。在详细设计阶段,具体描述了各个功能模块和插件机制的设计。其中,信息爬取模块采用了广度优先的爬取方式,索引和检索模块都是基于Lucene软件包设计的。
绪论§1.1系统开发背景随着各高校办学质量的不断提高以及对校园信息化建设的逐步重视,学校迅速步入了一个信息化高速发展的阶段。在这个阶段中,学校的校园网正在不断的完善,给我校师生提供了一个良好的信息化教学、科研和管理平台。我校的教学、管理部门以及科研机构,都将步入完全的信息化时代,但是,随着校园网建设的迅速发展,校园网内的信息内容正在以惊人的速度增加着,这就使得全校师生迅速定位有价值的信息变得比较困难,本文设计了一个校园网搜索引擎系统,其目标就是使所有用户,无论是在校的师生还是想了解校园信息的其他人员,都可以通过校园网的服务器进行信息的检索,从而迅速的通过网络得到校内各部门提供的各种信息。§1.2国内外搜索引擎发展现状§1.2.1国内外技术发展概况搜索引擎技术的基础是全文检索技术,国外对全文检索技术的研究从20世纪60年代就开始了。直到1990年,加拿大麦吉尔大学的学生AlanEmtage发明的Archie才算是现代搜索引擎的雏形。1994年,DavidFilo和美籍华人杨致远共同创办了Yahoo,采用目录索引技术,第一代搜索引擎正式运行。1995年,第一个元搜索引擎出现。1998年,Google的出现标志着搜索引擎的发展进入一个崭新的阶段,Google采用了新的网页链接评价体系,依据网页链接数量来评价文件的重要性,提高了搜索的效率、准确率,现在Google己成为行业的代表。中文搜索引擎作为国家重点科研建设项目其基础理论研究工作起步较晚,但是发展速度很快,理论水平己经基本赶上国际先进水平。目前的搜索引擎系统按照信息搜集方法和服务提供方式的不同可以分为三大类:(1)目录式搜索引擎:以人工方式或半自动方式搜集信息,人工形成信息摘要,并将信息置于事先确定的分类框架中。信息大多面向网站,提供目录浏览服务和直接检索服务。该类搜索引擎信息准确、导航质量高,缺点是需要人工介入、维护量大、信息量少、信息更新不及时。目录索引虽然有搜索功能,但在严格意义上算不上是真正的搜索引擎,仅仅是按目录分类的网站链接列表而己,用户完全可以不用进行关键词查询仅靠分类目录也可找到需要的信息。国外比较著名的目录索引搜索引擎有yahoo,国内的网址之家等。(2)机器人搜索引擎:由一个称为网络蜘蛛(WebSpider)的机器人程序以某种策略自动地在互联网中搜集和发现信息,由索引器(Indexer)为搜集到的信息建立索引,由检索器(Searcher)根据用户的查询输入检索索引库,并将查询经果返回给用户,服务方式是面向网页的全文检索服务。该类搜索引擎的优点是信息量大、更新及时、毋需人工干预,缺点是返回信息过多,有很多无关信息,用户必须从结果中进行筛选。机器人搜索引擎也称全文搜索引擎,它是名副其实的搜索引擎,也是目前常规意义的搜索引擎。国外具代表性的有Google,国内著名的有百度、中搜、搜狗等。(3)元搜索引擎:这类搜索引擎没有自己的数据,而是将用户的查询请求同时向多个搜索引擎递交,将返回的结果进行重复排除重新排序等处理后,作为自己的结果返回给用户。服务方式为面向网页的全文检索。这类搜索引擎的优点是返回结果的信息量更大、更全,缺点是不能够充分使用所使用的搜索引擎的功能,用户需要做更多的筛选。§1.2.2进入21世纪以来,搜索引擎的竞争越来越激烈。国际市场上,可以说是Google一统天下,此外还有Yahoo、MSN、AOL、Ask等紧随其后。国内市场被几个重量级搜薄引擎所占领,其中,Google是目前世界上最大的搜索引擎,百度是目前世界上最大的中文搜索引擎,另外,中搜、搜狗和一搜等优秀的搜索引擎也都有着各自的支持者。从技术上看,如今的搜索引擎也处在一个新老交替的阶段,不仅存在以Yahoo为代表的目录搜索引擎,还有以Google为代表的基于关键字的搜索引擎。随着搜索引擎的深入人心,各种各样的新兴搜索引擎也悄然兴起。§1.3本文的主要工作本文在研究了搜索引擎的基本原理、核心技术和处理流程的基础上,结合对校园网搜索引擎具体需求的分析,设计了校园网搜索引擎系统,完成了整个搜索引擎框架的设计,以下面是本文的主要工作:一、在需求分析阶段,从系统的功能需求和非功能需求两个方面对校园网搜索引擎系统的需求进行描述。二、在系统功能架构设计时,首先根据需求分析提出了实现目标和原则,并描述了系统整体功能和总体流程,然后根据系统的特点将其划分为几个功能模块,并分别对每个模块进行分析和设计。三、在技术架构设计中,设计了插件机制,提高系统的可扩展性、灵活性、可维护性,并降低了设计和开发的复杂性。另外,采用Map/Reduce分布式处理模型作为存储和处理的基础,提高系统的并发处理能力,降低系统对硬件配置的要求。四、在详细设计阶段,本文具体描述了各个功能模块和插件机制的设计。§1.4本文的组织结构本文内容共分为三章。第一章是绪论。主要阐述了校园网搜索引擎的开发背景、搜索技术的发展现状、系统的应用价值和意义以及本文的主要工作和组织结构等内容。第二章是系统架构设计。根据搜索引擎的工作原理,结合功能性和非功能性需求分析,建立系统的基本功能架构和技术架构。第三章是系统详细设计。根据对详细需求和系统架构的分析,提出具体的技术实现方案,主要包括插件机制和系统重要模块的设计。第2章系统架构设计§2.1需求分析搜索引擎的实现目标就是满足Internet所有用户的需要,使其都可以通过信息检索迅速的得到我校各部门提供的信息,这些信息具有实时性、真实性、有效性等特点,这就要求搜索系统的索引数据库及时、准确、有效的更新,与此同时还需给用户提供简洁优美的操作平台,方便用户更有效的利用系统功能模块,进而达到在最短的时间内获得最大限度的有效数据的目的。对于这个校园网内的搜索引擎而言,面向的用户主要有两类:一般用户和管理员。一般用户即普通使用者,包括在校的师生以及想了解校园信息的其他人员,可以通过在网页中输人查询,进行信息的检索,从而迅速的通过网络得到学校内部提供的各种信息;管理员的主要任务是通过系统进行后台数据库的及时更新,从而保证所有用户查询得到的都是服务器上比较新的数据和信息。一.功能性需求:1.根据一个或多个关键词的组合对中英文网页内容进行检索。2.web数据的采集和更新。二.非功能性需求:1.由于信息分布在Web空间,要求搜索引擎对不同平台、网络等各种复杂环境的适应能力比较强,并且能处理各种格式的文档。2.由于需要能处理海量的信息资源,要求搜索引擎具有先进的查询算法,并且能满足较好的排序要求。3.需要对分布式处理的支持,以使系统可以在多台机器上分布运行。4.需要具有较好的可扩充性,以满足下一步建立个性化检索和加入语义分析的需求。5.需要保证查准率和查全率。§2.2系统设计目标和原则1.首先要完成需求分析中提到的功能并保证整个系统的完整性和一致性。2.增加系统的灵活性和可扩充性,提供二次开发和集成接口,以满足需求变化的需要。3.降低系统各模块间的藕合度。4.提高系统性能。§2.3系统功能架构设计本文在借鉴传统搜索引擎设计模式的基础上,引入插件机制,构建系统总体框架,此框架以分布式模型为底层处理方法,重要功能由插件实现。§2.3.1系统功能描述如前所述,机器人搜索引擎由于信息量大、更新及时、无需人工干预等优点而发展迅速。本文要设计和实现的校园网搜索引擎所采用的工作方式也属于机器人搜索的范畴。整体结构大致分为搜索器、索引器和检索器等几部分组成:搜索器,又称为数据采集模块,负责从网络上收集信息。它通过爬虫程序按照一定规律和方式对网络上的各种信息资源进行搜索,并将搜索到的页面信息存入到一个数据库中。索引器,又称为文档组织和索引模块,负责对由索引器采集到的网页以及相关描述信息进行标引。在对原始网页进行一系列的整理、解析后,对提取出的文档内容建立倒排索引,从而建立起供检索使用的索引数据库。检索器,又称为查询服务模块,负责提供检索界面接受用户提出的检索请求,并根据请求访问相应的索引数据库,最后将结果集按相关度排序后返回给用户。本搜索引擎可看成双层Client/Server结构体系。用户访问搜索引擎时,用户端作为客户机向搜索引擎提出检索请求,而搜索引擎作为服务器,检索相应的索引数据库并将检索结果以应答的形式提交给用户;搜索引擎采集数据时,搜索引擎作为客户机向Internet上的各种资源系统提出搜索请求,而因特网上的各种资源系统作为服务器将有关数据作为应答提交给搜索引擎。§2.3.2系统总体流程在对系统进行需求分析的基础上,对系统进行架构设计。经过认真分析系统的功能,得出系统的总体流程图如图2-1所示。图2-1系统的总体流程图整个功能架构中,主要包括四个重要的存储库和五个主要模块。1.存储库:(1)CrawlDb:爬取信息库。主要用来描述一个网页的特征信息和在爬取过程中的状态。信息收集过程中,正是根据CrawlDb的信息,来生成爬取列表的。网页的重要度评分,也是在更新CrawlDb的时候进行动态更新的。(2)LinkDb:链接库。这里面包含的信息是每个url已知的链接信息。包括每个链接的锚文本和来源url。这里记录的锚文本可以被当作一个重要的域来建立索引。(3)PageDb:网页库。主要包括以下几部分内容:①Content:抓取回来的网页内容,包括http头信息和其它元信息。当搜索的时候,如果你选查看缓存页面的话,就会从这里读数据。”②fetcher:保存的是抓取状态信息,包括:版本、爬取列表项、协议状态、爬取时间等。③fetchlist:待抓取的url列表。主要包括:版本、是否抓取标志、page对象、anchor的个数、每个anchor字符串。④parse_data:从网页中解析出来的数据,例如元数据。⑤parse_text:从网页中解析出来的文本数据。(4)IndexDb:索引库。对收集到的文本信息建立的索引都存在这里,这是检索时真正需要的数据。索引记录的主要字段包括:url,title,content,anchor。其中,content是指网页内容,它是主要的被搜索项。2.模块(1)Crawler:爬取模块。信息采集过程中的中控模块,完成web信息的收集。(2)Parser:解析模块,负责各种类型文档的文本内容提取和解析。(3)Indexer:索引模块。负责建立索引。(4)Searcher:检索模块。负责对用户提交的查询进行处理,并据此在索引库中进行检索,返回查询结果给用户。(5)Analyzer:词法分析模块。主要负责分词。§2.3.3搜索引擎的第一步工作是在Web上收集网页并将其存入页面存储库。这个工作由爬取模块来完成,它实际上是一种被称为爬虫(Spider/Crawler)的计算机程序,从Internet上抓取各种网页信息,再将页面原始内容经过压缩处理,存入本地页面存储库中,以备日后处理所用。Crawler主要的搜集策略有如下两种:1.从一个起始URL集合开始,顺着这些URL中的超链接,以宽度优先、深度优先或启发式等方式循环地在互联网中发现信息。这些起始URL可以是任意的URL,但一般采用的是一些非常流行、包含很多链接的站点。2.将Web空间按照域名、IP地址或国家域名划分,每个搜索器负责一个子空间的穷尽搜索。根据需求分析可知,我们需要的是一个可以灵活控制搜索范围的爬行器,所以我们采取第一种策略。在这种策略中,因为Crawler必须可以从一个网页转移到另一个网页,所以必须找到该贞面上的超链接。程序首先应该可以解析网页的HTML代码,抽取出该页面内的超链接,然后通过递归或者非递归结构来实现爬虫程序。递归结构:递归是在一个方法中调用自己本身的程序设计技术。虽然比较容易实现但耗费内存且不能使用多线程技术,故不适合用于处理大量数据。非递归结构:这种方法使用队列的数据结构,当Crawler发现超连接后并不调用自己本身而是把超连接加入到等待队列中。当Crawler程序扫描完当前页面后会根据指定的策略访问队列中的下一个超连接地址。本系统采用的正是非递归结构。这种广度优先的方式,使得系统管理员可以手工指定多个初始链接,并通过配置文件指定抓取深度。这样不仅适用于大量数据的处理,便于对爬取过程进行控制和管理,也可以解决我们所面临的“信息孤岛”问题,即存在网页无法从其它网页的链接中找到而导致的无法遍历所有所需网页的问题。整个爬取过程是一个循环的过程,具体步骤如下:1.将初始URL放入爬行数据库CrawlDb中。2.根据CrawlDb中存储的URL及其状态生成一个待爬取的URL列表。3.从待爬取列表中取出下一个待爬取的URL,进行网络连接并下载URL对应网页。4.解析网页内容。将得到的网页送给搜索引擎的文档解析模块,由其对网页进行分析、信息抽取并将页面内容存储于网页库PageDb中。提取出所爬取页面中的所有链接,更新爬取信息库CrawlDbo重复步骤2-5直到达到指定的爬取层数。爬取模块的流程图如图2-2所示。图2-2爬取模块的流程图§2.3.4中文分词技术属于自然语言处理技术范畴。人可以通过自己的理解和经验来明白一句话中哪些是词,但是为了让计算机也能理解,就必须经过分词算法的处理。现有的分词算法主要可以分为三大类:基于字符串匹配、基于语义分析和基于统计的分词方法。1.基于字符串匹配的分词法这种方法又叫做机械分词方法,它是按照一定的策略将待分析的汉字串与一个足够大的词典中的词条进行匹配,若在词典中找到某个字符串,则匹配成功,即识别出一个词。常用的几种字符串分词方法如下:正向最大匹配法,按照由左到右的方向进行匹配:逆向最大匹配法,按照由右到左的方向进行匹配;最少切分,即使每一句中切出的词数最小。2.基于语义分析的分词法这种分词方法是通过让计算机模拟人对句子的理解,达到识别词的效果.其基本思想就是在分词的同时进行句法、语义分析,利用句法信息和语义信息来处理歧义现象。它通常包括三个部分:分词子系统、句法语义子系统、总控部分。在总控部分的协调下,分词子系统可以获得有关词、句子等的句法和语义信息来对分词歧义进行判断,即它模拟了人对句子的理解过程。由于汉语语言知识的笼统、复杂性,难以将各种语言信息组织成机器可直接读取的形式,因此目前基于语义分析的分词系统尚未广泛应用。3.基于统计的分词法从形式上看,词是稳定的字的组合,因此在上下文中,相邻的字同时出现的次数越多,就越有可能构成一个词。因此字与字相邻共现的频率或概率能够较好的反映成词的可信度,可以对语料中相邻共现的各个字的组合的频度进行统计,计算它们的互现信息。定义两个字的互现信息,计算两个汉字X,Y的相邻共现概率。互现信息体现了汉字之间结合关系的紧密程度。当紧密程度高于某一个阀值时,便可认为此字组可能构成了一个词。这种方法只需对语料中的字组频度进行统计,不需要切分词典,因而又叫做无词典分词法或统计取词方法。但这种方法也有一定的局限性,会经常抽出一些共现频度高、但并不是词的常用字组,并且对常用词的识别精度差,时空开销大。到底哪种分词算法的准确度更高,目前并无定论。基于运行效率和开发风险的考虑,本文采取了正向最大匹配的算法。§2.3.5索引和检索是搜索引擎系统中的关键部分,经过大量的调查和比较,本系统决定采用Lucene软件包来实现索引和检索部分。Lucene是一个软件库,一个开发工具包,而不是一个具有完整特征的搜索应用程序。它本身只关注文本的索引和搜索,并且完成的非常好。Lucene使得应用程序只针对它的问题域来处理业务规则,而把复杂的索引和搜索实现隐藏在一组简单易用的API之后。可以把Lucene看作低层,应用程序位于它之上。除此之外,Lucene还包括以下两方面的优势:一方面,大部分搜索引擎都是用B树结构来维护索引,索引的更新会导致大量的I/0操作。对此Lucene有如下改进:不是维护一个索引文件,而是在扩展索引的时候不断创建新的索引文件,然后定期的把这些新的小索引文件合并到原先的大索引中(批次的大小可以调整)。在不影响检索效率的前提下,提高了索引的效率。另一方面,Lucene并不关心数据的来源、格式甚至它的语言,只要能将它转换为文本即可。这就意味着你可以索引并搜索存放于文件中的数据:在远程服务器_L的win页面,存于本地文件系统的文档,简单的文本文件,微软Word文档,HTML或PDF文件或任何其它能够提取出文本信息的格式。下面,我们将从索引机制、检索模型、Lucene的组织结构以及数据流分析等方面来介绍这部分内容。1.索引机制为了快速搜索大量的文本,你必须首先索引那个文本然后把它转化为一个可以让你快速搜索的格式,从而不再需要进行缓慢的顺序扫描。这个转化过程称为建立索引。索引算法对索引器的性能有很大的影响。一个搜索引擎的有效性在很大程度上取决于索引的质量,因此为了提高检索效率,需要建立索引,按照倒排文件的格式存放。用户输入搜索条件后搜索程序将通过索引数据库进行检索然后把符合查询要求的数据按照一定的策略进行分级排列并返回给用户。可以把索引理解为一个可以让你快速随机访问存于其内部的词的数据结构。在Lucene索引文件中,一个索引是一个精心设计的数据结构,在文件系统中存储为一组索引文件。Lucene中的索引项可以分为客观索引项和内容索引项:客观项与文档的语意内容无关,如作者名、URL、更新时间、编码、长度、链接流行度(LinkPopularity)等等;内容索引项是用来反映文档内容的,如关键词及其权重、短语、单字等等。内容索引项可以分为单索引项和多索引项(或称短语索引项)两种。单索引项对于英文来讲是英语单词,比较容易提取,因为单词之间有天然的分限符(空格);对于中文等连续书写的语言,必须进行词语的切分。在搜索引擎中,一般要给单索引项赋与一个权值,以表示该索引项对文档的区分度,同时用来计算查询结果的相关度。使用的方法一般有统计法、信息论法和概率法。短语索引项的提取方法有统计法、概率法和语言学法。Lucene中使用了倒排索引机制,其主要内容和步骤如下:(1)首先要取得文章的关键词,作如下处理:①文章内容,可看作一个字符串,先找出字符串中的所有单词,即分词。英文单词由于用空格分隔,比较好处理。中文单词需要特殊的分词处理。②文章中的“in","once""too”等词没有什么实际意义,中文中的“的’,’’是”等字通常也无具体含义,这些不代表概念的词可以过滤掉。③用户通常希望查“He"时能把含“he","HE',的文章也找出来,所以所有单词需要统一大小写。④文章中的标点符号通常不表示某种概念,也可以过滤掉。(2)通常文本的对应关系是:“文章号”对“文章中所有关键词”。倒排索引把这个关系倒过来,变成:“关键词”对“拥有该关键词的所有文章号”。(3)通常仅知道关键词在哪些文章中出现还不够,还需要知道关键词在客章中出现次数和出现的位置.。这里的位置,通常是指字符位置,即记录该词是文章中第几个字符,优点是关键词高亮显示时定位快。(4)为了减小索引文件的大小,还可以对索引使用压缩技术。首先,对词典文件中的关键词进行了压缩,关键词压缩为<前缀长度,后缀>:其次大量用到的是对数字的压缩,数字只保存与上一个值的差值。2.向量空间模型检索模块的功能是根据用户的查询在索引库中快速检出文档,进行文档与查询的相关度评价,对结果进行排序输出。根据搜索引擎检索信息的方式不同,可以将信息检索模型分为:布尔逻辑模型、模糊逻辑模型、向量空间模型、概率模型等。布尔逻辑模型是最简单的检索模型。标准的布尔逻辑模型是二元逻辑,即一系列对应于网页文件特征的二元变量。这些变量通常为从文件中提取的文本检索词。用户根据检索项在文档中的布尔逻辑关系递交查询,匹配函数由布尔逻辑关系确定,所检索的文档要么与所键入的关键词相关,要么无关。检索结果一般不进行相关性排序。模糊逻辑模型是以逻辑真值为[0,1]的模糊逻辑为基础的,以隶属函数的概念来描述与所检索文档的相似程度。它在查询结果处理过程中引入模糊逻辑运算,将所检索的数据库文档信息与所键入的关键词进行模糊逻辑比较,按照相关的优先次序排列检索结果。向量空间模型是将查询和文件都映射为同一维空间矢量,用检索项的向量空间来表示用户的检索要求和数据库文档信息,通过欧式距离或余弦法则作为矢量空间的相似性比较,依向量空间的相似性来排列检索结果。向量空间模型不仅可以方便地产生有效的检索结果,而且能提供相关文档的文摘关键词,分类检索结果为用户提供准确的信息。概率模型是引入了概率排队理论利用相关反馈的归纳学习方法获取匹配函数以此来解决在信息检索中的不确定性问题。尽管它们各有优点,但目前使用率最高的仍然是向量空间模型。向量空间模型将给定的文本(文章、查询或文章中的一段等)转换成一个维数很高的向量,它的最大特点是可以方便地计算出任意2个向量的近似程度,即向量所对应的文本间的相似性。将所有文本和查询以向量形式表示,则针对特定的查询向量,比较它与所有文本向量的相似度,并依相似度将文本降序排列提交给用户。3.Lucene系统的结构组织Lucene的系统主要由基础结构、索引核心、直接操作索引文件的索引核心,又是系统的重点。Lucene将所有源码分为7个模块(即package),分属三大部分:基础结构:document包,util包索引核心:index包,store包对外接口:search包,analysis包从面向对象的观点来讲,Lucene遵循了最基本的一条程序设计准则:引入额外的抽象层以降低祸合性。首先,引入对索引文件的操作store的封装,然后将索引部分的实现建立在它之上,完成对索引核心的抽象。在索引核心的基础上开始设计对外的接口search与analysis。在每一个局部细节上,比如某些常用的数据结构与算法上,Lucene也充分的应用了这一条准则。在高度的面向对象理论的支撑下,使得Lucene的实现容易理解,易于扩展。Lucene在系统结构上的另一个特点表现为其引入了传统的客户端服务器结构以外的应用结构。Lucene可以作为一个运行库被包含进入应用本身中去,而不是作为一个单独的索引服务器存在。4.数据流分析理解Lucene系统结构的另一个方式是去探讨其中数据流的走向,并以此摸清楚Lucene系统内部的调用时序。在此基础上,我们能够更加深入的理解Lucene的系统结构组织,以方便以后在Lucene系统上的开发工作。这部分的分析,是深入Lucene系统的钥匙。在Lucene系统中的主要的数据流以及它们之间的关系如图2-3所示。图2-3Lucene数据流上图很好的表明了Lucene在内部的数据流组织情况,并且沿着数据流的方向我们也可以对与Lucene内部的执行时序有一个清楚的了解。图中共存在4种数据流,分别是文本流、token流、字节流与查询语句对象流。文本流表示了对于索引目标和交互控制的抽象,即用文本流表示了将要索引的文件,用文本流向用户输出信息;Token流是Lucene内部所使用的概念,是对传统文字中的词的概念的抽象,也是Lucene在建立索引时直接处理的最小单位。简单的讲Token就是一个词和所在域值的组合。字节流则是对文件抽象的直接操作的体现,通过固定长度的字节(Lucene定义为8比特位长)流的处理,将文件操作解脱出来,也做到了与平台文件系统的无关性。查询语句对象流则是仅仅在查询语句解析时用到的概念,它对查询语句抽象,通过类的继承结构反映查询语句的结构,将之传送到查找逻辑来进行查找的操作。§2.4系统技术架构设计§2.4.1目前,基于插件机制开发的软件越来越流行,因为它给软件本身提供了很好的可扩展性,可以让第三方的开发人员基于提供的接口开发自己的插件。通常,插件是满足一定接口协议的业务模块。插件主要分为代码和配置两个部分代码实现插件的业务;配置文件处理插件特性和插件之间的交互关系。插件(plug-in)和模块(module)有些类似,但是模块更为独立,不同的模块可以做各种各样不同的事情,而插件更可能是同一种类型的扩展。插件机制主要有如下优势:1.可扩展性。允许任何人扩展它的功能,只需对给定接口做简单的实现。2.灵活性。每个人都可以根据自己的需求写插件。3.可维护性。插件的开发者只要关注这个插件所要实现的功能,这使得内核更加简单,更容易维护。4.降低复杂度。把扩展功能从框架中剥离出来,降低了框架的复杂度,让框架更容易实现。基于以上所述,本系统确定采用插件机制。插件机制的一个重要内容就是插件接口。插件接口是一个协议,插件按照这个协议实现出来,就可以加入到应用程序中来。插件接口通常有两种:1.通用插件接口:它的接口函数通常有这些函数:init,deinit,run,stop。至于插件要完成什么功能,要插到哪里,由init函数里决定,它调用公共函数库里的函数把自己注册到框架中某个位置。2.专用插件接口:加入插件的方式通常采用配置信息来实现,配置信息可以是注册表,也可以配置文件,也可以动态注册进来,或者把插件放到指定的位置。这种形式的接口比较适合本系统。一般插件机制的实现,主要包括3个步骤:发现插件;装载插件;运行插件中的代码。了解插件机制首先需要对ClassLoader(类装载器)有所了解。ClassLoader是Java中用来装载类的部分,通过类的名字将其装载为JvM中实际的二进制类数据。在JvM中,任何一个类被加载,都是通过C1assLoader来实现的,同时,每个Class对象也都有一个引用指向装载它的ClassLoader,可以通过getClassLoader()方法得到它。C1assLoader使用所谓的“DelegationModel"(“双亲委托模型”)来查找、定位类资源。每一个C1assLoader都有自己一个父ClassLoader实例。当这个C1assLoader被要求加载一个类时,C1assLoader首先会查找该类是否已经被装载,如果没有,就询问自己的父C1assLoader,如果还不能装载,就调用自己的findClass()方法来装载类。§2.4.2考虑到整个校园网可能包含的数据量以及实际的运行环境,依靠单台计算机做物理存储不太现实。另外,单台计算机的实际处理能力也将受CPU等部件的处理能力限制。所以,本系统的数据支持系统必须是基于网络的分布式系统,基于开发风险和实际应用效果的考虑,我们决定采用一种名为MapReduce的分布式处理模型作为底层处理方法。MapReduce是一个分布式编程模式,它与处理/产生海量数据集的实现相关。就如同Java程序员可以不考虑内存泄露一样,MapReduce程序员也不需要关心海量数据如何被分配到多台机器上,不需要考虑如果参加计算的机器出现故障应该怎么办,不需要考虑这些机器间如何协作共同完成工作的。因为该模式把分布式的业务逻辑从复杂的细节中抽象出来。程序员可以只关心应用逻辑,关心根据哪些Key把问题进行分解,哪些操作是Map操作哪些操作是Reduce操作。其它并行计算中的复杂问题都交给Map/ReduceFramework去做,很大程度上简化了整个编程模型。这就允许程序员可以不需要有什么并发处理或者分布式系统的经验,就可以处理超大的分布式系统得资源。下面我们从编程模式、执行流程、输入输出类型、容错处理四个方面来介绍这个分布式处理模式。1.编程模式用户指定一个map函数,通过这个map函数处理key/value,产生一系列的中间key/value对,并且使用reduce函数来合并所有的具有相同key值的中间键值对中的值部分。使用这样的函数形式实现的程序可以自动分布到一个由普通机器组成的超大集群上并发执行。系统会解决输入数据的分布细节,跨越机器集群的程序执行调度,处理机器的失效,以及管理机器之间的通讯请求。MapReduce函数库的用户用两个函数来表达这样的计算:Map和ReduceoMap函数是用户自定义的函数,用于处理输入的键值对,并且产生一组中间的键值对。MapReduce函数库集合所有相同的中间键值对中的键值,并且发送给Reduce函数进行处理。Map操作是可以高度并行的,这对高性能要求的应用以及并行计算领域的需求非常有用。Reduce函数同样也是用户提供的,它用于处理中间键值,以及这个中间键值相关的值集合。这个函数合并这些值,最后形成一个相对较小的值集合。Map/Reduce其实就是Divide/Conquer的过程,通过把问题分解,使这些分解后的部分运算高度并行,再将分解后的结果根据某一个Key值合并,得到最终的结果。2.执行流程Map/Reduce模式的执行流程如下:(1)用户程序中的MapReduce函数库首先把输入文件分成M块,接着在各个机器上执行处理程序。(2)这些分派的执行程序中有一个程序比较特别,就是主控程序master。剩下的执行程序都是作为master分派工作的workermaster选择空闲的worker并且分配man任务或者reduce任务。(3)一个分配了map任务的worker读取并处理相关的输入小块,并且分析出的key/value对传递给用户定义的map函数。map函数产生的中间结果key/value对暂时缓冲到内存。(4)缓冲到内存的中间结果将被定时刷写到本地硬盘,这些数据通过分区函数分成R个区。这些中间结果在本地硬盘的位置信息将被发送回master,然后这个master负责把这些位置信息传送给reduce的worker。(5)当master通知reduce的worker关于中间key/value对的位置时,调用remoteprocedure来从mapworker的本地硬盘上读取缓冲的中间数据。当reduce的worker读到了所有的中间数据,就使用中间key进行排序,这样可以使得相同key的值都在一起。(6)reduceworker根据每一个唯一中间key来遍历所有的排序后的中间数据,并且把key和相关的中间结果值集合传递给用户定义的reduce函数。reduce函数对于本reduce区块的输出为一个最终的输出文件。(7)当所有的map任务和reduce任务都已经完成了的时候,master激活用户程序。在这时候MapReduce返回用户程序的调用点。3.输入和输出类型MapReduce函数库提供了读取几种不同格式的输入的支持。例如,text模式下,每行输入都被看成一个key/value对:key是在文件的偏移量,value是行的内容。另一个常用格式保存了根据key进行排序key/value对的顺序。用户可以通过简单的提供reader接口来进行新的输入类型的支持。reader函数不需要提供从文件读取数据。可以很容易定义一个reader函数从数据库读取数据,或者从保存在内存中的数据结构中读取数据。另外,MapReduce提供了一组用于输出的类型,可以产生不同格式的数据,并且用户也可以很简单的增加新的输出类型。4.容错处理某些情况下,用户程序的代码会让map或reduce函数在处理某些记录时崩溃掉。这种情况下MapReduce操作就不能完成。一般的做法是改掉bug然后再执行,但是有时候这种先改掉bug的方式不太可行。也许是因为bug是在第三方的lib里边,它的原代码不存在等等。并月_,很多情况下忽略一些记录不处理也是可以接受的。MapReduce提供了一执行模式,可检测到哪些记录会导致崩溃,并且跳过这些记录不处理,使得整个处理能继续进行。REF_Ref168484640\r\h第5章REF_Ref168484646\h基于规则引擎的虚拟银行贷款申请系统实现PAGE44第3章系统详细设计详细设计是对系统架构设计的细化,主要是在系统需求分析和架构设计的基础上,对系统中使用的类和对象进行进一步的细化。§3.1插件机制的详细设计§3.1.1重要概念首先介绍插件机制中的几个重要概念:1.扩展点:这是插件机制中最核心的概念。一个扩展点就相当于一个插头,可以被第三方进行功能上的扩展。一个扩展点必须以Java接口的形式对相应的接口进行定义。它应该记录双方交换的是什么类型的数据。扩展点的实现必须对第三方接口可能抛出的异常进行处理。插件之间的交互一般就是通过扩展点实现的。2.扩展:一个扩展就是对扩展点的一个对应匹配。这是对扩展点的第三方功能增强。扩展必须实现扩展点接口,而且应该按照指定的格式返回数据。3.插件:一个插件是一个或一组扩展实现。插件都要有驱动扩展点所必须的Java类和库。另外,一个插件必须有一个XML插件描述文件来作为一种包含元数据的部署描述符。一个插件可以有一个插件类来处理其生命周期。一组扩展点也可以聚在一个插件中。4.插件类:一个插件可以有一个由插件配置文件指明的插件类,每个插件类可以继承基类Plugin,Plugin类的实例可以用来进行相关功能插件的生命周期的管理。5.插件清单:每个插件必须有一个清单文件。插件清单文件是一个以机器可读形式存在的包含一组描述插件内容的相关元数据XML文件。除了含有扩展对应扩展点的信息之外,他还包含了可选插件类和所需的jar库。另外,它还描述了每个插件的依赖关系。因此,需要用XMLParser将这些信息Parse出来,形成插件的基本信息、。6.插件仓库:这是一种运行时插件的注册数据库,也是插件系统的核心所在。在进行插件依赖验证后,扩一展点和对应的扩展会在仓库中注册。运行时,一个扩展点必须向仓库查询己安装的扩展并且激活它们。§3.1.2类装载策略实现插件机制要面临的一个很重要的问题就是类装载。为了节省用户资源,需要实现插件的按需加载,只有真正需要的插件才会从文件中装载到内存中运行,也叫懒加载。实现起来最重要的方面就是声明和实现的分离。本系统采用了一种简单而有效的方案,每一个插件都有它自己的类装载器,在插件被启动的时候初始化。其中,插件所用的jar库必须在插件清单文件中定义。插件装载流程如下:1.当第一次需要使用某个插件时,首先试图获得对应扩展点上的实例。2.如果为空,则试图从插件仓库中得到该插件的扩展点。3.如果仓库为空:(1)试图从缓存内获得插件仓库。(2)如果未获得,则初始化所有插件。①首先,获得插件存放的位置。②将所有的配置文件读入,并将每个配置文件由PluginManifestParser解析成PluginDescriptor(包括每个Plug-in的ID、依赖插件、对应扩展点等等信息)。③检查这个插件所依赖的其它插件是否已经注册,如果没有,则需要首先将那些插件注册,在装载过程中会按照依赖的关系顺序来装载。④记录每个扩展点。⑤记录每个扩展点对应的扩展。⑥把插件仓库放入缓存。4.获得此扩展点对应的所有扩展的描述。5.根据获得的插件参数,确定所要调用的插件。6.用插件类加载器加载这个插件,生成插件实例。§3.1.3类图本系统对插件框架的实现,由包plugin来完成。这部分的类图如图3-1所示。图3-1插件框架的简要类图下面是主要类的简单介绍:1.Plugin:插件类,描述每个具体插件。2.PluginDescriptor:插件描述符,记录了插件的ID,Name,Version,依赖、扩展点等内容。3.PluginClassLoader:将PluginDescriptor中记录的相关的资源(jar包或者目录)利用URLC1assLoader类加载器装载。用于从指向JAR文件和目录的URL的搜索路径加载类和资源。4.PluginManifestParser:是一个工具类,用来分析每个插件的文件夹,把每个plugin.xm文件的内容进行分析,包含的所有实现类的关系。记录了所有的插件接口和插件接口内所包含的所有实现类的关系。5.pluginRepository:插件仓库:所有插件的注册表。提供了一个由插件ID到plugin类的映射。6.Extension:扩展类,相当于publisher-listener模式中的listener,对应与一个特定的ExtensionPoint(即publisher)。7.ExtensionPoint:描述了‘一个扩展点的相关元数据8.Pluggable:接口,说明可扩展。每个扩展点都继承这个接口。§3.1.4配置文件结构所有的插件都放在目录plugin下,目录位置由系统配置文件来指定。每个插件由一个目录加上目录里的plugin.xml及jar文件构成。插件配置文件的结构说明:<pluginid=“身份标示”name=“名称”version=“版本号”provider=“作者”class=“类名(可选)”><!一以下两个内容中引用的类库,都是作为本类使用反射时生成实例所需要的类库一><runtime><libraryname=“运行时的类库”><!一如果存在此元素,则保存到输出类库集合,否则存放到非输出类库集合><exportname=“*”/></library></runtime><requires><!需要注意,此处所需要的类库,包括该类库所需的类库,都不得在此引用本插件><importplugin=“所需类库”/></requires><extensionid=“本类的包名”name=“类名”point=“扩展点类名(即接口名)”><implementationid=“实现扩展的唯一标识”class=“实现扩展的类的类名”/><parametername=“参数名”value=“参数值”/></extension></plugin>§3.1.5扩展点设计下面对本系统所提供的所有扩展点进行简要的说明:Protocol:可以扩展系统所支持的网络协议。URLFilter:对要抓取的网页的Url进行限制。Parser:为不同类型的文档解析器提供的扩展点。ScoreFilter:为评分插件提供的扩展点。Analyzer:为不同语言特定的分析器提供的扩展点。IndexFilter:允许为索引中的Field添加元数据。HtmlParseFilter:为htmlparser添加额外的元数据。QueryFilter:为查询转换提供的扩展点。§3.2分布式处理和存储本文的分布式处理采用的是Hadoop框架。Hadoop是一个用于构建分布式应用程序的框架。Hadoop框架给应用程序透明的提供了一组稳定和可靠的接口。它是Java版本的分布式文件系统与Map/Reduce实现。主要包括两个方面,一个是按照GoogleFS的思想实现的分布式文件系统;一个是对Map/Reduce的实现。1.分布式文件系统在一系列机器上存储庞大的面向流的文件,包含多机的存储冗余和负载均衡。文件以块为单位存储在离散机器上,提供一个传统的input/output流接口用于文件读写。块的查找以及数据在网络上传输等细节由文件系统自动完成,对用户是透明的。它能很好地处理用于存储的机器序列,能方便地添加和删除一台机器。只要网上的机器序列能提供足够的存储空间,就要保证分布式文件系统的正常运作。而且它是建立在普通磁盘上的,不需要RAID控制器或者其它的磁盘阵列解决方案。2.对Map/Reduce的实现Hadoop与Google的MapReduce实现是基本一致的。其实现过程如下:(1)根据输入路径,先用FileSplit把输入的文件剁碎,根据InputFormat内含的RecordReader把资料读入成一组((key,value)对,然后按mappercount平均分给不同的Mapper处理。(2)Mapper进行Map操作(InitialKey,IntialValue)一>[(InterKey,InterValue)]从Inuptkey,value产生中间数据集。(3)Reducer进行Reduce操作(Interkey,InterValuesIterator)一>[(InterKey,InterValue)]}Reducer遍历所有节点取得需要的中间数据集,再对其进行去重、过滤等后期处理,得到结果。(4)最后由OutputFormat类内含的RecordWriter,将最终结果输出。结果输出可以是文件,也可以是其他形式。其中,Key是一个实现了org.apache.hadoop.WritableComparable接口的类,Value类实现了WritableoWritableComparable是Writable的子接口,Writable定义了输入输出的接口,WritableComparable另外继承Comparable,因此Key总是有序的。执行完毕后,所有存放在输入路径下的数据都在被转换之后按照指定的格式存放于输出路径中。本文中的爬取模块等重要部分均是在此分布式处理模型的基础上实现,使得本系统可以使用多台机器并行处理,大大提高了运行效率,分布式处理在很多情况下都非常有用。§3.3主要模块详细设计§3.3.1爬取模块1.爬取要面临的问题及解决方法:(1)如何处理多种网络协议并建立链接:主要工作将由protocol插件完成。而且可以继续添加插件,增加系统对不同协议的支持。(2)网页解析:需要各种解析器来分析蜘蛛程序遇到的每一个页面。主要工作由parse插件完成。现在已有的插件,除了html页面解析器之外,还有支持Word,Excel以及PDF格式的解析器插件。而且良好的可扩展性使得系统有可能处理更多的文档格式。(3)线程控制:系统管理人员可以通过向系统输入爬取深度和爬取网页的线程数量来控制系统的运行。因此,系统可以有效的控制线程的数量,从而高效而稳定的运行。同一域名下的url链接会被合成到同一个爬取列表。当同时使用多个线程的时候,易于防止产生重复爬取的现象,也可以防止过多的线程对同一主机同时抓取造成主机负担过重。(4)爬取异常的处理:爬取时可能会遇到重定向、无法建立连接等等多种异常,根据获得的不同的状态码,分情况处理。(5)私有信息的保护:由于搜索引擎本身的特点,容易破坏私有信息的保护性。本系统遵循RobotsExclusionProtocol,网站管理者可以通过robots.txt定义需要保护的私有网页数据不被爬取。(6)网页更新周期:系统管理人员可以通过书写脚本定期进行更新爬取。方便灵活,有助于提高检索质量和效率。更新时不必把所有的网页重新爬取一遍,对于大部分的网页,只需要判断网臾的属性(主要是修改日期),把得到的属性和上次爬取时记录的属性相比较,如果一样则不用更新。2.页面评分本系统提供了一个扩展点,用于加入各种页面评分算法的实现。当前采用的方法是在每一个爬取/更新周期中,更新CrawlDb的时候,调用评分插件来更新页面评分。具体实现将在第四章中进行详细说明。3.爬取状态信息爬取时需要记录大量的状态信息,本系统中有一个专门的数据结构记录爬取状态。CrawlData,记录的主要信息有:爬取状态、爬取时间、重试次数、爬取间隔、页面评分、页面摘要、页面修改时间等等。4.URL状态信息采集时,在Crawler爬取网页的过程中,URL主要有以下几种状态:Waite,ready,fetch,Success,retry,redirect,gone。在同一时间,URL只能是其中一种状态。5.重复网页的消除重复会影响到用户体验,消耗搜索引擎资源。在建立索引的时候,我们需要快速的对重复内容的网页进行识别和消重。但是与通用搜索引擎所需面对的情况不同,校园网中通常没有大量转载文章的干扰。所以,在内容消重方面的需求不明显,再加上对实现效率的考虑,校园网内的搜索引擎只是通过对页面内容作MD5Hash得到页面的特征指纹,来实现简单而有效的页面消重。系统还留出了良好的扩展接口,可以对页面特征的提取进一步扩展。另外,我们实现了基于链接的页面消重。这主要用于防止循环爬取以及更新时的链接比较,更新时遇到相同的URL通过判断更新时间来保证存储的是最新版本。基于运行效率的考虑我们采用先对链接进行MD5Hash的方式来提高比较速度。§3.3.2文档解析模块搜索引擎采集到网页后,离返回给我们所需要的信息还差很远,必须要在数据采集之后,建立索引之前,对采集到的文档进行解析。因为web上的文档并没有一个统一的格式,要想对各种类型的文档内容建立索引,就必须首先抽取出文本内容,这也正是文档解析模块的主要工作。文档解析模块是基于插件机制实现的。Parser就是解析器的扩展点,通过调用不同的插件作为解析器来解析不同格式的文档。调用插件进行文档解析的一个典型流程如下:1.Feteher类通过调用parseUtil类的parse()函数来解析从web上获得的文档内容。2.parse必须首先获得适当的解析器。(1)它将参数ContentType传入ParserFactory,试图获得对应的解析器。(2)ParserFactory通过传入Parser接口的X_ID从插件仓库中得到对应的extensionPoint。①如果仓库为空,则试图从缓存内获得插件仓库。②如果未获得插件仓库,则初始化所有插件。(3)若不能获得参数对应扩展项的实例,则取得此扩展点对应的所有扩展项的描述。extensionPoint.getExtensions()(4)通过参数的匹配获得扩展项matehExtensions()(5)生成实例getExtensionInstance(),并放入缓存setObject(string,objeet)。3.parse()利用获得的解析器插件解析文档内容,获得包含文本在内的解析数据。其中,Fetcher类提供参数ConientType,调用解析器的过程全部由插件框架来完成。最后获得的是经过解析的包含文本内容的文档结果。§3.3.3索引和检索模块使用Lucene作为检索核心,就必须深入了解Lucene的一些特性,才能确切的判断采用它是否合适以及如何使用它提供的定义良好的接口来实现本系统所需的功能,并在此基础上进行扩充开发实现符合自己需求的索引和检索模块。1.下面将分别从排序机制、核心索引类、核心检索类等几个方面对Lucene进行分析。(1)基于Lucene的应用开发在了解Lucene结构特征的基础上,我们可以通过扩充Lucene系统来完成一个完备的全文检索引擎,并构建各种应用系统。首先,我们需要的是按照目标语言的词法结构来构建相应的词法分析逻辑,实现Lucene在analysis中定义的接口,为lucene提供目标系统所使用的语言处理能力。Lucene默认的已经实现了英文和德文的简单词法分析逻辑,即按照空格分词,并去除常用的语法词,如英语中的is,am,are等等。主要需要参考实现的接口在analysis中的Analyzer.java和Tokenizer.java中定义。其次,需要按照被索引的文件的格式来提供相应的文本分析逻辑,这里是指除了词法分析之外的部分,比如HTML文件,通常需要把其中的内容按照所属于域分门别类加入索引,这就需要从document中定义的类document继承,定义自己的HtmlDocument类,然后就可以将之交给index模块来写入索引文件。当然,除此之外我们还可以在其他方面对Lucene进行改造。(2)Lucene的排序机制Lucene系统的排序是根据信息检索的向量空间模型来计算的。文档(d)和查询条件(q)之间越接近,那么文档(d)的得分就越高。在详细分析了Lucene的排序机制之后,实现索引模块的时候充分考虑了各种影响排序的因素,比如说文档参数的计算,我们将在第四章对这部分的实现进行详细说明。Lucene在输出检索结果时对结果的排序公式如下:Score_d=sum_t(tf_q*idf_t/norm_q*tf_d*idf_t/norm_d_t*boost_t)*coord_q_d参数说明:①score_d.:该文档d的得分。②sum_t:所有term得分的总和。③tf_q:查询串q中,某个term出项的次数的平方根。④tf_d:文档d中,出现某个term的次数的平方根,查询关键词在某个文档中出现的频率越高,文档的得分就越高。⑤idf_t:逆文档频率(InverseDocumentFrequency),表示的是在所有文档中,term一共在多少个文档中出现过。因为文档出现的次数越少就越容易定位,所以包含term的文档数越少,得分就越高。2.下面来描述本部分的接口设计和参数设定。(1)接口设计①索引模块主要函数:Indexer:通过调用Lucene中函数建立索引,并负责设置相关参数。IndexFilter,IndexFilters:系统预留的扩展点,允许添加索引字段等元数据。②检索模块主要函数:Hit:一个查询的一个对应匹配结果。HitS:一个查询的一组对应匹配结果。Query:查询的基本单元。QueryFilter,QueryFilters:为查询处理提供的扩展点。Sullunary:查询结果的摘要。Summarizer,SununarizerFae:为摘要生成提供的扩展点。目前经实现的摘要生成插件主要是根据建立索引时所记录的每个Term在文档的位置,从文档中摘取出含有查询词的信息片断。Searcher:封装了检索需要的大部分函数,为系统提供检索功能。Indexsearcher:通过调用Lucene中的函数进行检索,并负责传递参数(2)索引字段和权重经过多次的试验,最后选定的索引字段包括:url,host,anchor,title和content。每个索引字段的索引方式及其权重设定如表3一1所示:表3-1各字段索引方式及其权重FieldurlHostanchortitleContentStoreYesNoNoYesNoTokenizedYesYesYesYesYesBoost4.02.02.01.51.0从上表可以看出,每个字段在索引时所采用的方式不同,host,anchor,contont都采用了unstored方式,这种情况适合于索引大量的文本而不需要以原始形式重新获得它,从而可以减少需要存储的数据量。另外,所有的索引字段都需要进行分词处理。表中的第三个参数表示每个字段所分配的权重,因为同一个检索词在不同字段中出现所代表的重要程度显然是不相同的。另外,还有两个字段digest和boost,并不用于索引,而是存储下来用于消重。Digest表示信息指纹,boost则表示页面重要度,在根据信息指纹发现页面重复的时候,根据boost消重。还有一个Segment字段,用于根据索引找到对应文档,也只存储并不用作索引。结论结论本文针对校园网内信息检索的需要设计了一个校园网搜索引擎。论文首先研究了搜索引擎的基本原理、核心技术和处理流程,然后结合对校园网搜索引擎具体需求的分析,设计了校园网搜索引擎系统的整个架构。本文详细说明了该系统的开发过程和方法,首先根据需求分析提出系统设计的目标和原则,然后分析系统设计流程,之后对系统几个关键模块:爬取模块、中文分词模块、索引和检索模块以及插件机制的实现、分布式处理模型的应用,网络爬虫的设计和实现,借助Lucene进行实现的索引和搜索部分等做了详细设计,并对各模块可能用到算法做优劣比较,最后根据本校园网搜索引擎的个性化需求选择了最优模式。最后设计方案采用如下模式设计各模块:爬取模块采用的广度优先的方式;中文分词模块采取了正向最大匹配的算法;索引和检索模块采用Lucene软件包来实现;插件机制采用MapReduce分布式处理模型。对于本系统和本文来说,未来还有许多地方可以进一步改进。比如,可以添加对不同网络协议的支持,添加对不同类型的文档的解析,查询扩展,更好的分词算法的实现等等,不过本系统设计了扩展性良好的插件机制,可以很方便的添加此类功能。附录PAGE16参考文献张宏斌、朱明富、陈德军.智能化搜索引擎技术的研究进展.信息与控制,2003,6(32):526-530张卫丰、徐宝文.Web搜索引擎框架研究计算机研究与发展.2000,37(3):376-378杨丽萍、马继涛、张虹霞.网络搜索引擎分类与发展.情报学报,2006,2500):421-424陈鑫、常致全.智能化搜索引擎原理及实现.计算机应用,2003,(23):191-193张兴华.智能搜索引擎的机理、实现技术及发展趋势.现代情报,2003,(12):66-68李名智.中文搜索引擎发展的现状、问题及对策.中国信息导报,1999,2:P3O-P32聂哲.基于WEB的面向主题搜索引擎的设计与实现.计算机工程与设计,2003,2:P60-P62汪涛.主题爬虫的设计与实现.计算机应用,2004,6:P27O一272李晓明,闫宏飞,王继民.搜索引擎-原理、技术和系统.2005:183-186[10]曹军.Google的PageRank技术剖析.情报杂志,2002,10:3-4[11]左雄辉,糜麒.个性化搜索引擎研究.计算机工程与应用,2005,vol.17:190-192[12]刘峰.通用中英文专业搜索引擎技术的研究与应用.[大连理工大学硕士学位论文].2004:5-10[13]徐宝文,张卫丰.搜索引擎与信息获取技术.北京:清华大学出版社,2003:25-28[14]唐铭节.论搜索引擎的发展概况及发展趋势.情报杂志,2001,(5):70-71[15]杨文清.基于Web文档库的中文全文检索技术与实现.[南京大学硕士学位论文],1998:l-45[16]许晋军,苏新宁.信息搜索引擎综述.计算机系统应用,1999,4(9):22-24[17]唐铭节.论搜索引擎的发展概况及发展趋势.情报杂志,2001,(5):70-71[18]邹涛.中文文档自动分类系统的设计与实现.中文信息学报,1998,13(3):26-32[19]边新志.搜索引擎原理分析及实现.农机化研究,2005,(01):248·251[20]都云程,卢献华.中文搜索引擎现状与展望.中文信息学报,1999,13(3):61-64致谢至此论文完成之际,首先要感谢侯晓静老师,她严谨的治学态度和一丝不苟的精神,给我的留下了难忘的记忆。从开题、撰写、中期检查到
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工程施工进度审核规范
- 花岗岩石板材项目社会稳定风险评估报告
- 车路云一体化交通安全突发事故应急处置方案
- 余热余压回收项目碳减排量核算报告
- 注塑产品不良分析报告
- 地下室堵漏防渗施工方案
- 县级体育馆可行性研究报告
- 起重机械设备维护与点检管理手册
- 石灰石矿山开采项目社会稳定风险评估报告
- 输电线路雨季施工安全检查表
- 煤矿新工人入井安全须知培训
- 江西文演集团招聘笔试题库2026
- 地下空间窒息现场应急处置方案
- 日语阅读试题及答案
- 2026 第六届“四川工匠杯”职业技能大赛 餐厅服务赛项 理论考试参考题库 含答案
- 医院检验科设备更新计划方案
- 2025中国兵器工业第五九研究所招聘参考题库带答案解析
- 医患沟通中的风险防范策略实践
- TCGMA033001-2018压缩空气站能效分级指南
- 2025年10月自考13886经济学原理(初级)
- 《2+N糖尿病逆转治疗行业规范与操作流程》
评论
0/150
提交评论