基于Java的搜索引擎Nutch中文搜索技术研究
摘要:Nutch是一个优秀的基于Java的开放源码搜索引擎,为了使它能够支持中文搜索,本文在分析了Nutch结构的基础上,采用词表分词技术和前向匹配分词算法对中文信息进行分词,以JavaCC脚本实现上下文相关文法中文分析模块,成功实现了Nutch中文搜索功能。
关键词:搜索引擎; 分词; 正规
Abstract: In order to enable Chinese search in Nutch, which is an excellent Java-based open source search engine, this paper analyses the structure of Nutch and separates words in Chinese information based on Chinese dictionary and forward matching algorithm. Chinese analysis module is generated by JavaCC script; that results in supporting Chinese search in Nutch.
Key words: Search Engine; Word Segmentation; Regular Expression
1 前言
搜索引擎[1]是当今网络应用的核心问题,已经受到各企业和研究部门的广泛关注。Lucene和Nutch是针对国外英文系统环境的搜索引擎,本文在研究了中文分词技术和JavaCC技术的基础上,成功地实现了Lucene和Nucth的中文分析模块,使Lucene和Nucth能够实现中文信息检索。
2 Nutch分析
Lucene是开放源码的基于Java的全文检索引擎,其贡献者Doug Cutting是一位资深全文索引/检索专家。作为一个全文检索系统,在进行检索之前需要建立索引,索引的过程是先读取文章中的词语,然后一一存放在称为倒排索引文件的索引数据库(Index Database)中。索引数据库记录了词语出现的位置,频率等相关信息,以备后面读取。Nutch是Cutting创建的另一个Java开源项目,目的是提供全功能的搜索引擎,其底层借助了Lucene的部分功能,并且索引结构与Lucene兼容。
Lucene和Nutch并没有规定数据源的格式,而只提供了一个通用的结构(Document对象)来接受索引的输入,因此输入的数据源可以是数据库、WORD文档、PDF文档和HTML文档,只要能够设计相应的解析转换器将数据源构造成Docuement对象即可进行索引。对于大批量的数据索引,还可以通过调整IndexerWrite的文件合并频率属性(MergeFactor)来提高批量索引的效率。用户输入查询字符串(Query String),然后经过分析器的分析,就会产生一个Query对象。真正搜索时,使用IndexSearcher类的search方法,它返回Hits对象。通过遍历Hits对象的所有文档(document),就可以找到所有被搜索到的文章(页面)。查询字符串的语法定义为:
Query ::= ( Clause )*
Clause ::= [" ", "-"] [<TERM> ":"] ( <TERM> | "(" Query ")")
中间的逻辑包括:and or - &&||等符号,而且还有"短语查询"和针对西文的前缀/模糊查询等。总的来说,这是其他很多搜索引擎都不具备的功能。通过修改QueryParser的语法生成脚本,还可以修改或扩展查询分析器的功能,使它更加适用于中文环境。所有的问题都通过一个额外抽象层来方便以后的扩展和重用,通过重新实现来达到自己的目的,而对其他模块而不需要。可以简单的应用入口Searcher, Indexer,并调用底层一系列组件协同的完成搜索任务。所有的对象的任务都非常专一,比如搜索过程QueryParser分析将查询语句转换成一系列的精确查询的组合(Query),通过底层的索引读取结构IndexReader进行索引的读取,并用相应的打分器给搜索结果进行打分/排序等。所有的功能模块原子化程度非常高,因此可以通过重新实现而不需要修改其他模块。除了灵活的应用接口设计,Lucene和Nutch还提供了一些适合大多数应用的语言分析器实现(SimpleAnalyser,StandardAnalyser),这也是新用户能够很快上手的重要原因之一。
计算机应用论文阅读排行
- ·刍议《CAD技术与应用》精品课程建设
- ·嵌入式家庭网关中SPI接口的软件模拟
- ·计算机辅助历史教学及CAI课件的开发应用
- ·基于VxWorks的多DSP系统的多任务程序设计
- ·MCU应用系统与Internet连接的一种新技术
- ·嵌入式系统设计方法的演化—从单片机到单片系统
- ·用EP7211实现传呼信息实时语音合成和播放
- ·如何给PCI卡选用合适的总线控制器
- ·一种用VHDL设计嵌入式Web Server的方案
- ·一种嵌入式系统的内存分配方案
- ·便携数据库管理系统的网络连接与安全
- ·用GNU工具开发基于ARM的嵌入式系统
- ·使用uC/OS-II操作系统的短信息电话机
- ·基于StrongARM的视频采集与处理系统
- ·嵌入式Linux系统中的GUI系统的研究与移植
- ·嵌入式Linux系统CGI程序设计技术





