




已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
盐城师范学院毕业设计盐 城 师 范 学 院毕业设计基于Lucene和Heritrix的新闻垂直搜索引擎的研究与实现学生姓名 学 院 信息工程学院 专 业 计算机科学与技术 班 级 12(2) 学 号 指导教师 2016年5月16日基于Lucene和Heritrix的新闻垂直搜索引擎的研究与实现摘 要自Web 2.0时代以来,网络的信息数据量呈现出几何倍数的增长,使得搜索引擎成为广大网络用户快速查询和浏览网络信息的最佳选择。目前搜索引擎中比教有影响的且用户量比较大的有谷歌、百度、雅虎等,它们起着链接导航的作用。但是,这些通用搜索引擎也存在着一定的局限性,如:搜索引擎的信息量过大而造成了搜索的深度不够、查询的结果不够准确等问题。垂直搜索引擎便诞生在这样的背景下。本文重点研究并剖析了垂直搜索引擎及其相关的新兴技术。主要研究内容有如下几个方面:1.探讨了垂直搜索引擎的研究背景和实际应用。2.对搜索引擎的相关技术进行了比较深入的研究。3.阐述了Lucene和Heritrix的基本原理和使用方法。4.将Lucene与Heritrix同Web技术融合实现对新闻领域的垂直搜索引擎系统。【关键词】 Lucene,网络爬虫,垂直搜索引擎,中文分词全套设计加扣 3012250582Research and implementation of news vertical search engine based on Lucene and HeritrixAbstractSince the era of Web2.0, the data network presents exponentially, search engines have become the best choice for the majority of Internet users to query and browse the network information. The current search engine users have more influence than teaching are Google, Baidu, YAHOO and so on, they play this role in navigation links. However, these general search engines also have certain limitations, such as search engine information overload caused by the problem of search depth, query results are not accurate. Vertical search engine was born in this background. This paper focuses on the research and analysis of the vertical search engine and its related emerging technologies. The main research tasks are as follows: 1 discusses the background and the practical application of the vertical search engine. 2 The key technologies of search engine are studied. 3 describes the basic principle and method of using Lucene and Heritrix. 4 Lucene and Heritrix with Web technology to realize the information integration framework of vertical search engine system on the field of news. Key words Lucene,web crawler,vertical search engine,Chinese word segmentation目 录1绪论11.1研究背景与应用前景11.2本文的主要工作11.3论文的结构安排22相关技术研究22.1搜索引擎简介22.1.1搜索引擎的基本原理22.1.2垂直搜索引擎和通用搜索引擎的异同点32.1.3垂直搜索引擎的特性42.2垂直搜索环境的搭建42.2.1Heritrix开源框架简介42.2.2Heritrix 主要组件包含的类52.3Lucene开源技术62.3.1Lucene开源技术简介62.3.2突出优点和优势介绍82.4SSH开发框架技术82.4.1SSH开发框架介绍82.4.2SSH业务流程和平台优势93搜索引擎系统系统分析设计93.1概要设计93.2使用流程设计103.3模块划分103.4数据库设计113.5界面设计144系统实现144.1信息抓取144.2信息清洗,降噪处理154.3中文分词和文本语句语义分析154.4网页去重164.5封装框架214.6框架搭建与前后台实现254.6.1前台查询界面的实现254.6.2后台管理模块的实现254.7系统结构实现的UML图265性能测试与分析285.1网站信息爬取测试285.2信息过滤清洗测试305.3分词与文本语义相识度算法测试305.4数据库设计与连接测试325.5前台搭建与查询测试325.6测试结果分析346结论34参考文献36致 谢37盐城师范学院毕业设计1 绪论1.1 研究背景与应用前景在日常生活之中搜索引擎技术的应用正变得越来越频繁和广泛,搜索引擎以其拥有的快速搜索、导航的能力为人们生活提供了极大的便利。但是,传统搜索引擎存在着一些不足之处,比如搜索量过大而造成搜索的精度不够,搜索范围过大而造成深度不够。本文所要研究的垂直搜索引擎则是对搜索技术的新应用,是对传统搜索的深化和细分,能够很好的解决以上的问题1-2。我们日常使用的百度、谷歌、雅虎都属于通用搜索引擎的范畴,它们将众多网站信息整合到一起,并将信息以极快的方式反馈到用户面前,起到信息导航的作用。随着市场需求多元化的发展,搜索引擎的发展必须结合市场发展的需要。细化服务模式,深化搜索业务是必然趋势。比如我们每次上淘宝,可以搜索相关信息的所有商品,或者是针对新闻领域的信息检索,可以将某一相关新闻全部展现等等。本设计根据自己所学的知识以及查阅的相关资料,完成了基于Lucene的新闻垂直搜索引擎的研究与实现,可以基本满足用户快速搜索的需求。 1.2 本文的主要工作研究工作:以谷歌、百度、雅虎为代表的通用搜索引擎的出现使得互联网的发展进入了一个高峰,然而随着互联网格局的多元化发展,对搜索引擎的服务模式提出了新的要求,这为垂直搜索引擎的发展提供了良好的市场空间。本文根据当今互联网发展趋势,选择Heritrix和Lucene开源框架进行开发和实现该垂直搜索引擎。深入学习了Heritrix爬虫技术和Lucene的开源技术,还有J2EE的Web框架开发技术。 实现工作:本人通过查阅学习Heritrix和Lucene相关开发资料设计并实现了新闻垂直搜索引擎系统。使用Heritrix爬虫实现对网络新闻数据信息的抓取,并通过HtmlParser实现对文本数据的初步过滤和清洗,然后使用IKAnalyzer完成对文本的分词操作。并通过TF-IDF算法对网页进行去重操作和计算网页的权重以及相识似度。J2EE的SSH框架技术和JSP技术编写了系统后台管理网站,以MySQL数据库作为本系统的数据库。完成前后台数据索引与查找操作。1.3 论文的结构安排第一章,绪论。本章节主要对当今互联网和垂直搜索引擎的发展前景和对研究此应用所用到的开发技术做了简要的介绍。分析了开发此应用的需求以及可行性。 第二章,相关技术研究。本章主要介绍设计前期所做的搜索引擎的相关知识和基本原理、架构设计以及网络蜘蛛的Heritrix和Lucene等开源框架的搭建和使用,HtmlPaser,IKAnalyzerd对数据的处理操作,和SSH(Struct+Spring +Hibernate)的整合的开发环境的搭建方式。第三章,垂直搜索的系统分析设计。本章主要分析了垂直搜索引擎的市场需求,开发实践中需要解决的问题,提出系统的实现方案以及系统的实现目标包括此应用软件的模块划分、数据库的设计以及客户端界面的功能和布局方法。第四章,系统实现。本章重点说明了一些重要代码段实现的功能及实现方法。第五章,性能测试与分析。本章主要介绍对整个过程开中进行的一些重要部分进行了测试,针对出现的问题提出解决的方法和对以及改进一些不足的地方。第六章,结论。总结整个过程所完成的任务,改进不足的地方,并对接下来的工作做初步的展望。2 相关技术研究2.1 搜索引擎简介2.1.1 搜索引擎的基本原理目前通用搜索引擎的实现技术主要有三部分构成即:网页抓取、全文检索以及关键字查询3,其结构图如下所示: 图 2-1搜索引擎过程实现原理图从上图可以看出整个搜索引擎的工作流程的活动由网络蜘蛛、索引器、搜索器、排序器、用户接口和输入分析器组成。各部分功能如下:1网络蜘蛛:网络蜘蛛是获取数据的关键,主要负责到网络上抓取数据,通过广度优先算法或深度优先算法,通过网页链接遍历到该网页并将整个网页的上的数据抓取下来,直到所有网页中的链接为空,结束抓取任务4。2索引器:索引器的任务是将抓取的数据进行清洗、解析、去重等操作后,建立并存放到索引的数据库4。3搜索器:搜索器的主要任务是响应用户的查询请求,并将的结果反馈给用户4。4用户接口:完成输入输出界面的可视化,以供用户使用。搜索的整个过程是用户通过用户接口,实现查询数据的输入,而后用户接口将输入的数据提交给输入分析器,在分析器处完成对查询数据的分词处理,并将分词的结果送到搜索器,搜索器将分词的信息与索引库中的数据进行相似度的匹配,并将搜索结果按照权重的大小排列并返回给用户接口显示给用户。2.1.2 垂直搜索引擎和通用搜索引擎的异同点垂直搜索引擎与搜索引擎在技术实现的原理上的类似,只是其应用是针对专门领域,更加具体深入。对通用搜索加以补充,弥补了通用搜索引擎的不足。对其加以比较具有以下的异同点:相同点:垂直搜索似于通用搜索引擎。主要表现在1.搜索方式相同,垂直搜索引擎也是通过关键字、词或者语句来建立搜索。2.搜索技术技术相似,垂直搜索引擎只是搜索领域更加的细化,专业。不同点:两者在发展定位、展现内容、用户需求和市场策略等方面都存在很大的差异,通用搜索引擎是针对全部的网络用户和网上全部的信息,越全面越好。垂直搜索引擎是针对某一领域的用户和某一专业的内容,在内容上倾向于文章、新闻等。2.1.3 垂直搜索引擎的特性垂直搜索引擎具有快速直达、应用方便、服务共享和精准定位等的特性:快速直达:快速主要表现在中文直达、关键字直达和站内直达等方面,并且能够快速的直达网上的各类站点,满足用户全方位的服务需求。应用方便:能够提供强大的搜索功能,综合通用搜索和垂直搜索的多重性功能,并且具有完美的界面设置和完美的兼容性,能在不同内核的浏览器上正常使用。安全可靠:收录网上大量的重要的网址,防止用户不经意间进入各种钓鱼网站。服务共享:按您的需要生成功能样式多样的搜索框代码,将搜索服务与网站完美结合。精准定位:提供精细化的搜索服务,方便用户查找到精确的搜索结果。2.2 垂直搜索环境的搭建2.2.1 Heritrix开源框架简介 Heritrix 网络爬虫程序是由 java程序开发而成的,可以用它来从网上抓取想要的网页文件5。它的突出优势是具有良好的可扩展性,用户可以对它的各个组件,按照自己的需求个性化的进行扩充。下图便为Heritrix的管理界面6。图 2-2 Heritrix的工作原理图2.2.2 Heritrix 主要组件包含的类Heritrix中的主要组件有CrawlOrder、CrawlController、Frontier还有Processing chains等。如下图2-3所示为Heritrix中的相关的类、参数和方法的介绍。图 2-3 Heritrix主要组件整搜索个任务活动的起点是CrawlOrder,它是继承自最底层的avax.management.Attribute类,而CrawlOrder中的属性是需要随时被检测和读取。CrawlController即中央控制器,是整个活动过程中最重要的环节,它可以控制整个任务的开始和结束,并且开发人员可以根据参数来对进行重构。如图所示为Heritrix的工作流程图:图 2-4 Heritrix的工作流程图Heritrix的在本地的配置安装:(1)解压HeritrixSrc包,复制com、org和st这部分文件复制到自己所建工程下的src文件下。(2)将HeritrixSrc解压文件 src下的resources下org.archive.util中的tlds-alpha-by-domain.txt 文件复制到自己所建工程中.archive.u-til 中去。(3)将heritrixSrc中的src下conf 文件夹复制到自己所建工程的根目录下。(4)将heritrixSrc中的src中的整个文件webapps复制到自己工程的根目录下。2.3 Lucene开源技术2.3.1 Lucene开源技术简介Lucene是由开源社区apache基金会提供的一个全文检索工具包,它可以为软件开发人员提供完整的全文索引、查询和分析的引擎,并且可以在其基础上构建自己的搜索引擎。Lucene既简单有实用,自从问世以来一直备受Java爱好者推崇,Lucene的结构如下图所示:图 2-5 Lucene源码结构以上结构可以看到,整个Lucene的结构内部可以分为三个部分:对外接口、基础结构封装和索引核心。Lucene的源码由如下的七个模块组成,其各个模块的功能分别如下图所示:图 2-6 Lucene的主要源码类Lucene的设计原则是通过抽象来降低层与层之间的耦合度。首先对底层文件操作的store类完成封装,然后在store上完成对index的封装,实现对整个索引核心的抽象,并通过search和alaysis来设置对外的接口。经过以上的抽象,系统更加易于理解,同时也便于程序的二次开发和扩展5。Lucene的另一个特点是包含了C/S的架构以外的应用结构,Lucene可以以库文件的形式被打成Jar包放入到自己的工程当中,并不是单独是索引服务。具有很好的移植性,所以,Lucene提供的是一个全文搜索架构而不是实现。Lucene在接口设计上比较通用,而且将抽象过程中将复杂度的放入实体内部,对外只提供简单可用的接口。输入、输出实现类似于数据库中的表和字段,使得文件和数据库在上面都能得到很好的映射。2.3.2 突出优点和优势介绍作为一个开源项目,自Lucene从发布之后,便广受欢迎和支持者的追捧。Lucene不但可以做全文检索,还可以将其应用到系统软件中去,或是用来构建Web应用以及某些商业软件。例如:Apache的官网,开源软件Eclipse、MyEclipse都是以Lucene作为全文索引引擎。Lucene不但具有优秀的架构,还具有如下的突出优点:(1)文件的格式独立于平台,可以很好是实现跨平台使用。(2)在倒排索引的基础上进一步分块索引,大大优化了搜索7。(3)高度应用面向对象设计,使得程序更易扩展和方便学习。(4)独立的文本分析接口更利于实现对文本和语言格式的扩展。(5)强大查询能力使得无需动手编写过多的代码即可获得功能全面的。2.4 SSH开发框架技术2.4.1 SSH开发框架介绍SSH即是我们通常说的三大框架,由Struct、Spring、Hibernate组成,是目前比较较流行的一种开源Web应用程序框架。SSH框架系统是由Java实现的可以分为持久层、DAO层、业务层和WEB层,开发人员可以在此基础上快速构WEB应用,基于SSH开发的应用具有可复用好、结构清晰,便于维护等特性8。在WEB层主要有JSP页面实现用来实现web展现以及做一些业务交换和验证。在业务层,通过对类和service的实现,来调用DAO操作8。在DAO层主要编写接口并用DAO的继承类中实现类,完成各种对持久化操作的方法,而后通过Action和Service实现实体类和持久化层的连接,使整个业务流程得以贯通。如图所示为SSH的业务图:图 2-7 三大框架的业务流程图2.4.2 SSH业务流程和平台优势系统的基本业务流程是: 在WEB层(View)中,接收用户的请求(request)和返回系统的响应(Response),通过Struct的配置文件将的任务中的Servlet指派给Action处理。在业务层,有Spring容器来实现对Action的处理,提供各种必备的组件。而在持久层中,则通过Hibernate Mapping实现持久化操作,并实现各个表之间的关系,并返回结果给DAO9。采用以上开发模型,明确划分了各层之间的功能并且实现了层与层之间的分离。这样在前台发生改变时,不需要改变很多的代码,并且不需要再对数据库重新设计。提高了系统模块各自的独立性,降低了耦合度,便于开发人员的协同开发。3 搜索引擎系统系统分析设计3.1 概要设计垂直搜索引擎主要有四个部分组成,每个部分都有不同的分工(1)Heritrix部分负责抓取网络数据到本地文件中。(2)基于HtmlParser和IKAnalyzer实现文件的过滤和清洗操作,并将抽取出来的数据进行分词,并用TF-IDF算法计算出这文本相似度的权重。(3)将处理过后的数据同步写入到数据库中。(4)应用web框架搭建搜索系统,完成前后台交互,并能够在前台实现搜索功能。3.2 使用流程设计用户在主页输入关键字查询,即可取得所有关键字相关结果的分页展示。管理员可以在后台的数据管理系统中进行相应管理操作。3.3 模块划分为了实现系统的高内聚、低耦合,在此将后台管理服务分为:“索引管理”、 “数据管理”、 “栏目管理”、 “用户管理”、 “权限管理”这五大主模块。图 3-1 系统模块图“索引管理管理模块”可以查看到的分类为创建索引和配置索引:(1)配置索引:在配置管理模块中可以完成配置文件的路径、索引的路径、索引工具和查询语句等操作。(2)创建索引:管理员可以创建新的索引。“数据管理模块”可以查看所有的分类信息,包括网络数据、网络数据管理以及本地数据类:(1)网络数据:管理员可以到自行添加本地抓取的网络数据,将其放入到数据库中。(2)网络数据管理:管理员可以查看到整个数据库中的网络数据,并可以对其进行修改,删除操作。(3)本地数据:管理员可以实现对本地的PDF文件进行上传和删除等操作。“栏目管理模块”可以分为添加新闻的相关栏目和管理新闻的相关栏目。(1)添加栏目:管理员可以添加新闻栏目类别。 (2)栏目管理:管理员可以修改新闻的栏目。“用户管理模块”:分为添加和管理其它一般管理员。(1)添加用户:超级管理员可以添加其它一般管理员。 (2)用户管理:超级管理员管理其它一般管理员进行添加和删除等操作。“权限管理模块”:可以设置不同是管理员权限3.4 数据库设计数据库表设计:根据垂直搜索引擎的需求分析,得到如下图所示的数据库表:索引表:索引主键,索引名称,索引时间,索引路径,资源路径,资源类型,索引方式,当前状态,查询语句,创建时间,标志,用户号等。表3-1 s_index表序列号名称字段含义类型长度备注信息1indexId索引主键Int11无2indexName索引名称Varchar255无3IndexTime索引时间datetime0无4IndexPath索引路径Varchar255无5sourcePath资源路径Varchar255无6type资源类型Varchar255无7action索引方式Varchar255无8status当前状态int11无9sqlSentence查询语句varchar255无10createTime创建时间datetime0无11mark标志varchar255无12userId用户号int11无新闻资源表:新闻编号,新闻题目,资源路径,文件路径,新闻时间,新闻网站,创建日期,标志,用户号,栏目号等表3-2 s_news表序列号名称字段含义类型长度备注信息1newsId新闻编号Int11无2newTitle新闻题目Varchar255无3sourceUrl资源路径varchar255无4filePath文件路径varchar255无5newsTime新闻时间Varchar255无6sourceNet新闻网站varchar255无7createTime创建日期datetime0无8mark标志varchar255无9userId用户号Int11无10columnId 栏目号int11无s_user表:用户名、用户密码、用户类型、e-mail等表3-3 s_user表序列号名称字段含义类型长度备注信息1UserName用户名Varchar50无2UserPassword用户密码varchar50无3UserType用户类型Int10无4UserState用户状态Int10无5Email用户邮箱varchar50无s_column表:栏目编号,父编号,栏目名称,创建时间,标志,用户号等表3-4 s_column表序列号字段名称字段含义类型长度备注信息1ColumnId栏目编号Int11无2parentId父编号Int11无3columnName栏目名称varchar255无4createTime创建时间datetime0无5mark标志varchar255无6userId用户号Int11无s_filedocument表:文件号,pdf文件名,swf文件名,状态,创建时间,用户号等表3-5 s_column表序列号字段名称字段含义类型长度备注信息1fdId 文件号int11无2fdNamepdf文件名varchar255无3swfName swf文件名varchar255无4status状态 int11无5createTime创建时间datetime0无6mark标志varchar255无7userId用户号int11无s_index_column表:栏目编号,索引编号等表3-6 s_column表序列号字段名称字段含义类型长度备注信息1ColumnId栏目编号Int11无2indexId索引编号Int11无3.5 界面设计垂直搜索引擎的后台实现是应用了EasyUI,这是一款优秀的UI模板,包含了大量的JQuery实现脚本。能够为创建互动的、JavaScript应用程序,提供一些必要的功能。使用EasyUI不需要写过多网页代码,你只需要通过编写一些简单HTML标签,就可以定义用户界面。EasyUI还可以完美支持HTML5网页的完整框架。EasyUI节省您网页开发的时间和规模,简单但功能强大的。下面是EasyUI的实现界面:图 4-1 EasyUI实现的后台界面4 系统实现4.1 信息抓取启动Heritrix服务输入相应的路径,完成相关步奏的操作,点击start按钮便看到爬虫程序从网络上下载页面的过程,如下图所示:图 4-2 Heritrix抓取页面运行图4.2 信息清洗,降噪处理通过使用HtmlPaser中封装的方法我们可以过滤出相应的重要信息,并通过正在表达式将其分离出来。图 4-3 部分页面过滤代码展示4.3 中文分词和文本语句语义分析采用Ikanalyzer对文本进行分词处理,以下是IKanalyzer分词的部分源代码。Analyzer analyzer = new IKAnalyzer(true);TokenStream ts = null;ts = analyzer.tokenStream(myfield, new StringReader(这里是成就你梦想的地方!Welcome to Yancheng Teachers University, here is the place you dream of success);OffsetAttribute offset = ts.addAttribute(OffsetAttribute.class); CharTermAttribute term = ts.addAttribute(CharTermAttribute.class);TypeAttribute type = ts.addAttribute(TypeAttribute.class);ts.reset();在对“这里是成就你梦想的地方!Welcome to Yancheng Teachers University, here is the place you dream of success”可以得到一下的分词内容,如图所示:图 4-4 Ikanalyzer中文分词效果4.4 网页去重由于发布信息的网站众多,而有效信息源相对较少,从而呈现出原创内容的不足。因此存在大量网站,它们自己不产生消息,只是转载或是引用一些其它网站上内容。互联网上的重复信息已经引起了行业人员的关注,同时造成了不便的用户体验。为了解决这样的问题,通常会对网页进行去操作,网页去重的方法主要有最小编辑距离法、TF*IDF法、余弦夹角算法和指纹算法。本设计主要使用的是TF*IDF算法,因此对其着重介绍。其思想是:在一篇文章某一个词语使用的的次数很多,并且在其它文章中使用的很少,则认为该词具有很好的识别区分能力,可以被当做分类词组使用,其算法公式如下所示10: /计算TFpublic static void getTF(String inputPath,String outputPath)String result = ;List list = getAllWords(inputPath);Double allNums = Double.valueOf(list.size();for(String w : list)Double num = getWordNum(w, list);Double TF = num/allNums;result += w+ConstantParams.TABLE+TF+ConstantParams.CHENG_LINE;StringUtils.string2File(result, outputPath);public static Map getMapFromFile(String inputPath)Map map = new HashMap();try File file = new File(inputPath);FileReader frd = new FileReader(file);BufferedReader bfr = new BufferedReader(frd);String temp = ;while(temp=bfr.readLine() != null)String temps = temp.split(ConstantParams.TABLE);if(temps.length 1)map.put(temps0, Double.valueOf(temps1);br.close();fr.close();以下为算法的实现过程的部分代码: catch (Exception e) e.printStackTrace();return map;public static Map getMapFromFile(String inputPath,int flag)Map map = new HashMap();try File file = new File(inputPath);FileReader frd = new FileReader(file);BufferedReader bfr = new BufferedReader(frd);String temp = ;while(temp=bfr.readLine() != null)String temps = temp.split(ConstantParams.TABLE);if(temps.length 1)map.put(tempsflag0, Double.valueOf(tempsflag1);br.close();fr.close(); catch (Exception e) e.printStackTrace();return map;/计算DFpublic static void getDf(String inputPath,String inputPathAll,String outputPath)StringUtils su = new StringUtils(inputPathAll);List filesName = su.allPathResult;String result = ;try File file = new File(inputPath);InputStream ist = new FileInputStream(file);InputStreamReader isr = new InputStreamReader(ist,gb2312);BufferedReader bfr = new BufferedReader(isr);String temp = ;while(temp=bfr.readLine() != null)Double df = 0.0;String temps = temp.split(ConstantParams.TABLE);for(String fileName : filesName) String f = StringUtils.getFileNameFromPath(fileName);String content = StringUtils.getContent(fileName);if(content.contains(temps0)df+;result += temp+ConstantParams.TABLE+df+ConstantParams.CHENG_LINE;br.close();StringUtils.string2File(result, outputPath); catch (Exception e) e.printStackTrace();/计算TF*IDFpublic static void getTfIdf(String inputPath,String inputPathAll,String outputPath)String result = ;StringUtils su = new StringUtils(inputPathAll);List filesName = su.allPathResult;Double nums = Double.valueOf(filesName.size();System.out.println(nums:+nums);try File file = new File(inputPath);InputStream ist = new FileInputStream(file);InputStreamReader isr = new InputStreamReader(ist,gb2312);BufferedReader bfr = new BufferedReader(isr);String temp = ;while(temp=bfr.readLine() != null)Double tfidf = 0.0;String temps = temp.split(ConstantParams.TABLE);Double idf = Math.log(nums/Double.valueOf(temps2);tfidf = Double.valueOf(temps1)*idf;result += temp+ConstantParams.TABLE+tfidf+ConstantParams.CHENG_LINE;br.close();StringUtils.string2File(result, outputPath); catch (Exception e) e.printStackTrace();/相似度算法的实现public static void getSimilarity(String inputPath1,String inputPath2,String outputPath)try List list1 = getAllWords(inputPath1, 1);List list2 = getAllWords(inputPath2, 1);int len = 0;int len1 = list1.size();int len2 = list2.size();if(len1 len2)len = len1;elselen = len2;Map map1 = getMapFromFile(inputPath1);Map map2 = getMapFromFile(inputPath2);Double fz = 0.0;Double fm = 0.0;Double fma = 0.0;Double fmb = 0.0;Set set1 = map1.keySet();Iterator iter1 = set1.iterator();while(iter1.hasNext()String key = iter1.next();Double value = map1.get(key);fma += value*value;Set set2 = map2.keySet();Iterator iter2 = set2.iterator();while(iter2.hasNext()String key = iter2.next();Double value = map2.get(key);fmb += value*value;fm = Math.sqrt(fma)*Math.sqrt(fmb);for(int i=0;ilen;i+)String key1 = list1.get(i);String key2 = list2.get(i);fz += Double.valueOf(key1)*Double.valueOf(key2); Double result = fz/fm; System.out.println(result:+result); catch (Exception e) e.printStackTrace();4.5 封装框架引入Lucene的核心包,通过对网页数据的抓取的封装操作将其封装成服务,而后供搜索系统实现时来调用,主要封装实现有索引和查询。在查询方法里实现指定搜索域、指定权重、返回结果数、并对其进行过滤和高亮显示。并将完整封装好实现打成Jar导入到搜索引擎的Lib文件并编译,而后即可对其调用。图 4-6 Lucene核心包引入以下为具体查询实现的具体代码:Overridepublic FullTextResult doQuery(FullTextSearchParams fullTextSearchParams) FullTextResult fullTextResult = new LuceneResult();try String queryWord = fullTextSearchParams.getQueryWord();if(StringUtils.isEmpty(queryWord)return null;/指定搜索域List assignmentFields = fullTextSearchParams.getAssignmentFields();String fields = null;if(assignmentFields != null & assignmentFields.size() 0)int size = assignm
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 离婚协议书:子女监护权与财产分配综合方案
- 离婚协议签订前七大法律问题解析及应对策略
- 复杂离婚财产分割及子女未来生活品质协议
- 交通银行2025昌吉回族自治州秋招面试典型题目及参考答案
- 邮储银行2025秋招半结构化面试题库及参考答案辽宁地区
- 2025年3D打印的个性化服装设计
- 建设银行2025乌兰察布市秋招群面模拟题及高分话术
- 2025行业新兴市场发展报告
- 2025行业技术发展趋势研究
- 农业银行2025漳州市秋招无领导小组面试案例题库
- 2025-2026学年人教版(2024)初中生物八年级上册教学计划及进度表
- 2025广西公需科目培训考试答案(90分)一区两地一园一通道建设人工智能时代的机遇与挑战
- 中级会计《经济法》最新精编必刷550题(后附答案解析)
- 新计算国民经济评价
- Photoshop图像处理课件(完整版)
- 法理学-(第五版)完整版ppt全套教学教程课件(最新)
- 无机化学电子教案配习题和答案下载地址
- 日语N3听力词汇
- 火灾自动报警系统PPT课件
- 储粮熏蒸杀虫技术
- 1000以内的竖式加减法(共21页)
评论
0/150
提交评论