搜索引擎语义排序的设计与实现论文_第1页
搜索引擎语义排序的设计与实现论文_第2页
搜索引擎语义排序的设计与实现论文_第3页
搜索引擎语义排序的设计与实现论文_第4页
搜索引擎语义排序的设计与实现论文_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第页共43页随着互联网的不断发展和日益普及,信息技术的不断发展,网上的信息量在爆炸性增长,网络已经深入到了人们生活的各个方面,影响并改变了人们生活方式和思维方式。中国互联网络信息中心(CNNIC)在京发布第33次《中国互联网络发展状况统计报告》。《报告》显示,截至2013年12月,中国网民规模达6.18亿,互联网普及率为45.8%,网站数达320万,域名数目已达1844万,全球Web页面的数目已经超过200亿,中国的网页数估计也超过了40亿。在如此浩瀚的海洋里寻找信息,就像“大海捞针”一样,急切需要一种工具使我们可以迅速找到我们想要的内容,这就是搜索引擎发展的巨大市场和动力。著名的因特网搜索引擎包括Baidu、Google、Sohu等。搜索引擎指自动从因特网搜集信息,经过一定整理以后,提供给用户进行查询的系统。因特网上的信息浩瀚万千,而且毫无秩序,所有的信息像汪洋上的一个个小岛,网页链接是这些小岛之间纵横交错的桥梁,而搜索引擎,则为用户绘制一幅一目了然的信息地图,供用户随时查阅。它包括信息搜集、信息整理和用户查询三部分。“飞梦”搜索引擎系统通过Hertix实现了自动将Web上的海量网页抓取到本地。然后解析网页,提取其中的有用内容,为网页建立本体词库,对解析网页生成的信息文件进行分词,并建立索引,将索引存入数据库中。通过语义排序实现将索引按照一定的排序规则排序,并将排好序的的结果存于缓存,以供用户查询。“飞梦”搜索引擎系统为用户提供了简洁的查询页面,用户通过此界面完成与系统的交互。当用户在查询界面上输入要检索的信息后,系统将在可以接受的时间内,返回用户所需的结果集。本系统实现了搜索引擎的基本功能,能够使用户可以简单,快捷,精确的对感兴趣的东西进行检索。2课题背景2.1搜索引擎的概念由于网络信息的飞速增长,我们不得不面对浩瀚的网络资源,这极大地改变了人们获取信息的方式,面对浩如烟海的网络信息,如何才能迅速、方便地获取有效信息,日益成为人们关心的问题,搜索引擎的出现极大地缓解了这一矛盾。它为所有网上冲浪的用户提供了一个入口,毫不夸张的说,所有的用户都可以从搜索出发到达自己想去的网上任何一个地方。因此它也成为除了电子邮件以外最多人使用的网上服务。搜索引擎是一种应用在Web上的,为用户提供检索服务的软件系统,它以一定的策略在Web上搜集和发现信息,并对信息进行分析、提取、组织等处理后形成供检索用的数据库。从使用者的角度看,这种软件系统提供一个网页界面,让他通过浏览器提交一个词语或者短语,搜索引擎会在数据库中进行搜寻,如果找到与用户要求内容相符的网站,便采用特殊的算法——通常根据网页中关键词的匹配程度,出现的位置/频次,链接质量等——计算出各网页的相关度及排名等级,然后根据关联度高低,按顺序将这些网页链接返回给用户。这个与用户输入内容相关的信息列表(常常会是很长一个列表,例如包含1万个条目)。这个列表中的每一条目代表一篇网页,至少有3个元素:(1)标题:以某种方式得到的网页内容的标题。最简单的方式就是从网页的<TITLE></TITLE>标签中提取的内容。(尽管在一些情况下并不真正反映网页的内容)。(2)URL:该网页对应的“访问地址”。有经验的Web用户常常可以通过这个元素对网页内容的权威性进行判断,例如上面的内容通常就比(某个假想的个人网站)上的要更权威些(不排除后者上的内容更有趣些)。(3)摘要:以某种方式得到的网页内容的摘要。最简单的一种方式就是将网页内容的头若干字节(例如512)截取下来作为摘要。通过浏览这些元素,用户对相应的网页是否真正包含他所需的信息进行判断。比较肯定的话则可以点击上述URL,从而得到该网页的全文。搜索引擎提供信息查询服务的时候,它面对的只是查询词。而有不同背景的人可能提交相同的查询词,关心的是和这个查询词相关的不同方面的信息,但搜索引擎通常是不知道用户背景的,因此搜索引擎既要争取不漏掉任何相关的信息,还要争取将那些“最可能被关心”的信息排在列表的前面。这也就是对搜索引擎的根本要求。除此以外,考虑到搜索引擎的应用环境是Web,因此对大量并发用户查询的响应性能也是一个不能忽略的重要性能指标。2.2搜索引擎的发展历史2.2.1搜索引擎的起源所有搜索引擎的祖先,是1990年由Montreal的McGillUniversity三名学生(AlanEmtage、PeterDeutsch、BillWheelan)发明的Archie(ArchieFAQ)。AlanEmtage等想到了开发一个可以用文件名查找文件的系统,于是便有了Archie。Archie是第一个自动索引互联网上匿名FTP网站文件的程序,但它还不是真正的搜索引擎。Archie是一个可搜索的FTP文件名列表,用户必须输入精确的文件名搜索,然后Archie会告诉用户哪一个FTP地址可以下载该文件。世界上第一个Spider程序,是MITMatthewGray的WorldwideWebWanderer,用于追踪互联网发展规模。刚开始它只用来统计互联网上的服务器数量,后来则发展为也能够捕获网址(URL)2.2.2第一代搜索引擎第一代搜索引擎出现于1994年。这类搜索引擎一般都索引少于1,000,000个网页,极少重新搜集网页并去刷新索引。而且其检索速度非常慢,一般都要等待10秒甚至更长的时间。在实现技术上也基本沿用较为成熟的IR(InformationRetrieval)、网络、数据库等技术,相当于利用一些已有技术实现的一个WWW上的应用。1994年4月,斯坦福大学的两名博士生,美籍华人杨致远和DavidFilo共同创办了Yahoo!。随着访问量和收录链接数的增长,Yahoo目录开始支持简单的数据库搜索。因为Yahoo!的数据是手工输入的,所以不能真正被归为搜索引擎,事实上只是一个可搜索的目录。Yahoo!中收录的网站,因为都附有简介信息,所以搜索效率明显提高。2.2.3第二代搜索引擎大约在1996年出现的第二代搜索引擎系统大多采用分布式方案(多个微型计算机协同工作)来提高数据规模、响应速度和用户数量,它们一般都保持一个大约50,000,000网页的索引数据库,每天能够响应10,000,000次用户检索请求。1997年11月,当时最先进的几个搜索引擎号称能建立从2,000,000到100,000,000的网页索引。Altavista搜索引擎声称他们每天大概要承受20,000,000次查询。2000年搜索引擎2000年大会上,按照Google公司总裁LarryPage的演讲,Google正在用3,000台运行Linux系统的个人电脑在搜集Web上的网页,而且以每天30台的速度向这个微机集群里添加电脑,以保持与网络的发展相同步。每台微机运行多个爬虫程序搜集网页的峰值速度是每秒100个网页,平均速度是每秒48.5个网页,一天可以搜集超过4,000,000网页搜索引擎一词在国内外因特网领域被广泛使用,然而他的含义却不尽相同。在美国搜索引擎通常指的是基于因特网的搜索引擎,他们通过网络机器人程序收集上千万到几亿个网页,并且每一个词都被搜索引擎索引,也就是我们说的全文检索。著名的因特网搜索引擎包括FirstSearch、Google、HotBot等。1997年8月,Northernlight搜索引擎正式现身。它曾是拥有最大数据库的搜索引擎之一,它没有StopWords,它有出色的CurrentNews、7100多出版物组成的SpecialCollection、良好的高级搜索语法,第一个支持对搜索结果进行简单的自动分类。2.2.4当前著名的搜索引擎简介1998年10月之前,Google只是斯坦福大学(StanfordUniversity)的一个小项目BackRub。1995年博士生LarryPage开始学习搜索引擎设计,于1997年9月15日注册了的域名,1997年底,在SergeyBrin和ScottHassan、AlanSteremberg的共同参与下,BachRub开始提供Demo。1999年2月,Google完成了从Alpha版到Beta版的蜕变。Google公司则把1998年9月27日认作自己的生日。Google以网页级别(Pagerank)为基础,判断网页的重要性,使得搜索结果的相关性大大增强。Google公司的奇客(Geek)文化氛围、不作恶(Don’tbeevil)的理念,为Google赢得了极高的口碑和品牌美誉。2006年4月,Google宣布其中文名称“谷歌”,这是Google第一个在非英语国家起的名字。1996年8月,sohu公司成立,制作中文网站分类目录,曾有“出门找地图,上网找搜狐”的美誉。随着互联网网站的急剧增加,这种人工编辑的分类目录已经不适应。sohu于2004年8月独立域名的搜索网站“搜狗”,自称“第三代搜索引擎”。2000年1月,两位北大校友,超链分析专利发明人、前Infoseek资深工程师李彦宏与好友徐勇(加州伯克利分校博士后)在北京中关村创立了百度(Baidu)公司。2001年8月发布B搜索引擎Beta版(此前Baidu只为其它门户网站搜狐新浪Tom等提供搜索引擎),2001年10月22日正式发布Baidu搜索引擎,专注于中文搜索。Baidu搜索引擎的其它特色包括:百度快照、网页预览/预览全部网页、相关搜索词、错别字纠正提示、mp3搜索、Flash搜索。2002年3月闪电计划(BlitzenProject)开始后,技术升级明显加快。后推出贴吧、知道、地图、国学、百科、文档、视频、博客等一系列产品,深受网民欢迎。2005年8月5日在纳斯达克上市,发行价为USD27.00,代号为BIDU。开盘价USD66.00,以USD122.54收盘,涨幅353.85%,创下了5年以来美国股市上市新股当日涨幅最高纪录。2003年12月23日,原慧聪搜索正式独立运做,成立了中国搜索。2004年2月,中国搜索发布桌面搜索引擎网络猪1.0,2006年3月中搜将网络猪更名为IG(InternetGateway)。2.3搜索引擎的分类2.3.1全文索引全文搜索引擎是名副其实的搜索引擎,国外代表有Google,国内则有著名的百度搜索。它们从互联网提取各个网站的信息(以网页文字为主),建立起数据库,并能检索与用户查询条件相匹配的记录,按一定的排列顺序返回结果。

