Nutch中文分词插件的编写与配置
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 文件中的
三、配置
通过上述修改后,我们的分词程序已经写好了,那么怎样让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 ">
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 目录下。 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—科技信息 计算机与网络