注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

和申的个人主页

专注于java开发,1985wanggang

 
 
 

日志

 
 

Nutch源码学习系列之一:Analysis包(原创) -  

2010-10-24 21:29:54|  分类: java分布 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
Nutch源码学习系列之一:Analysis包(原创) - - 和申 - 和申的个人主页

TjuAILab    张步峰

Nutch0.7出来,对于我们这些Lucene爱好者来说,是件兴奋的事情!当时用Nutch0.6做实验已经让我非常兴奋。

Nutch0.7比之0.6又增添了一部分功能,我们开发一些小型搜索引擎可以修改Nutch的一些接口,使之更加用户化。

此节主要讲述Nutch下的Analysis包即package org.apache.nutch.analysis

阅读此包是你可以参照NutchAPI文档。http://lucene.apache.org/nutch/apidocs/index.html。或者使用的硬盘上的也可。

搜索引擎去除Spider外基本架构可以简要描述如下

 

Nutch源码学习系列之一:Analysis包(原创) - - 和申 - 和申的个人主页

  

由于Analysis主要处理分词问题。在图中看出需要分词的地方就是所用入库和对用户查询进行分词。

NutchAnalysis有一下几个文件:(黄色底是NutchAPI文档列的)

CharStream.java

     interface CharStream

  *这个接口描述了一个维护字符串行和列位置的字符流。在某种程度上,它还具有备份字符流的

  *能力。此接口的一个实现有JavaccParser产生,用于TokenManager这个实现中。

  *

  *除去backup方法外的其他所有方法都可以被以任何方式实现。backup的正确实现需要对lexer的正确操作。

  *其他的方法被用来获取信息,诸如行序号、列序号、用于Token却没有用于lexer的字符串。

  *因此这些方法对应的实现不会影响产生lexer的操作   

CommonGrams.java

     *对于索引时经常出现的项和词构建n-grams(不是很明白).使用n-grams优化词查询。单个项依旧使用

     *覆盖的n-grams索引。

FastCharStream.java

     *CharStream接口的一个有效实现。注意这并没有进行行数计算,当时追踪了在输入中Token的字符位置

     *这个字符位置是LuceneAPI需要的

NutchAnalysis.java

     应该说是Analysis包的核心了,主要完成Nutch语言(词典)分析器和查询分析器。具体到语言分析,要去

Stop Words,然后中文分词,或者英文分词等等。

NutchAnalysisConstants.java

      一个接口主要被NutchAnalysisNutchTokenManager所用,里面含的都是常量。譬如Token的类型(冒号,省略号,阿拉伯数字,短语等等)和TokenImage(就是Token类型的string化)

NutchAnalysisTokenManager.java

      管理Token,为NutchAnalysis所用

NutchDocumentAnalyzer.java

      *NutchDocumentAnalyzerNuctch文档服务。使用JavaCC定义的语言(词典)分析器

   *@link NutchDocumentTokenizer,不含有StopWords列表。从而保持了查询分析的连贯性。

     NutchAnalysis相对独立

NutchDocumentTokenizer.java

      *此分词器用于对Nutch的文档文本进行分词。是JavaCC所产生的词典分析器的实现。

       NutchDocumentAnalyzer所用。

ParseException.java

        *当查询分析出错时,此异常被抛出。在产生的查询分析器(Parser)中。

        *你可以通过调用方法generateParseException来显示地创建此异常类的对象。

*只要你保留公共feild(成员变量),你可以修改这个类使其报错机制更加用户化。

Token.java

        Token类内含Token的类型,每个Token在字符串中的起始位置和终止位置等等

TokenManager.java

       一个接口,非常简单,里面只有一个用于返回下一个Token的函数。在Analysis包没有被使用。可能留着以后扩展用

TokenMgrError.java

        主要用于分词出错,进行报错。

其主要的类别继承图如下:

Class Hierarchy

Interface Hierarchy

Nutch的底层是基于Lucene的,从图中你可以看出主要的两大接口NutchDocumentAnalyzerNutchDocumentTokenizer都是从Lucene继承过来的。所以更有必要认真研究LuceneAnalysis包。

由于BlogChina发文大小有限制,想看更全的源码部分,可以看我另一个blog!

http://blog.donews.com/windshow/archive/2005/08/26/526755.aspx 

  评论这张
 
阅读(646)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016