根据搜索结果来源的不同,全文搜索引擎可分为两类,一类拥有自己的检索程序(Indexer),俗称“蜘蛛”(Spider)程序或“机器人”(Robot)程序,能自建网页数据库,搜索结果直接从自身的数据库中调用,上面提到的Google和百度就属于此类;另一类则是租用其他搜索引擎的数据库,并按自定的格式排列搜索结果,如Lycos搜索引擎。2.3.2目录索引目录索引虽然有搜索功能,但严格意义上不能称为真正的搜索引擎,只是按目录分类的网站链接列表而已。用户完全可以按照分类目录找到所需要的信息,不依靠关键词(Keywords)进行查询。目录索引中最具代表性的莫过于大名鼎鼎的Yahoo、新浪分类目录搜索。2.3.3元搜索引擎1995年,一种新的搜索引擎形式出现了——元搜索引擎(MetaSearchEngine)。用户只需提交一次搜索请求,由元搜索引擎负责转换处理后提交给多个预先选定的独立搜索引擎,并将从各独立搜索引擎返回的所有查询结果,集中起来处理后再返回给用户。第一个元搜索引擎,是Washington大学硕士生EricSelberg和OrenEtzioni的Metacrawler。元搜索引擎(METASearchEngine)接受用户查询请求后,同时在多个搜索引擎上搜索,并将结果返回给用户。著名的元搜索引擎有InfoSpace、Dogpile、Vivisimo等,中文元搜索引擎中具代表性的是搜星搜索引擎。在搜索结果排列方面,有的直接按来源排列搜索结果,如Dogpile;有的则按自定的规则将结果重新排列组合,如Vivisimo。2.3.4垂直搜索引擎垂直搜索是针对某一个行业的专业搜索引擎,是搜索引擎的细分和延伸,是对网页库中的某类专门的信息进行一次整合,定向分字段抽取出需要的数据进行处理后再以某种形式返回给用户。相对通用搜索引擎的信息量大、查询不准确、深度不够等提出来的新的搜索引擎服务模式,通过针对某一特定领域、某一特定人群或某一特定需求提供的有一定价值的信息和相关服务。其特点就是“专、精、深”,且具有行业色彩,相比较通用搜索引擎的海量信息无序化,垂直搜索引擎则显得更加专注、具体和深入。2.3.5其他非主流搜索引擎形式(1)集合式搜索引擎该搜索引擎类似元搜索引擎,区别在于它并非同时调用多个搜索引擎进行搜索,而是由用户从提供的若干搜索引擎中选择,如HotBot在2002年底推出的搜索引擎。(2)门户搜索引擎AOLSearch、MSNSearch等虽然提供搜索服务,但自身既没有分类目录也没有网页数据库,其搜索结果完全来自其他搜索引擎。(3)免费链接列表(FreeForAllLinks简称FFA)一般只简单地滚动链接条目,少部分有简单的分类目录,不过规模要比Yahoo!等目录索引小很多。3系统需求分析3.1搜索引擎的工作原理为了帮助大家更好的理解本系统,首先向大家介绍一下搜索引擎的工作原理。搜索引擎系统由四部分构成:信息搜集模块、分析索引模块和检索服务模块、。信息搜集模块采用一种像真人一样可以浏览网页的Robot程序,这类程序能自动地在网上漫游,从一个或一组URL开始访问,然后下载相应的网页,抽取页面中的链接,按照某种算法决定下一步要访问的URL地址,常用的算法有广度优先和深度优先。Robot(机器人)一词对编程者有特殊的意义。ComputerRobot是指某个能以人类无法达到的速度不断重复执行某项任务的自动程序。由于专门用于检索信息的Robot程序像蜘蛛(spider)一样在网络间爬来爬去,因此,搜索引擎的Robot程序被称为spider程序。Robot程序不停地重复这个访问过程,搜集信息资料,存储到本地数据库,直至再没有满足条件的新的URL地址或超出了某些条件限制。分析索引模块将Robot程序采集的信息进行比较分析,删除那些内容基本相似的转载网页,以及未加任何修改,内容完全相同的镜像网页,然后,对留存的网页信息,剔除HTML等的标志符号,提取出网页源文件内容特征的关键词,汇集成索引数据库,并随时顺着链接跟踪网上新加入的主页,为其建立索引。索引数据库就是一个很大的查询表,主要的字段有:网站的名称、标题、URL地址、摘要等。对Web页面内容进行全文索引,即对Web页中每一个单词进行标引。从网页中按某些分类或特征对信息进行抽取。例如:Lycos仅标引文件名、文件标题和全文前20行的内容。而AltaVista的索引处理则最为全面,不仅对网页的所有文本、图像及链接等进行索引,而且还记录单词之间的相对位置。一般来说,标引的索引词越多,检索的全面性越高,分析索引模块是搜索引擎提供检索服务的基础。3.2系统功能需求本系统的功能需求是:搜索引擎系统从一个或一组已URL开始访问互联网,下载相关的网页信息及新的链接,以一定的策略遍历新链接,并读取新链接的信息内容,将它们加入到本地数据库。然后,由分析索引模块对这些数据进行处理组织后,形成索引数据库。用户通过用户模块提交查询服务,在搜索框中输入检索式,系统就会自动完成检索,并按一定的排列方式返回检索结果。对它有如下基本要求。能够接受用户通过浏览器提交的查询词或者短语,记作q,例如“联想”,“IBM”,“hp”等等。在一个可以接受的时间内返回一个和该用户查询匹配的网页信息列表。系统根据功能可分为两个部分:检索界面,可以接受用户提交的检索要求;检索结果,将检索到的资料整理组织后按一定顺序提供给用户。搜索引擎的检索结果通常包含大量文献,为了将最有“价值”的网页提供给用户,搜索引擎一般都能按查询的相关程度对检索结果进行排列,最相关的文献通常排在最前面。3.3系统性能需求(1)系统要有很好的可移植性。(2)系统必须有很好的可维护性,代码的格式规范。(3)系统要有健壮性。(4)界面设计要求简洁、美观、大方。(5)系统运行必须稳定,消耗资源少,代码效率高。(6)系统运行环境:Windows操作系统,火狐浏览器。(7)系统开发环境:myeclips,Oracle10g数据库。4系统总体设计4.1“飞梦”搜索引擎系统总体介绍4.1.1“飞梦”搜索引擎系统工作机制首先通过网页爬虫技术将网页链接或者摘要搜集到数据库中,然后定时将缓存更新,用户在查询时可直接从缓存中读取信息,大大提高了响应速度。用户的请求在得到响应后应先将查询结果存于缓存,然后调用排序算法进行二次排序,最后将排序好的结果响应给用户。4.1.2几种常见的语义WEB排序技术(1)基于Web页面内容排序基于Web页面内容的排序算法,主要源自传统信息检索中常用的文本文档加权标引算法,其基本思想是通过计算Web页面中与查询关键词相匹配的索引项,对Web页面主题内容的表征程度进行排序.基于Web页面内容的排序算法非常丰富,其中以基于词频和位置的加权排序算法应用最为广泛,有些算法尽管可以获得更好的排序效果,但往往由于分析处理过于复杂而不能满足海量Web信息检索快速响应的需要.(2)基于Web页面链接排序Web页面的链接反映的是Web页面之间形成的“参考”、“引用”或“推荐”关系,如果某一Web页面被较多页面链接,则表示它相对被人关注,其内容应该是比较重要或比较有用的,基于Web页面链接分析的排序算法正是基于这一思想来度量Web页面的重要性(质量)进行排序其中以PageRank算法最具代表性.PageRank算法以“随机冲浪”模型为理论基础,而HITS算法使用Authority和Hub页面相互加强模型,二者都利用了页面和超链接组成的有向图,根据连接关系进行递归运算来确定Web页面的重要性得分.但是,PageRank算法在计算时没有考虑用户的具体查询内容和Web页面实际表达内容,对与页面相链接的其他页面是否和该页面主题相关也没有考虑,因此在排序时容易产生主题漂移(topicdrift).另外,页面的PageRank值单纯依靠人链数量的多寡及入链的PageRank值进行计算,使得许多内容质量很高的页面可能因为人链数量过少只能获得较低的排名,旧页面的排序往往比新页面更为有利,因为新页面获得的链接数量通常要少于旧页面,搜索引擎优化(SEO)人员也很容易通过增加页面入链数量等方式来获得更高的页面排名。(3)基于检索用户排序搜索引擎查询结果是否相关、排序是否合理最终取决于用户的主观判断.不同用户的动机、知识、兴趣、社会阅历等差异很大,因而对检索结果的评价也会产生较大的偏差,理想的检索排序算法应该对来自用户的个人因素加以考虑.基于检索用户的排序主要分为2种:一种是基于检索用户群体的排序,如AskJeeves公司提出的DirectHit算法;一种是基于检索用户个体的排序,也称为个性化检索排序,用户个性的表达可以通过2种方式完成:一种是用户主动提交个人信息或直接对系统进行相关反馈;另一种是系统通过分析该用户在客户端或服务器端的检索行为加以确定.4.1.3语义本体概念本体知识库是语义搜索引擎进行推理和知识积累的基础和关键,而Ontology(本体)则是知识库的基础。一般来说,本体提供一组术语和概念来描述某个领域,知识库则使用这些术语来表达该领域的事实。例如医药本体可能包含“白血病”、“皮肤病”等术语的定义,但它不会包含具体某一病人的诊断结果,而这正是知识库所要表达的内容。比如张三患有皮肤病、李四患有皮肤病和白血病、王五患有白血病,其中的皮肤病、白血病就是本体。而各个病症的实例(张三、李四、王五)及其病症描述就是知识库的内容。对它有如下基本要求:能够接受用户通过浏览器提交的查询词或者短语。在一个可以接受的时间内返回一个和该用户查询匹配的网页信息列表。这个列表的每一条目至少包含三个元素(标题,网址链接,摘要)4.1.4语义搜索搜索引擎技术伴随着WWW的发展是引人注目的。“飞梦”搜索引擎是基于Web的,基于语义排序的搜索引擎。顾名思义,所谓语义搜索,是指搜索引擎的工作不再拘泥于用户所输入请求语句的字面本身,而是透过现象看本质,准确地捕捉到用户所输入语句后面的真正意图,并以此来进行搜索,从而更准确地向用户返回最符合其需求的搜索结果。

