Nutch中文分词总结

上传人:飞*** 文档编号:33955347 上传时间:2018-02-19 格式:DOC 页数:15 大小:41.56KB
返回 下载 相关 举报
Nutch中文分词总结_第1页
第1页 / 共15页
Nutch中文分词总结_第2页
第2页 / 共15页
Nutch中文分词总结_第3页
第3页 / 共15页
Nutch中文分词总结_第4页
第4页 / 共15页
Nutch中文分词总结_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《Nutch中文分词总结》由会员分享,可在线阅读,更多相关《Nutch中文分词总结(15页珍藏版)》请在金锄头文库上搜索。

1、Nutch中文分词总结Nutch中文分词总结2011-07-27 09:591中文分词介绍中文分词是在做检索类系统时需要重点考虑的一个因素。Nutch的本土化过程也需要更改对中文分词的支持。目前,Nutch中文分词方式大致有两种方式:一是修改源代码。这种方式是直接对Nutch分词处理类进行修改,调用已写好的一些分词组件进行分词。二是编写分词插件。这种方式是按照Nutch定义的插件编写规则重新编写或者添加中文分词插件。以上两种方式都是可取的。目前,由于开源社区的活跃,已经有很多种分词组件的出现,无论是修改源代码的方式还是编写分词插件的方式,都是依赖于这些分词组件的。下面列出了主要的一些分词组件:

2、1、CJKAnalyzer Lucene自带的一种中日韩分词器。2、ChineseAnalyzer Lucene自带的对中文的分词器3、IK_CAnalyzer(MIK_CAnalyzer)一种基于词典的分词器,Lucene自带,相对而言较简单。4、Paoding分词比较有名的庖丁解牛分词组件,效率高分词速度快,分词准确度高。5、JE分词网友编写的分词组件,性能也不错。6、ICTCLAS中科院的一组分词工具,其中有开源的也有收费版本,他基于HMM模型。主要的几个如下:ICTCLAS_OpenSrc_C_windows、ICTCLAS_OpenSrc_C_Linux为中科院计算所张华平和刘群老师

3、研制。SharpICTCLAS为.net平台下的ICTCLAS,是由河北理工大学经管学院吕震宇根据Free版ICTCLAS改编而成,并对原有代码做了部分重写与调整。ictclas4j中文分词系统是sinboy在中科院张华平和刘群老师的研制的FreeICTCLAS的基础上完成的一个java开源分词项目,简化了原分词程序的复杂度,旨在为广大的中文分词爱好者一个更好的学习机会。imdict-chinese-analyzer是imdict智能词典的智能中文分词模块,作者高小平,算法基于隐马尔科夫模型(Hidden Markov Model,HMM),是中国科学院计算技术研究所的ictclas中文分词程

4、序的重新实现(基于Java),可以直接为lucene搜索引擎提供中文分词支持。2分词结构分析在进行实验之前需要对Nutch分词结构进行分析。本文仔细研究了一下Nutch的org.apache.nutch.anlysis包,其中大多的类都是与Nutch在爬行网页时候对网页中的文本分词解析相关的。Nutch解析文本类的架构得非常好,下面就让我们来研究下它的架构吧,了解清楚之后就可以为我们之后加入中文分词打下很好的基础。Nutch分词的最底层使用的是lucene的Analyzer抽象类,它位于org.apache.lucene.analysis包中,NutchAnalyzer继承了Analyzer类

5、、实现了Configurable、Pluggable接口,该抽象类中定义了一个公有的抽象方法tokenStream(String fieldName,Reader reader)返回的类型是TokenStream。该方法是用于分析文本,其后的具体类中在这个方法中实现了从文本中提取索引词组的策略、算法。而返回的TokenStream类是即可以从文本或者从查询词组中枚举token序列的抽象类,在Lucene中继承了它的具体类有Tokenizer、TokenFilter。NutchAnalyzer类是Nutch中扩展分析文本的扩展点,所有用于解析文本的插件都得实现这个扩展点。对于Analyzer一个

