There can be no Triumph without Loss,No Victory without Suffering,No Freedom without Sacrifice.
All you have to decide is what to do with the time that is given to you.
Get busy Living, or Get busy Dying?
  首页 | 留言给我 | 订阅 Rss | CLI | 黄白之恋 Posts:158   Hits: 1326867    Comments: 168    
 日历归档
<<  <  2018 - 11  >  >>
SuMoTuWeThFrSa
    123
45678910
11121314151617
18192021222324
252627282930
 About Me
 Name: ZhangSichu
 Sex: Male
 Age: 32
 Email: ZhangSichu@gmail.com
 MSN: ZhangSichu@hotmail.com
 Home: ZhangSichu.com
 WeiBo: weibo.com/zhangsichu
 个人推荐
 分类归档
  ·C++/C(5)  RSS
  ·软件工程(1)  RSS
  ·杂事/随感(26)  RSS
  ·.Net/Java(30)  RSS
  ·面向对象程序设计(5)  RSS
  ·汇编/破解(0)  RSS
  ·平面设计(3)  RSS
  ·SQL(5)  RSS
  ·COM/COM+(2)  RSS
  ·Web开发(81)  RSS
 My Friends
Back Forward Refresh Home 2018年11月15日 星期四 RSS CLI Mine Sweeper. In Javascript.

  Nutch插件机制和Nutch分词机制分析
字体大小 [ ]

Plugin插件机制为Nutch提供了很强大的扩展性,曾经看到一篇文章《不选择使用Lucene的6大原因》,其中就提到lucene的API不够开放。Lucene的OO设计的非常糟,尽管有包package和类class,但是Lucene的设计基本上没有设计模式的身影。这是不是c或者c++程序员写java程序的通病?Lucene中没有使用接口Interface,等等。在Lucene的2.0版本中就解决了这些问题,同时在Nutch的Plug实现中,完全没有这种问题,正是因为使用了Interface,Nutch的Plugin插件机制才如此的灵活,Nutch的Plugin完全基于Eclipse 2.x中的插件机制。如果你非常了解Eclipse 2.x的插件机制,完全可以跳过Nutch插件机制这一段。

Nutch插件机制
  Nutch提供插件机制,使得开发人员可以根据自己的需要给Nutch开发适合自己需求的Plugin,完成自己想要的操作。Nutch中所有的分析,索引和查询工作都是通过Nutch的Plugin来实现的。
  Nutch把自己可以提供的Plugin接口,用一个xml文档来描述。Nutch把这些接口信息,放在Nutch的plugins\nutch-extensionpoints下,Nutch同样认为plugins\nutch-extensionpoints是一个Nutch的Plugin。在plugins\nutch-extensionpoints下的plugin.xml有下面的描述:this file hosts all extension points nutch core code offers. Please not that plugins can define extension points as well to be extendable. 这样所有的Nutch插件都必须是实现自这些extension-points.接口的类。把操作封装成接口,Core Code流程中调用接口方法,标准的Template Pattern。

Nutch是如何加载并调用这些接口的呢?
  Nutch的PluginRepository是整个插件的加载过程。在installExtensionPoints和installExtensions方法中实现了对整个插件的加载。首先加载插件,然后加载插件的ExtensionPoint。Nutch记录了所有的ExtensionPoint,在每个ExtensionPoint中记录了扩展自这个ExtensionPoints的Extension。通过这种关系就可以通过一个ExtensionPoint(Nutch提供的扩展接口),得到所有实现了这个接口的类(Extension)。
  Nutch在自己的某个处理流程中通过Config,得到配置中配置加载的这个流程中需要的Extention。例如AnalyzerFactory的Extension加载过程:
extensionPoint=PluginRepository.get(conf).getExtensionPoint(NutchAnalyzer.X_POINT_ID)
这样所有实现了NutchAnalyzer这个接口的类(Exctesion)将被取得。然后根据需要调用这些接口。在插件的plugin.xml信息中,有一个parameter节点,存储的名值,是描述这个接口的配置信息。共Nutch查找并确定,是否使用这个接口。
  IndexFilter 中使用Filter的过程。就是一个典型的Nutch使用插件IndexFilter,对Document进行Index的过程。

分词过程
  Nutch根据不同的语言使用不同的分词器来分词。Nutch如何判定现在分析的网页是那个语言的网页?Nutch使用一个外部Plugin:language-identifier来确定当前分析的网页是那种语言的网页。然后在当前的Document中放入一个名为lang的Field。在进行索引创建和搜索的时候,都会根据lang选择对应语言的Analyzer,如果没有lang的信息,那么Nutch会使用默认的Analyzer对Document建立索引。通过这样的过程就实现了Nutch使用不同的分词器分析不同的网页。
  如果使用分词,可以直接修改Nutch的Default分词器。根据我个人的测试,language-identifier对中文的网页进行语言定位的使用,有时候很是不准确的。

相关链接
http://hi.baidu.com/hanjunjie1986/blog/item/82a4c5036734a8753912bb94.html
http://hi.baidu.com/sunky/blog/item/316faeafb372cbcd7dd92a6e.html
http://www.cnidc8.com/html/2008-03/142.html
  Posted @ 11/11/2008 10:53:30 AM | Hits (4343) | Comments (1

  Comment
 #re:Nutch插件机制和Nutch分词机制分析  7/27/2009 1:43:33 AM  nutch
直接修改Nutch的Default分词器,请问怎么修改呀?
  Post Comment
标题 *
作者 *
密码 记住我
评论 *
    


Stable in Firefox 1.5 2.0Stable in IE6 IE7Stable in MozillaStable in Netscape
ZhangSichu.com V0.1.7507
Powered By ZhangSichu
Copyright © ZhangSichu
Download ZhangSichu.com source code. Download source code