基于Lucene和Nutch的教学资源搜索引擎的研究与实现

来源 :中国教育信息化·高教职教 | 被引量 : 0次 | 上传用户:liongliong568
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:随着高校校园网建设逐步完善,校园网上的教学资源也越来越丰富,在校师生希望能够在其中寻找所需的教学信息来帮助教学以及课余学习。本文针对这一现象,对开源搜索引擎Lucene和Nutch进行二次开发,并详述开发步骤,最终实现针对教学资源的搜索引擎,使之满足广大师生的需求。
  关键词:Lucene;Nutch;教学资源;二次开发
  中图分类号:TP311.1文献标识码:A 文章编号:1673-8454(2010)21-0082-04
  
  一、引言
  近年来,随着高校校园网建设逐步完善,校园网上的教学资源也越来越丰富,在校师生都需要在校园网上查找一些教学信息来帮助教学以及课余学习帮助,但是这些资源相对独立,内容也比较分散。因此,笔者想在校园网上引入专门用于教学资源搜索的搜索引擎,使得学校师生能够在众多的教育资源中快速、准确地进行检索。但是如果直接使用如百度、谷歌等的商业搜索引擎,又难以得到令用户满意的搜索结果。本文从教学资源用户的需求考虑,在分析Lucene及Nutch的运作机制基础上,研究并实现一个基于Lucene和Nutch的教学资源搜索引擎。
  二、Lucene及Nutch简介
  1.Lucene
  Lucene由一位资深全文索引/检索专家DougCutting早先发布在自己的网页www.lucene.com,后来发布在SourceForge,2001年底成为APACHE基金会jakarta的一个子项目。它是一个开放源代码的全文检索引擎工具包,它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便地在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。[1]
  2.Nutch
  Nutch是一个建立在Lucene 核心之上的Web搜索的实现,Lucene为Nutch提供了文本索引和搜索的API。Nutch的出现使得抓取、索引、检索一体化,并且开放源码,提供了除商业搜索引擎外的一种新的选择。个人、企业都可通过Nutch来构建适合于自身需要的搜索引擎平台,提供适合于自身的搜索服务,即可以让研究者通过配置,逐步完善各个模块,从而实现所需的搜索引擎。[2]
  Nutch的工作流程可以分为两个大的部分:抓取部分与搜索部分。抓取部分即抓取页面并把抓取回来的数据进行反向索引,搜索部分则是对反向索引进行搜索来回答用户的请求,索引是联系这两者的纽带。下图是对Nutch整个工作流程的描述。
  三、Nutch安装并使用
  Nutch 可以在Nutch的官方网站(http://nutch.apache.org/)进行下载,目前最新版本是nutch-1.1。配置条件作为参考可以为:Tomcat 6.0 JDK 1.6.17 Nutch 1.0。在Unix/Linux 下使用Nutch,先要将下载文件解压缩到指定目录, 然后运行# bin/nutch 命令来测试Nutch 是否已正常安装。而在Windows 下使用Nutch 须先下载Cygwin,Cygwin 是一个在Windows 平台上模拟运行Unix 的环境。其他操作和在Unix/Linux 平台下一样。[3]
  以在Windows下安装为例。当安装并设置JDK(在F:jdk1.6.0_17,配置环境变量JAVA_HOME= F:jdk1.6.0_17)、Tomcat(在F:Tomcat 6.0)和Cygwin(在F:Cygwin)后, 将下载的Nutch压缩包解压至(D: utch-1.0)。在Cygwin命令窗口中,使用Shell命令"cd /cygdrive/d/nutch-1.0"切换当前工作目录到Nutch的安装目录。输入Nutch命令"bin/nutch",测试命令是否可用。将Nutch目录下面Nutch-1.0.war部署到Tomcat的webapps目录下,启动Tomcat。通过浏览器访问http://localhost:8080/nutch-1.0,可将Nutch-1.0.war进行解压得到Nutch-1.0文件夹。
  四、中文分词
  中文分词影响着搜索结果的相关度排序及搜索的效率和准确度,因此好的搜索引擎必须处理好中文分词。Nutch的中文分词主要是在两个地方用到,一个是索引时,一个是在搜索时。由于Nutch是基于Lucene的,所以Nutch的分词是继承 Lucene的。
  在Lucene包org.apache.lucene.analysis中,它的分词模块抽象出来了一个抽象类Analyzer.java。这个类包含抽象方法public abstract TokenStream tokenStream(String fieldName, Reader reader);用户自定义的Analyzer主要就是实现这个方法,这个方法要返回一个TokenStream。而要返回一个分词的完整的TokenStream又需要另一个类的子类Tokenizer.java,它继承自TokenStream.java。用户自定义的Tokenizer类要写的一个关键方法是next()(在TokenStream类中定义),这个方法就是返回一个个的中文词语。
  在org.apache.nutch.analysis这个包里定义了Nutch分析器的抽象类NutchAnalyzer(继承自org.apache.lucene.analysis.Analyzer.java)。由于Nutch是基于plugin的模式,所以对外来说NutchAnalyzer这个抽象类是最重要的。德语和法语这两个分析器就是直接继承了这个NutchAnalyzer抽象类的。所以要加入自己的分析器,只要继承这个类就可以了。而Nutch自身所带的NutchDocumentAnalyzer(继承自NutchAnalyzer)分析器是由javaCC生成的。
  NutchDocumentAnalyzer这个类里面有两个子分析器AnchorAnalyzer和ContentAnalyzer。AnchorAnalyzer是锚文本专用的分析器,它是NutchDocumentAnalyzer的内部类,其实它也是 ContentAnalyzer,只是在域名为"anchor"时,加入了一个过滤器AnchorFilter,它的作用就是设置这个类中定义的 INTER_ANCHOR_GAP,此处设为4,增加查询的模糊度。另一个分析器 ContentAnalyzer分两部分,一部分是过滤器CommonGrams,另一部分是切分器 NutchDocumentTokenizer。
  在Lucene里,一个分词器包括两部分,一个analyzer、一个tokenizer;同样在Nutch中默认分词器由Nutch-DocumentAnalyzer和NutchDocumentTokenizer两部分组成,另外在 NutchDocumentAnalyzer里有一个常用gram的过滤器。继承了NutchAnalyzer的NutchDocumentAnalyzer就是Nutch系统默认的分词器了,它又是调用了Nutch-DocumentTokenizer切分器,而这个切分器就是由javaCC生成的。
  Nutch搜索引擎处理英文文档时,几乎不需要特殊的附加工作,因为英文文档本身就是以词为单位的组织,词和词之间是靠空格或者标点符号显式地表示词的边界,所以整个文档的处理几乎不必考虑分词的算法的问题。但Nutch搜索引擎在处理中文文档的内容分析时,由于中文文档是连续的汉字组成的句子,中文的词语没有明显的边界标志,如何分词,如何确定最小索引项成为一个难题,需要借助特定的算法或者词典来完成。Nutch对中文默认采用单字分词,它的中文分词的效率和准确度都不能满足实际的需要,因此,我们需要对Nutch中的分词方法进行修改。[4]
  本系统采用了IK Analyzer 作为Nutch的中文分词组件,由于IK Analyzer具有以下几个特性:采用了特有的“正向迭代最细粒度切分算法”,具有60万字/秒的高速处理能力;采用了多子处理器分析模式,支持:英文字母(IP地址、E-mail、URL)、数字(日期、常用中文数量词、罗马数字、科学计数法),中文词汇(姓名、地名处理)等分词处理;优化的词典存储,更小的内存占用;支持用户词典扩展定义;针对Lucene全文检索优化的查询分析器IKQueryParser;采用歧义分析算法优化查询关键字的搜索排列组合,能极大地提高Lucene检索的命中率。如IK Analyzer对“作者博客:linliangyi2007.javaeye.com 电子邮件:linliangyi2005@gmail.com”的分词结果:作者|博客| linliangyi2007.javaeye.com|linliangyi|2007|javaeye|com|电子邮件|邮件地址|linliangyi2005@gmail.com|linliangyi | 2005|gmail|com,分词效果比较好。[5]
  下面是Nutch加入IK Analyzer的具体过程:
  (1)下载压缩包。在GoogleCode 开源项目(http://code.google.com/p/ik-analyzer/)中下载IK Analyzer完整压缩包,并下载JavaCC与ant压缩包。本系统采用IKAnalyzer3.1.1 Stable_AllInOne javacc-5.0 ant-1.8.1。
  (2)让Nutch支持中文分词。在Nutch-1.0目录下,找到srcjavaorgapache utch analysisNutchAnalysis.jj文件,修改NutchAnalysis.jj文件,将| >改为:| ) >。将Windows命令环境切换到解压后的JavaCC文件夹的bin目录下,执行如下命令:javacc NutchAnalysis.jj,生成了7个Java文件,将这7个Java文件替换掉srcjavaorgapache utchanalysis目录下相同名称的文件。
  (3)添加IK Analyzer。将下载好的IKAnalyzer3.1.1Stable.jar复制到Nutch目录下的lib文件夹中,修改srcjavaorg apache utchanalysis目录下NutchDocumentAnalyzer.java文件,添加import语句,修改tokenStream方法。代码如下:
  import org.wltea.analyzer.lucene.IKAnalyzer;
  public TokenStream tokenStream(String fieldName, Reader reader) {
   Analyzer analyzer = new IKAnalyzer();
   return analyzer.tokenStream(fieldName, reader);
   }
  (4)重新编译Nutch。修改Nutch目录下build.xml文件,在大概195行后加入如下代码:。将Windows命令环境切换到Nutch-1.0目录下,执行ant命令,它会自动根据当前目录下的build.xml进行重建。将编译生成的build文件夹下的nutch-1.0.job文件替换掉Nutch目录下的nutch-1.0.job文件。将编译生成的buildclasses下的文件打包成nutch-1.0.jar,替换掉Nutch目录下的nutch-1.0.jar文件。将之前解压到Tomcat 6.0 webapps目录下的nutch-1.0WEB-INFlib中的nutch-1.0.jar替换为刚刚生成的nutch-1.0.jar,并且加入IKAnalyzer3.1.1Stable.jar。
  (5)为IKAnalyzer增加停用词表:为了提高编制索引的效率和检准率,在编制索引过程中排除一些无意义的虚词是十分必要的。首先对IKAnalyzer.cfg.xml进行修改,在文件中添加如下内容:
  
  
  
  IK Analyzer 扩展配置
  /ext_stopword.dic
  

  然后再新建一个dic文件,命名为ext_stopword.dic。在文件中添加停用词,如:也、了、仍、从、以、使、则、却、又、及、对、就、并、很、或、把、是、的、着、给、而、被、让、在、还、比、等、当、与、于、但等词,并用回车分隔。
  最后,将IKAnalyzer.cfg.xml和ext_stopword.dic添加到nutch-1.0.job文件中,并且Nutch在以后的分词处理工作中,IK Analyzer会将停用词表中的那些停用词排除,不让其编入索引中。
  (6)增加文本解析插件。Nutch默认对html和txt文件进行解析,而在由于教学资源中经常使用如pdf、word、excel和ppt等常用格式文件,用户对这些文件的检索需求非常高,这就需要Nutch能够对这些文件进行解析,并将其内容编制到索引当中。为Nutch增加这些文件的文本解析插件就能达到这一目的。
  打开nutch-1.0conf文件夹下的nutch-default.xml文件。该文件有一系列属性名和属性值组成,用于配置Nutch工作中的各项属性。找到属性名为”plugin.includes”的项,其中“parse-(text|html|js)”代表Nutch会对text、html、js文件进行解析,将其改为parse-(text|html|pdf|msword|mspowerpoint|msexcel)就可以满足多种文件的解析需求。
  除此之外,找到“http.content.limit”属性,默认的属性值为65536,它表示当网站内的文件大小大于65536个字节时,文件内容将被截断,只剩下65536字节。这会导致系统在运行时抛出解析不完整异常(parse incomplete exception),而且会使大文件编制索引时内容不完整,大大影响系统的检全率。所以,必须将其属性值改为-1,表示文件大小不受限制。
  五、构建搜索引擎
  在对Nutch的中文分词模块进行改进之后,接下来就是抓取网页并为其建立索引(本文以南京农业大学精品课程网为例):
  第一步,在nutch-1.0目录下新建urls文本文档,并输入我们要抓取的网页——南京农业大学精品课程网的网址http://jpkc.njau.edu.cn/。
  第二步,打开nutch-1.0conf下的crawl-urlfilter.txt,找到# accept hosts in MY.DOMAIN.NAME ^http://([a-z0-9]*.)*MY.DOMAIN.NAME/置换成# accept hosts in MY.DOMAIN.NAME ^http:// ([a-z0-9]*.)*jpkc.njau.edu.cn/,也就是要抓取的起始网页。
  第三步,再次打开Cygwin,输入命令cd /cygdrive/d/nutch-1.0,进入nutch-1.0目录,输入bin/nutch crawl urls -dir njaujpkc-depth 5-threads 10,就可以看到Nutch开始工作了,这里的-dir是存放爬行结果的目录,-depth是抓取的页面深度,-threads是下载的线程数目,urls是第一步所创建的存有所要抓取网页的文本文档。
  第四步,等到Nutch抓取网页完毕后,修改F:Tomcat 6.0webapps utch-1.0WEB-INF classes utch-site.xml文件,具体内容如下:
  
  
  searcher.dir
  D: utch-1.0 jaujpkc
  
  

  

  启动Tomcat,输入http://localhost:8080/nutch-1.0,就会发现搜索引擎能够搜索了。
  第五步,发现搜索中文出现乱码,修改Tomcat配置文件tomcat 6.0 confserver.xml,具体内容如下:
     redirectPort="8443"
   connectionTimeout="20000"
   URIEncoding="UTF-8"
  useBodyEncodingForURI="true"/>
  六、搜索引擎的比较
  成功配置完搜索引擎之后,我们将基于Nutch的教学资源搜索引擎与百度、Google进行搜索比较。假设有一位学生需要查询生态学方面的资源,在Nutch搜索栏中输入“生态学”,在百度与Google搜索栏中分别输入“site:www.njau.edu.cn 生态学”,用查询结果前三项作比较,如表所示。
  可以看出,基于Nutch的教学资源搜索引擎比其他2个商业搜索引擎更好地搜索出所需教育资源。
  七、 结束语
  本文主要介绍了如何实现基于Lucene和Nutch教育资源搜索引擎的构建,但是只是初步地实现了在校园网中搜索教育资源的功能,如果要使搜索引擎的搜索性能提高,更人性化地进行搜索,仍需要进一步进行探究与改进。
  参考文献:
  [1] Lucene中国:http://www.lucene.com.cn/
  [2]蔡小艳,寇应展,沈巍,郑伟.Nutch-0.9中JE中文分词的实现[J].科学技术与工程, 2008,8(17):4881-4884.
  [3]张锦圻.基于Nutch的中文搜索引擎的构建[J].图书馆研究与工作,2009(1):54-57.
  [4]陈建锋.Nutch的中文问题研究[J].现代计算机专业版(专业版),2009(7):60-62.
  [5]IK Analyzer中文分词器V3.0使用手册.
  (编辑:隗爽)
其他文献
为了保证海洋平台在运输过程中的安全,需要对海洋平台进行系固设计.在海洋平台外力的计算中,由摇摆运动引起的倾斜重力和运动惯性力的大小占主要成份,其大小取决于运输船舶的
针对采修一体化平台修井模块的特点,从结构设计的角度,介绍了修井模块的整体结构形式,模块之间、模块与固定平台之间的连接方式及主体模块吊耳的设计等.
基于路由器的包过滤防火墙实验是计算机网络课程实验教学的重难点之一,本文利用神州数码网络公司的DCR1702路由器和DCS3926交换机等网络设备对基于标准访问控制列表和基于扩展
开发B/S架构下基于J2EE平台的教学管理系统,可以改善高等职业院校的教学环境和条件,提高教学管理水平和工作效率。本文首先借助UML对系统进行分析和建模,然后给出了基于J2EE平台
在基础教育课程改革的背景下,通过调查部分在校高师生和中学教师的现代教育技术能力现状,整合现代教育技术课程内容体系,对实施课堂教学策略和课程教学评价体系进行教学改革,解决
本文对四川广播电视大学校园网建设10年来,防火墙技术在校园网安全建设中的使用情况进行了全面的介绍,分析了学校在使用防火墙三个阶段中,各个阶段使用防火墙的背景.需要解决的问
基于脉动风的基本理论和Davenport风荷载功率谱,提供了在频域内杆系结构迎风风激响应的计算方法。应用Morison方程确定风荷载,同杆系结构耦合求解其各阶振动的频率响应函数,并根
一个生动的多媒体课件离不开音视频媒体。音视频媒体的加入不但可以渲染气氛、吸引注意力、强化效果,而且可以起到提高学生学习积极性,进而提高教学效果的作用。Director不但支