语义web服务是语义WEB服务技术的有机结合,通过对WEB服务添加语义标注,使得数据能被计算机自动处理和理解,让计算机可以在因特网海量信息中找到所需的任何信息,从而将万维网中现存的信息发展成一个巨大的的全球信息库、数据库,语义WEB服务搜索是一个满足服务请求者快速便捷的定位可用语义WEB服务资源的过程。随着因特网上语义web服务数量急剧增加,语义WEB服务的调用和组合都必须基于语义WEB服务搜索来完成。因此语义WEB服务搜索技术是语义WEB服务技术走向成熟和大规模应用的一个必备条件和重要标志。4.1.5基于本体的语义排序自语义WEB服务概念提出以来,关于语义WEB服务搜索方面的研究工作也受到研究人员的关注和重视,做了很多有益的探索。其中涉及的研究主题主要包含语义WEB服务资源的索引研究,语义WEB服务服务资源的匹配策略研究等。深入了解这些工作后可以得知,在语义WEB服务搜索的多个研究主题中,其中一个不可缺少环节就是,语义WEB服务匹配结果排序机制。本文在综合概括和分析各种关系与语义WEB服务匹配结果排序机制的基础上提出了一种基于本体域的语义距离度量模型的语义WEB服务匹配结果的排序机制,详细阐述了该排序机制的原理,利用该排序机制,将语义WEB服务引用概念间的语义关系转换成可以精确比较的量化度量值,对于属于相同语义匹配类型的匹配候选服务与服务请求也能够分别计算语义距离,从而区分出相同类型的候选服务与服务请求的匹配程度。基于语义距离度量模型的排序机制能够得到精确的语义距离度量值,从而达到改善用户对语义WEB服务的体验目地。