6、典型的扩展就是首先建立一个Tokenizer(org.apache.lucene.analysis.Tokenizer),它是用于将Reader中读入的Stream分解成最原始的词组(Token-org.apache.lucene.analysis.Token),在Tokenzier分解Stream之后,一个或多个TokenFilter会用于过滤这些词组中无意义的词组。NutchDocumentAnalyzer类继承了NutchAnalyzer,其中有三个静态私有内部类ContentAnalyzer、AnchorFilter、AnchorAnalyzer它们分别继承了Analyzer(org.

7、apache.lucene.analysis.Analyzer)、TokenFilter(org.apache.lucene.analysis.TokenFilter)、Analyzer(org.apache.lucene.analysis.Analyzer)。在ContentAnalyzer中调用了CommonGrams类(org.apache.nutch.analysis),该类构建了一个n-grams的分词方案,因为需要在索引中考虑词组的出现频率,并且实现了对n-grams方案词组查询的优化措施。在n-grams方案中单个的词组同样会被该方案索引,索引期间大量使用了Token(org.a

8、pache.lucene.analysis.Token)的各种方法,并且还会调用nutch/conf/nutch-default.xml中mon.terms.file的配置属性。其上各个类与接口的uml图如下:对应前面一篇文章就可以再仔细研究Nutch其他结构就可以大概知道如何在Nutch中加入中文的分词方法了,从分析中我们可以看出来,Nutch的分词大量使用了Lucene的基本抽象类或接口,这也是与两个项目的主持人同为Doug Cutting分不开的,当然了Lucene的良好架构也奠定了各种应用对其扩展使用的基础。3实验过程本次实验选择了paoding分词组件和imdict-chinese-

9、analyzer作为实验工具。3.1 paoding plugin以下是paoding分词组件的实验:1、实验准备下载paoding分词组件(下载地址:)将下载下的文件paoding-analysis-2.0.4-beta.zip解压,得到paoding-analysis.jar。本次实验假设Nutch已配置好。2、在src/plugin下面新建一个目录:analysis-zh作为分词组件包,新建一个lib-paoding-analyzers存放paoding-analysis.jar。3、在analysis-zh包中建立两个文件一个文件夹,分别为:build.xml:project name

10、=analysis-zhdefault=jar-coreimport file=./build-plugin.xml/!-Build compilation dependencies-target name=deps-jarant target=jarinheritall=falsedir=./lib-paoding-analyzers/target!-Add compilation dependencies to classpath-path id=plugin.depsfileset dir=$nutch.root/buildinclude name=*/lib-paoding-analy

11、zers/*.jar/fileset/path/project plugin.xml:plugin id=analysis-zhname=Paoding Analysis Plug-inprovider-name=net.paodingruntime library name=paoding-analysis.jarexport name=*/library/runtime requires import plugin=nutch-extensionpoints/import plugin=lib-lucene-analyzers/requires extension id=org.apach

12、e.nutch.analysis.zhname=Paoding Analyzerpoint=org.apache.nutch.analysis.NutchAnalyzerimplementation id=PaodingAnalyzerclass=org.apache.nutch.analysis.zh.PaodingAnalyzerparameter name=langvalue=fr/implementation/extension/plugin Src/Java文件夹,里面新建一个包:org/apache/nutch/analysis/zh,在该包内新建文件PaodingAnalyzer

13、.java:package org.apache.nutch.analysis.zh;import java.io.Reader;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.analysis.TokenStream;public class PaodingAnalyzerprivate final static Analyzer ANALYZER=new net.paoding.analysis.analyzer.PaodingAnalyzer();/*Creates anew instance of

14、ChineseAnalyzer*/public PaodingAnalyzer()public TokenStream tokenStream(String fieldName,Reader reader)return ANALYZER.tokenStream(fieldName,reader);在lib-paoding-analyzers文件夹下建立如下文件:build.xml:?xml version=1.0?project name=lib-paoding-analyzersdefault=jarimport file=./build-plugin.xml/!-!Override the

15、 compile and jar targets,!since there is nothing to compile here.!-target name=compiledepends=init/target name=jardepends=compilecopy todir=$build.dirverbose=truefileset dir=./libincludes=*/*.jar/copy/target/project plugin.xml:?xml version=1.0encoding=UTF-8?plugin id=lib-paoding-analyzersname=Paodin

16、g Analysersprovider-name=net.paodingruntime library name=lib-paoding-analyzers.jarexport name=*/library/runtime/plugin新建一个lib文件夹,将paoding-analysis.jar放入其中。另外,修改NutchDocumentAnalyzer为:package org.apache.nutch.analysis;/JDK imports import java.io.Reader;import java.io.IOException;/Lucene imports import org.apache.lucene.analysis.Analyzer;import org.a

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号