Nutch中文分词插件的编写与配置

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

N u tch 中文分词插件的编写与配置

国防科技大学 赵修文 国防大学 吕大军

[摘 要]由于In ternet 的迅猛发展,使得用户查找信息犹如大海捞针,而搜索引擎则能帮用户很好的解决这个问题。N u tch 是用java 语言开发的,基于L ucene 的完整的网络搜索引擎,并采用插件机制进行设计,通过对扩展点的扩展,用户可以开发自己的各类插件。由于N u tch 的分词器对中文只进行单字切分,若要实现较好的对中文信息的搜索查询,就需要编写一个中文分词器。下面介绍N u tch 中文分词插件的实现与配置。[关键词]搜索引擎 中文分词 查询

一、编写自己中文分词插件

编写N u tch 的分词插件必须从o rg .apache .nu tch .analy 2sis .N u tchA nalyzer 扩展点进行扩展,具体使用什么分词方法用户可以根据应用而定,如正向最大匹配法、逆向最大匹配法和统计等方法。目前中科院的I CTCLA S 分词系统的准确率是比较高的,在项目应用中可以调用I CTCLA S 的接口实现分词。实现分词的两个类的定义如下:

pub lic class Ch ineseA nalyzer ex tends N u tchA nalyzer {@O verride

pub lic TokenStream tokenStream (String fieldN am e ,R ead 2er reader ){

TODO :添加代码可以实现停用词过滤等功能retu rn new Ch ineseToken izer (reader );}}

pub lic class Ch ineseToken izer ex tends Token izer {pub lic Token nex t ()th row s I O Excep ti on { TODO :实现用户自己的分词代码}}二、修改相关文件

N u tch 在进行网页及文件分析时,会根据信息的语言调用相应的分析器,从而达到最好的分析效果。为了实现中文的分析,需做如下修改:

1、修改A nalyzerFacto ry .java

将Ex ten si on ex ten si on =getEx ten si on (lang );

修改为:Ex ten si on ex ten si on =getEx ten si on (“zh ”); zh

代表中文

2、修改Index .java

将N u tchA nalyzer analyzer =facto ry .get (doc .get (“

lang ”));替换为N u tchA nalyzer analyzer =facto ry .get (“

zh ”);最后编译这两个文件,将nu tch -0.x .x .j ob (jar 文件,可以用w in rar 等解压缩工具打开)中的这两个文件替换即可,也可以使用an t j ob 进行编译,得到新的j ob 文件。

如果只对中英文信息进行处理,修改上面两个文件就可以了。若需要对更多语言更好的支持,则需作如下工作(不需要修改上述的两个java 源文件):使用N u tch 中的N gram P rofile 类生成3.ngp 文件,用于分词时L anguage Iden tifier 类对语言的识别,从而调用相应语言的分词器。

3、修改N u tchA nalysis .jj

对于搜索引擎而言,在信息抓取和查询的时候应当使用相同的分词方法,才能达到最好的切分效果,为了在用户查询时调用相同的中文插件进行词语切分,还必须更改N u tchA nalysis .jj 文件;因为在产生查询的时候,系统在调用了中文插件之后,用N u tchA nalysis 的parse 方法产生query ,而这个方法默认的是产生中文单字的切词,所以需要将N u tchA nalysis .jj 文件中的更改为()+,然后用JavaCC 将其编译为java 源文件,最后将o rg .apache .nu tch .analysis 包下新编译产生的class 文件替换nu tch -0.x .x .jar 包中的这些类文件即可。

三、配置

通过上述修改后,我们的分词程序已经写好了,那么怎样让nu tch 调用我们的分词器呢?仅仅只需要书写插件配置文件p lu 2gin .xm l 和修改nu tch 配置文件nu tch -site .xm l 。

1、按照德语或法语插件的p lugin .xm l ,书写自己插件的p lugin .xm l 配置文件,内容如下:

id ="analysis -zh "

nam e ="Ch inese A nalysis P lug -in "versi on ="1.0.0"

p rovider -nam e ="o rg .apache .nu tch ">

< lib rary >< run ti m e >< requ ires >

po in t ="o rg .apache .nu tch .analysis

.N u tchA nalyzer ">

class ="o rg .apache .nu tch .analysis

.zh .Ch ineseA nalyzer ">

< i m p lem en tati on >< ex ten si on >< p lugin >

其中zh (即lang 的参数值)为中文代码;o rg .apache .nu tch .analysis

.zh .Ch ineseA nalyzer 和o rg .apache .nu tch .analysis .zh .Ch ineseToken izer 编译为jar 包并保存为analysis -zh .jar ,最后将p lugin .xm l 文件和analysis -zh .jar 一同放在p lugin s 目录中即可。服务器端也需要同样的操作,即 W EB -I N F lib nu tch -0.x .x .jar 的替换和插件的复制。

2、 W EB -I N F classes nu tch -site .xm l

p lugin .includes 的参数值(正则表达式描述)描述的是目录名,我们的中文插件应该放在p lugin s analysis -zh 目录下。

p lugin .includes < nam e >

p ro toco l -h ttp u rlfilter -regex parse -(tex t h tm l js ) index -basic query -(basic site u rl ) summ ary -ba 2sic sco ring -op ic analysis -zh < value >

R egu lar exp ressi on nam ing p lugin directo ry nam es to include .A ny p lugin no t m atch ing th is exp ressi on is excluded .

In any case you need at least include the nu tch -ex ten si on 2po in ts p lugin .By defau lt N u tch includes craw ling ju st H TM L and p lain tex t via H T T P ,and basic index ing and search p lug 2in s

.< descri p ti on >< p roperty >< configu rati on >3、修改search .jsp

若浏览器能正确的识别客户端的语言,则不需要做任何修改,如果不能正确地识别,则需要修改search .jsp 文件,给lang 赋予相应的语言值。

String queryL ang =request .getParam eter ("lang ");if (queryL ang ==nu ll ){queryL ang ="";}

至此一个完整的中文分词插件就可以在你的搜索引擎中运行了。

参考文献

[1]N u tch h ttp : lucene .apache .o rg nu tch [2]L ucene h ttp : lucene .apache .o rg [3]中文自然语言处理开放平台h ttp : www .n lp .o rg .cn

602—科技信息

计算机与网络