举例来说吧,当一个用户在搜索框中输入“孟字去掉子”时,深谙语义搜索的搜索引擎就能够判断出,用户想要找的并不是含有“孟”、“去掉子”等字眼的内容,而是想要查找与“皿”这个字相关的内容;同样,当用户搜索“表现春天的图片”时,搜索引擎会向其呈现出各种与春天相关的图片,而不仅仅局限于该图片的标题是否包含“春天”字样。“可以接受的时间”,也就是响应时间。这是衡量搜索引擎可用性的一个基本指标,也是和传统信息检索系统的一个差别。对于基于BS架构的软件来说,响应时间不能太长,通常在“秒”这个量级。当用户在检索框中输入要检索的信息时,系统将“匹配”与之相对应的结果集。“匹配”,指的是数据库中以某种形式包含有request,这种形式包括三种情况:1,全文匹配2,包含关系3,关联关系。由于Web上的信息量大,而且搜索引擎的查询方式简单。简单,意味着抽象;抽象,意味着有更多的具体事物可能是它的体现。对于一个长长的列表,很少有用户有耐心都审视一遍。因此返回的结果集将会在结果界面返回,并且对其进行分页。用户首先在文本框中输入要检索的关键字,然后,单击搜索按钮。图4-1搜索界面4.2系统逻辑设计4.2.1系统时序图 图4-2系统时序图 4.2.2系统流程图 图4-3系统流程图4.2.3系统数据流程图 图4-4数据流程图4.3系统模块介绍4.3.1模块功能介绍现代大规模高质量搜索引擎一般包括三个部分即:网页搜集、预处理和查询服务。为实现语义排序的功能,更好的提升服务性能,“飞梦”搜索引擎系统将系统分为四个子模块,分别为抓取模块,检索模块,语义排序模块,用户模块。飞梦语义飞梦语义搜索引擎抓取模块用户模块语义排序模块检索模块抓取模块用户模块语义排序模块检索模块图4-5“飞梦”搜索引擎的的系统模块图(1)抓取网页抓取模块的主要功能是用来将web上的海量网页抓取到系统中;首先“飞梦”搜索引擎是一个网络应用软件系统,这个软件系统操作的数据不仅包括内容不可预测的用户查询,还要包括在数量上动态变化的海量网页,并且这些网页不会主动送到系统来,而是需要由系统去抓取。首先,考虑抓取的时机:事先情况下,从网上下载一篇网页大约需要1秒钟左右,因此如果在用户查询的时候即时去网上抓来成千上万的网页,一个个分析处理,和用户的查询匹配,不可能满足搜索引擎的响应时间要求。不仅如此,这样做的系统效益也不高(会重复抓取太多的网页);面对大量的用户查询,不可能想象每来一个查询,系统就到网上“搜索”一次。本系统所采用的方式为将一定数量的目标网页一次性抓取到本地。抓取后,还要对网页进行维护。因为,网页是不断更新变化的,因此要进行定期搜集,每次搜集替换上一次的内容,称之为“批量搜集”。由于每次都是重新来一次,对于大规模搜索引擎来说,每次搜集的时间通常会花几周。而由于这样做开销较大,通常两次搜集的间隔时间也不会很短(例如早期天网的版本大约每3个月来一次,Google在一段时间曾是每隔28天一次)。最常见的一种是所谓“爬取”:将Web上的网页集合看成是一个有向图,搜集过程从给定起始URL集合S(或者说“种子”)开始,沿着网页中的链接,按照先深、先宽、或者某种别的策略遍历,不停的从S中移除URL,下载相应的网页,解析出网页中的超链接URL,看是否已经被访问过,将未访问过的那些URL加入集合S。整个过程可以形象地想象为一个蜘蛛(spider)在蜘蛛网(Web)上爬行(crawl)。真正的系统其实是多个“蜘蛛”同时在爬。这种方式的好处除了概念很漂亮,一般实现起来也不困难。任何所谓目标网页指的是搜索引擎设计覆盖的网页范围。搜索引擎是不可能将Web上的网页搜集完全的,通常都是在其他条件的限制下决定搜集过程的结束。由于HTML的灵活性,其中出现URL的方式各种各样,将这个环节做得彻底不容易。同时,由于Web的“蝴蝶结”形状,这种方式搜集到的网页不大会超过所有目标网页数量的2/3。本系统使用的方法是使用Heritrix来完成对网页的抓取。无论多么强大的搜索引擎工具,在其后台,都需要一样东西来支援它,那就是网络爬虫Spider。网络爬虫,又被称为蜘蛛Spider,或是网络机器人、BOT等,这些都无关紧要,最重要的是要认识到,由于爬虫的存在,才使得搜索引擎有了丰富的资源。Heritrix是一个纯由Java开发的、开源的Web网络爬虫,用户可以使用它从网络上抓取想要的资源。它来自于。Heritrix最出色之处在于它的可扩展性,开发者可以扩展它的各个组件,来实现自己的抓取逻辑。本系统就是使用Heritrix来实现抓取模块。图4-6抓取模块的流程图(2)检索信息检索信息模块的主要功能:a)解析网页,提取其中的有用内容。b)为网页建立词库,由于笔记本电脑的品牌名在现有词库中不存在,因此要建立其特有的词库文件。c)对解析网页生成的信息文件进行分词,并建立索引。d)将索引存入数据库中得到海量的原始网页集合,距离面向网络用户的检索服务之间还有相当的距离。 首先,要对原始网页进行分析,将其中的有价值的部分提取出来,在网页中存在着大量无用的信息比如大量的HTML标记。但HTML标记既给网页的预处理造成了一些麻烦,也带来了一些新的机遇。从信息检索的角度讲,如果系统面对的仅仅是内容的文字,我们能依据的就是其内容所包含的关键词集合,最多加上词频(termfrequency或tf、TF)和词在文档集合中出现的文档频率(documentfrequency或df、DF)之类的统计量。而TF和DF这样的频率信息能在一定程度上指示词语在一篇文档中的相对重要性或者和某些内容的相关性,这是有意义的。有了HTML标记后,情况还可能进一步改善,例如在同一篇文档中,<H1>和</H1>之间的信息很可能就比在<H4>和</H4>之间的信息更重要。当本人利用Heritrix将本人所需要的网页全部抓取下来时,需要将本人所关注的信息从网页中分析出来。因此使用了HTMLParser这个工具来解析网页,并将网页的标题作为索引记录下来;并按照网页的题目(即索引信息)建立信息文件,该信息文件用来保存索引信息的标题、时间、传作者、标题、内容等。分析完成后要对此信息文件进行建索。在这个部分,需要准备开始将产品详细信息插入到数据库,并建立Lucene的索引,以下是要做的两件事:定义一个Product类作为装载数据的值对象;确定数据库与索引的结构。数据库的处理用JDBC来实现。具体实现步骤为:使用addInfo方法来向数据库中插入记录。addInfo方法的参数是一个Info类型的对象,在此方法中,从Infot对象中取出相应的值,然后创建一个PreparedStaement,来执行JDBC的写入。在写入前,首先调用getNextId方法取得所要插入的这条记录的ID号,并随着方法返回给调用者,以便调用者可以将这个ID传到Lucene的索引中,以次将数据库记录和Lucene的索引对应起来。(3)语义排序模块语义排序模块的主要功能:语义排序是系统中最为核心的模块之一,系统通过此模块实现对数据库中索引进行排序,具体的实现细节是,搜索引擎首先将数据索引从数据库中查出,放在缓存中(Map或者List视具体搜索要求)然后采用核心排序算法rankOrder(Collectioncollection)对缓存中数据进行排序,之后将结果集返回给客户。(4)用户模块 用户模块的主要功能:用户模块是系统的用户接口,用户通过此模块完成于系统的交互。当用户在查询界面上输入要检索的信息后,系统将在可以接受的时间内,返回用户所需的结果集。用户通过搜索引擎的查询页面访问到“飞梦”搜索引擎,在查询的文本框中输入要查询的品牌名称,然后,点击查询按钮,系统将到数据库中查询,并将结果集返回。如果,查询不到用户输入的关键字所对应的产品信息,就返回提示信息,提示用户没有于其输入的关键字所对应的结果。用户模块要满足的条件有:1)能够接受用户通过浏览器提交的查询词或者短语,记作q,例如“联想”,“IBM”,“hp”等等。2)在一个可以接受的时间内返回一个和该用户查询匹配的网页信息列表,记作L。这个列表的每一条目至少包含三个元素(标题,网址链接,摘要)。5系统详细设计5.1模块总体介绍从本章开始介绍系统的详细设计。首先,对本系统的结构进行简单的介绍,“飞梦”搜索引擎的系统的前端以MVC模式来实现,Spring做中间层,JDBC作后端来开发实现的。系统架构从功能上可以分为前端和后端两部分。在后端流程中,Heritrix从因特网上获取Web页面,并解析这些网页,提取出网页中有用的信息生成info文本文件,文件名以信息标题+创建时间命名。然后索引子系统解析这些Web页面并存入索引文件中。并且将info文本文件封装成Info对象写入数据库中。在前台流程中,用户在index.jsp中输入关键字后,系统将对关键字进行分词,然后到数据库中查找与其对应的结果集,作为结果列表返回,当用户点击某产品的摘要时,跳转到detail.jsp页面中,在此页面显示产品的详细信息。“飞梦”搜索引擎系统的模块分为四个子模块,分别为抓取模块,处理模块,语义排序模块,用户模块。其中抓取模块又可分为安装配置子模块,分析网页子模块;处理模块可分为解析网页子模块,创建词库子模块,生成持久化类子模块,创建Document子模块,存储数据子模块;用户模块可以分为查询主页面,详细信息页面。图5-1系统模块图5.2抓取子模块5.2.1运行Heritrix子模块本系统所使用的方法是使用Heritrix来完成对网页的抓取。首先将Heritrix在自己的电脑上配置好。然后,运行Heritrix,运行步骤如下:(1)设置任务a)单击WebUI菜单栏上的“Jobs”标签,就可以进入任务创建页面。图5-2菜单栏上的“Jobs”标签b)在任务创建页面中,有4种创建任务的方式,如图4-2所示,具体含义如下。Basedonexistingjob:以一个已经有的抓取任务为模板,创建所有抓取属性和抓取起始URL的列表。Basedonarecovery:在以前的某个任务中,可能设置过一些状态点,新的任务将从这个设置的状态点开始。Basedonaprofile:专门为不同的任务设置了一些模板,新建的任务将按照模板来生成。Withdefaults:这个最简单,表示按默认的配置来生成一个任务。图5-3“任务”菜单中在Heritrix中,一个任务对应一个描述文件。这个描述文件的默认的名称为order.xml。每次创建一个新任务时,都相当于生成了一个order.xml的文件。文件中详细记录了Heritrix在运行时需要的所有信息。例如,它包括该用户所选择的Processor类、Frontier类、Fetcher类、抓取时线程的最大数量、连接超时的最大等待时间等信息。上面所说的4种创建抓取任务的方式,其实都是在生成一个order.xml文件。其中,第4种Withdefaults,则是直接拷贝默认的order.xml文件。在所创建的Eclipse工程或是命令行启动的Heritrix下载包中,该默认的order.xml文件均是放于profiles\default目录下的。关于order.xml的细节,在此还不必深究。因为它里面所有的内容,都会在WebUI上看到。c)单击Withdefaults链接,创建一个新的抓取任务。这里需要解释一下seeds的含义。所谓seeds,其实指的是抓取任务的起始点。每次的抓取,总是需要从一个起始点开始,在得到这个起始点网页上的信息后,分析出新的地址加入抓取队列中,然后循环抓取,重复这样的过程,直到所有链接都分析完毕。当然,凭着目前的设置,还没法开始抓取网页,还需要对这个任务进行详细的设置。(2)设置抓取时的处理链在图5-4中,seeds文本框下有一排按钮,单击“Modules”按钮,就进入了配置抓取时的处理链的页面。图5-4配置处理链的页面从上而下,可以看到,需要配置的内容共有7项,其中CrawlScope和Frontier是两个最重要的组件。CrawlScope用于配置当前应该在什么范围内抓取网页链接。比如,如果选择BroadScope,则表示当前抓取的范围不受限制,但如果选择了HostScope,则表示抓取的范围在当前的Host内。从经验看来,在抓取时,无论是HostScope或PathScope都不能真正的限制抓取的内容。需要对Scope内的代码进行一定的修改才可以,因此,暂时选择BroadScope来充当示例中的范围限定,其实也就是对范围不做任何的限定。即从开始,抓取任何可以抓取到的信息。Frontier则是一个URL的处理器,它将决定下一个被处理的URL是什么。同时,它还会将经由处理器链所解析出来的URL加入到等待处理的队列中去。除了这两个组件外,还有5个队列要配。这五个队列根据先后的顺序,就依次组成了Heritrix的整个处理器链。5个队列的含义分别如下:1)PreProcessor:这个队列中,所有的处理器都是用来对抓取时的一些先决条件做判断的。比如判断robot.txt的信息等,它是整个处理器链的入口。2)Fetcher:从名称上看,它用于解析网络传输协议,比如解析DNS、HTTP或FTP等。在演示中,主要使用FetchDNS和FetchHTTP两个类。3)Extractor:它的名字就很好的揭示了它的作用。它主要用是于解析当前获取到的服务器返回内容,这些内容通常是以字符串形式缓存的。在这个队列中,包括了一系列的工具,如解析HTML、CSS等。在解析完毕,取出页面中的URL后,将它们放入队列中,等待下次继续抓取。4)Writer:主要是用于将所抓取到的信息写入磁盘。通常写入磁盘时有两种形式,一种是采用压缩的方式写入,在这里被称为Arc方式,另一种则采用镜象方式写入。当然处理起来,镜象方式要更为容易一些,因此,在演示中命名用镜象Mirror方式。5)PostProcessor:在整个抓取解析过程结束后,进行一些扫尾的工作,比如将前面Extractor解析出来的URL有条件的加入到待处理队列中去。值得一提的是,在处理器链的设置过程中,每一个队列中的处理器都是要分先后顺序的,信息的处理流程实际上是不可逆的,因此,在设置时,可以看见在队列的右侧总是有“Up”、“Down”和“Remove”这样的操作,以帮助能够正确的设置其顺序。在设置完Hertrix所需的处理链后,仍然还不能够马上开始抓取任务,还需对默认的运行时参数做一些修改,以适应真正的需要。(3)设置运行时的参数在设置完处理链后,单击“Settings”链接,就进入了属性设置的页面,如图5-5所示。图5-5进入“Settings”在属性设置页面上有非常多的输入域,Heritrix在抓取网页时,这些域是用来对的各个组件的值进行预设。 图5-6属性配置页面可以看到,在每个属性的右侧都有一个小问号,当单击问号时,就会弹出一个Javascript的Alert提示框,上面介绍了当前属性的作用。例如,在上图中单击“max-bytes-download”属性,通过Alert的提示可以知道,它表示的是抓取器最大下载的字节数,当下载字节数超过这个属性上所设定的值时,抓取就会自动停止。另外,如果将这个值设为0,则表示没有限制。事实上,当在第一次使用Heritrix时,所需要设置的参数并不多,以默认设置为主。以下就来介绍一些必须要在第一次使用时就要配置好的参数。a)max-toe-threads该参数的含义很容易了解,它表示Heritrix在运行该抓取任务时,为任务分配多少个线程进行同步抓取。该参数的默认值为100,在机器配置和网络均很好的情况下,设置50个线程数就已经足够使用了。b)HTTP-Header在HTTP-Header这个属性域下面,包括两个属性值“user-agent”和“from”。“@VERSION@”字符串需要被替换成Heritrix的版本信息。“PROJECT_URL_HERE”可以被替换成任何一个完整的URL地址。“from”属性中不需要设置真实的E-mail地址,只需是格式正确的邮件地址就可以了。当正确设置了上述的两个属性后,Heritrix就具备了运行的条件。单击“Submit”链接,提交这个抓取任务,至此,已经把Heritrix成功的运行起来如图。到此步骤,Heritrix的安装配置基本完成。5.2.2分析网页子模块(1)选择网站从技术角度看,选择网站的几点主要依据是:a)网站能够被爬虫抓取。因为有的网站使用了反爬虫技术,防止未授权的爬虫对网页进行抓取。b)网站的信息不是使用Javascript动态生成的。c)网站的页面结构不应当经常变化,最好是使用模板动态生成的。根据以上原则,“飞梦”选择了百度页面作为种子来进行抓取。(2)在Heritrix中为信息抓取所需的定制类(3)运行抓取任务抓取任务的运行时间很长,Heritrix需要以种子的URL为入口对符合要求的网页及连接进行抓取,并将抓取到的网页信息存储到本地的Heritrix的镜象目录下。(4)Heritrix的镜象存储结构由于在前面设置了Writer的类型为MirrorWriter。因此,磁盘上应该留有了所抓取到的网页的各种镜象。那么,究竟Heritrix是如何存储下镜象信息的呢?打开Eclipse的workspace目录,进入heritrixProject的工程,里面有一个jobs目录。进入后,找到以刚才job的名称打头的文件夹,这里面的内容,就是Heritrix在运行时生成的。其中,有一个mirror目录,进入后,如图5-7所示。图5-7mirror目录下的内容其实所谓镜象方式存储,就是将URL地址按“/”进行切分,进而按切分出来的层次存储,比如一个URL地址为:/index.html那么它在mirror目录中的保存位置就该是目录下的index.html文件。为了验证这一说法的准确性,打开目录,可以看到图5-8。图5-8镜象示例果然,index.html文件就在这个目录下。另外,Heritrix也同样将各种图片或脚本信息按路径进行了保存,例如,在目录下有一个images目录,其中就保存了URL地址如/images/xxx.gif这样的图片信息。如图5-9所示。图5-9抓取下来的图片文件(5)终止抓取或终止Heritrix的运行当用户进行某个抓取任务时,有两种方法会让任务停止下来。1)正常终止第一种方法当然就是任务的自然结束,其条件为所有队列中的URI都已经被处理过了。此时,任务将自然终止。在“Jobs”面版上会看到任务已经完成,被加入到“Completedjobs”列表中。2)强行终止当然,任务不可能总是运行完,这可能是因为对任务的控制不够,结果抓取了太多不相关的信息,进而造成URL队列无限制膨胀,无法终止。在这种情况下,就需要强行将任务终止。单击“Terminate”链接后,当前在运行的抓取任务就会立即终止,并同样将任务放置到“Jobs”面版上的“Completedjobs”列表中,只不过在“status”上,它会显示“Finished-Endedbyoperator”这样的提示。当然,如果用户希望关闭Heritrix,并终止所有正在运行的任务,也可以单击Console面版上的“ShutdownHeritrixsoftware”的链接,此时,Heritrix会弹出一个警告,告诉你如果关闭Heritrix,则当前一切正在运行的任务都将被终止。如果选择“I’msure,shutitdown”,则Heritrix的WebUI将会终止,虚拟机进程结束。至此使用Heritrix对目标网页的工作已经全部完成。5.3信息检索子模块5.3.1解析网页子模块Heritrix抓取网页后,将相关信息存储下来,实际上就是对Web页面对应的Html文档进行处理.由于作为Web页保存下来的HTML格式,除了标题、正文部分外,还包含许多的Html的控制命令.要实现中文信息处理,需要过滤许多无用信息.因此将HTML文档转化为txt(纯文本)文件,就是Web信息预处理所要解决的问题。由HTML文档转化为txt文档,主要是提取出HTML文档中的3种信息:(1)文档标题:通过提取出置标命令〈h1〉与〈/h1〉之间字串而得到;(2)文档内容:通过提取出置标命令〈Body〉与〈/Body〉之间所有文本得到;(3)新的链接:通过提取出置标命令〈Ahref=字串〉中引号部分的字符串得到;文档格式转化具体实现过程为:对通篇HTML文档进行扫描分析,识别一些基本的置标命令,如表格“<TR>”,标题“<h1>”,超链接“<A>”等控制命令。设置一些字符串变量,如STR:存储HTML文档中的正文部分;S:存储一对“<”和“>”之间的内容;TitleStr:存储标题部分的内容.将“<h1>”和“</h1>”之间的字符存储到Titlestr中,再过滤掉如“<script>”和“</script>”之间字符串(一般是系统函数或者过程),“<style>”和“</style>”之间的字符串(一般是对于页面风格的设置)等等;同时将正文的字符串存储到Str中。当整篇文档扫描完后,将Titlestr和STR输出,再加一些细节处理,就可以得到纯文本(txt)文档。例如生成包括笔记本电脑的品牌名及型号,属性信息,以及此品牌所在网页的URL的信息的文本文件。图5-10笔记本电脑的信息文件5.3.2创建词库子模块为所有信息构建一个产品信息词库,这个词库应当包括抓取下来的所有信息。将上述文本文件的标题提取出来,存入词库文件中。5.3.3生成持久化类子模块定义Infor类,product类存储了在数据库中和索引中将要用到的信息。其中的各属性字段及其意义为:信息种类:privateStringcategory信息标题:privateStringtitle作者:privateStringauthor具体内容:privateStringcontent显示于搜索结果列表中的信息摘要:privateStringsummary图片文件名:privateStringimageURI最后更新时间:privateStringupdatedtime原始URL:privateStringoriginalUrl5.3.4创建Document子模块并将网页的标题作为索引记录下来;并按照网页的题目(即索引信息)建立信息文件,该信息文件用来保存索引的信息,包括索引信息的种类,作者,创建时间,内容等都保存到Document中。分析完成后要对此信息文件进行建索。这些过程都是通过Lucene来完成的。Lucene是一个基于Java的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。Lucene目前是ApacheJakarta家族中的一个开源项目。也是目前最为流行的基于Java开源全文检索工具包。目前已经有很多应用程序的搜索功能是基于Lucene的,比如Eclipse的帮助系统的搜索功能。Lucene能够为文本类型的数据建立索引,所以你只要能把你要索引的数据格式转化的文本的,Lucene就能对你的文档进行索引和搜索。比如你要对一些HTML文档进行索引的话你就首先需要把HTML文档转化成文本格式的,然后将转化后的内容交给Lucene进行索引,然后把创建好的索引文件保存到磁盘或者内存中,最后根据用户输入的查询条件在索引文件上进行查询。不指定要索引的文档的格式也使Lucene能够几乎适用于所有的搜索应用程序。 飞梦搜索引擎的检索和建索部分都是由Lucene来实现的,这是搜索引擎系统的核心部分之一。下面是有关这部分的技术介绍;索引是现代搜索引擎的核心,建立索引的过程就是把源数据处理成非常方便查询的索引文件的过程。为什么索引这么重要呢,试想你现在要在大量的文档中搜索含有某个关键词的文档,那么如果不建立索引的话你就需要把这些文档顺序的读入内存,然后检查这个文章中是不是含有要查找的关键词,这样的话就会耗费非常多的时间,想想搜索引擎可是在毫秒级的时间内查找出要搜索的结果的。这就是由于建立了索引的原因,你可以把索引想象成这样一种数据结构,他能够使你快速的随机访问存储在索引中的关键词,进而找到该关键词所关联的文档。Lucene采用的是一种称为反向索引(invertedindex)的机制。反向索引就是说我们维护了一个词/短语表,对于这个表中的每个词/短语,都有一个链表描述了有哪些文档包含了这个词/短语。这样在用户输入查询条件的时候,就能非常快的得到搜索结果。5.3.5存储数据子模块这个模块是通过封装了JDBC的Hibernat来实现的,利用它将上述定义的TNews对象存入数据库中。本系统使用的数据库为Oracle,通过Hibernate来访问Oracle。JDBC访问数据库时所用到的driverClassName,url,username,password都在属性文件中定义,实现了可配置性及可移植性。5.4语义排序模块5.4.1概念定义概念定义语义权重分层属性语义关系权重:0.XYY****.其中,小数点后面的第一个X是预留位,YY是属性扩展,/*0表示保留位数.用下面的方法来确定属性层次级别权重:将每个属性在所有检索到的文章中进行统计,得到不同属性的统计频率,保留2位小数,统计出某一阶段人们对某一种属性的关注程度,这样可以确定分层系统中的YY值.语义信息熵定义对每一篇文档Di,iIN来说,设X为Di中所包含本体匹概念/关系的随机变量,则语义信息熵为SH(x)=-Epc(x)1lgp(x)式中:pc(x)表示在本体中所定义词汇的权重,表示某个概念对于原始检索集所有文档来说所占比重;p(x)表示在某一篇文档中所占的统计量,表示在该文档中某个概念所占比重。 时间加权因子:对于每一篇文档信息都有自己被收录在索引数据库中的时间,按照被收录的早晚,最晚被收录的信息应具有较高的优先级5.4.2算法实现原理根据上面语义概念权重分层和语义信息熵的定义,给出语义排序OntoRank算法及其相关解释:对于原始检索集中的文档,抽取与本体中匹配的概念或者实例形成Concept_Set[i]集合,并推理其间的关系形成Relation_Set[i],其中iIN,N为原始检索集Result_Set中编号.(1)于每篇文档DiIRetrieval_Se,t如果概念CijISO_Concept_Se,t令Cij→Concept_Set[i,j],统计概念频率FCij,i为文档号,j为概念号。(2)针对每一篇文档i,根据Concept_Set[i]中所包含的概念,由本体库中推理出相互关系Rik(Cim,Cin)<SO_Relation_Se,t令Rik→Relation_Set[i,k],统计关系频率FRik,其中Cim、Cin为此篇文档中不同概念,Rik(Cim、Cin)为概念之间的连接关系。(3)对于CijIConcept_Set[i,j],RikIRelation_Set[i,k]。(4)计算Cij权重=统计Cij在Concept_Set[i,j]中频率|Concept_Set[i,j]|计算Rik权重=统计Rik在Relation_Set[i,k]中频率|Relation_Set[i,k]。(5)对每一篇文档Di,DiIRetrieval_Result_Se。(6)对每个概念Cij,CijIConcept_Set[i]。(7)计算Cij的权重因子ConceptValueij。(8)对每个关系Rik,RikIRelation_Set[i]。(9)计算Rik的权重因子RelationVauleij。(10)计算该篇文档语义概念关系权重因子SW_Factori→EjIn1kIn2(ConceptValueij+RelationVa-lueik)其中n1为Di概念数,n2为Di关系数。(11)SW_Factori→SW_Factor_Set[i],i→Number-OfDoc[i]。(12)利用排序算法对SW_Factor_Set[i]与Num-berOfDoc[i]排序。(13)如果SW_Factor_Set[i]中有相同项。(14)将相同项取出→局部排序子集Sub_Seth[l],其中h为子集个数,l为子集中所含文档序号,并记录相同权重因子子集位置。(15)对于ChjIConcept_Set[h,j]与RhkIRelation_Set[h,k]中互不相同的概念和关系,计算其综合权重值,即语义熵中的pc(x)。(16)TChj→TF_C_Se,tTRhk→TF_R_SetTChj=EiFCijEiEjFCijTRhk=EjFRjkEjEkFRjk上式表示概念j及关系k在所有检索集中的统计分布。(17)对于每个子集S_SetsISub_Seth[l],sIh。(18)调用Re_rank_Func(S_Se,tTF_C_Se,tTF_R_Set)。(19)将重排结果插入上述排序。(20)返回用户.调用函数如下所示:Re_rank_Func(S_Sets,TF_C_Se,tTF_R_Set).(21)对于每篇文档Dt,DtIS_Seti,t为文档号。(22)计算语义信息熵SHt=-ETCtj1lg(FCtjEjFCtj)其中,FCijEjFCtj表示概念在该篇文档中出现次数与该文档概念出现总数比值,即p(x),而TCtj则表示该概念在所有检索集合中出现的次数与检索集合中出现的所有概念次数的比值。(23)对S_Sets进行排序。(24)返回索引排序集完成排序。5.4.3语义排序部分代码/** *1,设计缓存 *Map<String,List<String>> *2,设计读取策略 */ privatestaticMap<String,TNews>newsMap=newHashMap<String,TNews>(); @PostConstruct privatevoidinit(){ getNewsInfo(); } @SuppressWarnings("unchecked") privateList<TNews>getNewsInfoFromDB(){ Stringhql="fromTNews"; List<TNews>newsList=newsDAO.getHibernateTemplate().find(hql); returnnewsList; } privateMap<String,TNews>getNewsInfo(){ List<TNews>newsList=getNewsInfoFromDB(); Map<String,TNews>newsMap=newHashMap<String,TNews>(); for(TNewsnewsInfo:newsList){ StringnewsTitle=newsInfo.getNewsTitle(); newsMap.put(newsTitle,newsInfo); } returnnewsMap; } /*排序*/ /*1,时间加权因子*/ privateDategetNewsDate(StringnewsTitle){ Datedate=newsMap.get(newsTitle).getNewsDate(); returndate; } /*2,语义关系权重*/ privateStringgetNewsRelationWeight(StringnewsTitle){ /**/} /*3,语义信息熵*/ privateStringgetNewsEntropy(StringnewsTitle){ /**/ } //排序算法 publicvoidnewsSorting(StringnewsTitle){ sort(newsTitle); } privateTNewssort(StringnewsTitle){ Stringdate=getNewsDate(newsTitle).toGMTString(); StringrelationWeight=getNewsRelationWeight(newsTitle); StringnewsEntropy=getNewsEntropy(newsTitle); TNewsnews=newTNews(); news.setDate(date); news.setRelationWeight(relationWeight); news.setNewsEntropy(newsEntropy); returnnews; }5.5用户子模块在用户子模块中,使用了MVC模式。MVC是一种设计模式,它强制性的把应用程序的输入,处理和输出分开。MVC把应用程序分成三个核心模块:模型层、视图层、和控制器。它们分别担负不同的任务。控制器:用来接受用户请求,调用模型层响应用户请求并选择视图显示响应结果视图层:显示模型状态,接受数据更新请求并把用户输入数据传给控制器模型层:代表应用程序状态,响应状态查询处理业务流程并通知视图层业务状态更新。本系统中作为模型层的有如下三个类:TNews:代表一个查询结果的Bean类,其对象的填充是在dao层中,从数据库中查出详细的产品信息后,对应SearchResult的每个属性分别填入相应的值。NewsAction:代表保存所有查询结果的类,这个类有一个ArrayList类型的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论