admin 管理员组

文章数量: 1087652


2024年3月13日发(作者:培训平台)

第20卷第5期 

2008年10月 

军械工程学院学报 

Vol_20 No.5 

Journal of Ordnance Engineering College 

0ct..2008 

文章编号:1008—2956(2008)05—0063—04 

汉语词法分析系统ICTCLAS在Nutch一0.9 

中的应用与实现 

蔡小艳 ,寇应展 ,沈巍 ,郑伟 

(1.军械工程学院计算机工程系,河北石家庄

2.北京航空航天大学电子信息工程学院,北京

050003; 

100083) 

摘要:分析了Nutch的语言分析器结构,针对Nutch对中文进行单字切分的不足,结合基于多层隐马模型的汉语 

词法分析系统ICTCLAS,以JavaCC脚本设计了可扩展的词法分析器,实现了Nutch对中文的词语切分。实验表 

明,利用JavaCC和ICTCLAS分词系统实现的中文分词完善了Nutch的中文搜索功能。 

关键词:Nutch;Lucene;ICTCLAS;中文分词 

中图分类号:TP393.09 文献标识码:A 

The Application and Realization of ICTCLAS on Nutch一0.9 

CAI Xiao.yan ,KOU Ying—zhan ,SHEN Wei ,ZHEN Wei 

(1.Department of Computer Engineering,Ordnance Engineeirng College,Shijiazhuang 050003,China;2.School of 

Electronics and Information Engineering,Beijing University of Aeronautics and Astronautics,Beijing 100083,China) 

Abstract:This paper analyzes the linguistic analysis structure of Nutch,which only segments Chinese into 

a single character.To solve this problem,the paper combines Chinese lexical analysis system ICTCLAS 

based on multi—layer HMM,using JavaCC torealize an expansible linguistic analysis,and finally imple— 

ments the Chinese word segmentation.The experiment shows that the Chinese word segmentation using Ja— 

vaCC and ICTCLAS perfects the Chinese searching function of Nutch. 

Key words:Nutch;Lucene;ICTCLAS;Chinese segmentation 

随着互联网技术的飞速发展,互联网络上的信 

息量正在以几何级数的速度增长。人们在享受互联 

网带来的便利的同时,却面临着如何在海量的网络 

信息中准确、快捷地找到自己所需要的信息问题。 

搜索引擎应运而生,它是互联网信息查询的导航针。 

现在的商业搜索引擎不少,但都是保密的,不便研 

究。而Nutch是用Java实现的开源搜索引擎,它提 

供了运行自己的搜索引擎所需的全部工具。 

的方法。中国科学院计算技术研究所开发的汉语词 

法分析系统ICTCLAS的分词正确率达到了 

97.58%,因此,笔者将中科院的ICTCLAS分词系统 

与Nutch相结合,实现了Nutch的中文分词。 

1 Nutch简介 

1.1 Lucene 

Nutch是在Lucene之上创建的开源搜索引擎。 

Lucene是Apache软件基金会Jakarta项目组的子项 

中文分词影响着搜索结果的相关度排序及搜索 

的效率和准确度,因此好的搜索引擎必须处理好中 

文分词。Nutch的分词器对英文的切分比较完善, 

目,是开放源代码的全文检索引擎工具包,它不是完 

整的全文检索引擎,而是全文检索引擎的架构,提供 

了完整的查询引擎、索引引擎和部分文本分析引擎 

(英文与德文两种西方语言)¨ 。Lucene的目的是 

对中文只进行单字切分,若要实现较好的中文信息 

的搜索查询,就需要在Nutch中增加中文分词处理 

收稿日期:2008-05—21;修回日期:2008-07・10 

作者简介:蔡小艳(1984一),女,硕士研究生 

为软件开发人员提供简单易用的工具包,以方便的 

在目标系统中实现全文检索的功能,或者是以此为 

军械工程学院学报 

基础建立完整的全文检索引擎。 

2.1.3 词库分词 

1-2 Nuteh 

词库分词是用已经建立好的词的集合(按照某 

Nutch是开源的Java语言实现的搜索引擎,是建 种算法)去匹配目标,当遇上集合中已经存在的词 

立在Lucene核心之上的Web搜索的实现。Lucene 时,就将它切分出来。通常词库分词被认为是最理 

为Nutch提供了文本索引和搜索的API。Nutch的出 

想的中文分词算法。 

现使得抓取、索引、检索一体化,并且开放源码,提供 使用词库分词法在文本中匹配单词,常用的算 

了除商业搜索引擎外的新选择。个人、企业都可通过 

法如下: 

Nutch来构建适合自身需要的搜索引擎平台,提供适 

1)最大正向匹配法(Maximum Matching Meth— 

用于自身的搜索服务,可以让研究者通过配置,逐步 

od1 

完善各个模块,从而实现所需的搜索引擎。 

最大正向匹配法通常简称为MM法,其切分流 

总体上Nutch可以分为抓取部分和搜索部分。 程见图1。其基本思想为:设D为词典,MAX表示 

抓取程序可抓取页面,并把抓取回来的数据做成反 D中的最大词长,str为待切分的字串。MM法是每 

向索引;搜索程序则对反向索引搜索回答用户的请 

次从str中取长度为MAX的子串与D中的词进匹 

求。抓取程序和搜索程序的接口是索引,二者都使 

配。若成功,则该子串为词,指针后移MAX个汉字 

用索引的字段 。 

后继续匹配,否则子串逐次减1进行匹配。 

2中文分词技术 

开始 

为了建立中文搜索引擎,首先要解决的就是中 

文的语言分析问题。英文是以词为单位,词和词之 

待切分的字符串 

间靠空格隔开。中文是以字为单位,句子中所有的 

字连起来才能描述某个意思,如何在这些由连续的 

取当前字符串序列的前MAX个字为匹配字 

文字组成的语句中把某个具有独立意义的词汇切分 

出来就是很大的问题。例如,英文句子I am a 

查找词典,进行匹配 

student,用中文则为:“我是一个学生”。计算机通过 

空格知道student是一个单词,但是不能很容易明白 

“学”、“生”合起来才表示一个词。把中文的汉字序 

列切分成有意义的词,就是中文分词。我是一个学 

上Y 

兰鳖婆 竺 

生,分词的结果是:我是一个学生。 

1切分词长为MAX的字词,即从待切 

N 

1 分字符串中去除该MAx字词 

2.1中文分词技术分类 

通常,对中文进行分词,一般有以下3种方式: 

单字分词、二分法、词库分词。 

字符串全部匹配 

2.1.1 单字分词 

+Y 

单字分词,是在对中文文本进行分词时,以字为 

结束 

单位进行切分。它没有词表维护成本,适合于一般 

应用,缺点是索引比较大、查询复杂、效率不高、准确 

图1 MM法的切分流程 

率也较低。 

2.1.2 二分法 

2)逆向最大匹配法(Reverse Maximum Matching 

所谓二分法,就是将每2个字当作1个词语进 

Method) 

行切分,然后建立索引 J。二分法没有词表维护成 

逆向最大匹配法通常简称为RMM法。RMM 

本,适合于一般应用,效率略高于单字切分,但查询 

法的基本原理与MM法相同,不同的是分词的扫描 

复杂、索引冗余大。 

方向,它从右至左取子串进行匹配。一般说来,逆向 

例如下面的文本:军械工程学院,当使用二分法 

匹配的切分精度略高于正向匹配,遇到的歧义现象 

进行切分时,切分出来的词条就是军械\械工\工程\ 

也较少。统计结果表明,单纯使用正向最大匹配的 

程学\学院。 

错误率为1/169,单纯使用逆向最大匹配的错误率 

第5期 蔡小艳等:汉语词法分析系统ICTCLAS在Nutch一0.9中的应用与实现 

为1/245,RMM法在切分的准确率上比MM法有很 

大提高 。 

2.2汉语词法分析系统ICTCLAS分析 

目前Lucene所采用的中文单字(应用StandAn— 

alyzer类)和双字分词(应用CJKAnalyzer类)模块, 

对中文信息分析和处理的效果远远达不到人们所期 

望的效果。如果要更好的分词,需要编写自己的 

Analyzer,把它们包装成Lucene的TokenStream,再利 

用已有的词典,根据正向最大匹配法或者逆向最大 

匹配法写分词,并且应用在Lucene中。 

目前国内第1个开放源码的中文分词系统是中 

国科学院计算技术研究所开发的基于多层隐马模型 

汉语词法分析系统ICTCLAS(Institute of Computing 

Technology,Chinese Lexical Analysis System),该系统 

主要功能包括中文分词、词性标注、命名实体识别、 

新词识别、同时支持用户词典。分词正确率高达 

97.58%,基于角色标注的未登录词识别能取得高于 

90%召回率,其中中国人名的识别召回率接近 

98%,分词和词性标注处理速度为543.5KB/s。 

ICTCLAS还提供完整的动态连接库ICT— 

CLAS.dll、COM组件和相应的概率词典,开发者可 

以完全忽略汉语词法分析,直接在自己的系统中调 

用ICTCLAS。基于以上特点,笔者将结合ICTCLAS 

分词来实现Nutch的中文分词。 

3 Nutch一0.9中加入ICTCLAS分词 

3.1 Nutch的分词器 

Nutch一0.9\SFC\iava\org\apache\nutch中的a— 

nalysis包是Nutch一0.9的分析器,由于Nutch是基 

于Lucene的,所以Nutch的分词是继承Lucene的。 

Nutch分词的最底层使用的是Lucene的Analyzer抽 

象类,它位于Analysis包中,是中文分词的基础。 

NutehAnalyzer继承Analyzer类,实现了Configu— 

rable、Pluggable接口,它是Nutch中扩展分析文本的 

扩展点,所有用于解析文本的插件都应实现这个扩展 

点,该抽象类中定义了公有的抽象方法tokenStream 

(String fieldName,Reader reader),返回类型Token- 

Stream。该方法用于分析文本,其后的具体类在这个 

方法中实现了从文本中提取索引词组的策略、算法。 

NutchDocumentAnalvzer继承NutchAnalyzer,使 

用JavaCC定义的语言(词典)分析器,不含有Stop— 

Words列表,保持了查询分析的连贯性 J。各个类 

与接口的UML见图2。 

NutchDocumentAnalyzer是Nutch系统默认的分 

图2各个类与接口的UML图 

词器,它调用了由JavaCC生成的NutchDocument- 

Tokenizer切分器,这个切分器用于对Nutch的文档 

文本进行分词。笔者通过修改NutchDoeument— 

Tokenizer.java,并结合中科院的ICTCLAS分词,实 

现了Nutch的中文分词。 

3.2 ICTCLAS分词加入到Nutch一0.9的关键步骤 

1)把ICTCLAS的dU文件放到\lib\native\ICT— 

CLAS.dll下。 

2)把ICTCLAS打包成ICTCLAS.jar放到nutch 

0.9\lib目录下,同时将ICTCLAS中的data类也 

放到这个目录,分词的时候要调用这个词库。 

3)修改NutchAnalysis.JJ文件 

将l<SIGRAM:<CJK>>改为I<SIGRAM: 

(<CJK>)+>重新用JavaCC编译NutchAnalys— 

is.JJ这个文件来产生新的解析器。 

4)修改NutchDocumentTokenizer.java中的代 

码,加入 

private static Reader myreader=null; 

public NutchDocumentTokenizerf Reader reader){ 

super(process(reader)); 

tokenManager = new NutchAnalysisTokenManager 

(myreader); 

} 

public static Reader process(Reader reader){ 

BufferedReader in=new BufferedReader ̄ reader); 

String line=…: 

String temp null; 

try{ 

while((temp=in.readLine())!=nul1){ 

line+=temp.replaceAll(”/”,””); 

军械工程学院学报 

System.out.println(1ine); 

} 

}catch(Exception e){ 

System.out.println(e); 

} 

try{ 

if(1ine!=null&&!line.equals(””)){ 

con.xjt.nip.word.ICTCLAS ic=eom.xjt.nlp. 

word.ICTCLAS.getInstance(); 

line=ic.paragraphProcess(1ine); 

myreader=new StringReader(1ine); 

return myreader; 

}。 

4结果的实现 

4.1 Nutch抓取网站页面的实现 

1)建立抓取目录 

在nutch一0.9的安装目录建立文本文件 

ur1.txt,写入要抓取的起始页,例如:http:// 

yjsy.oec.mtn/。 

2)配置crawl-urlifher.txt 

craw1.urliflter.txt文件记录需要抓取哪些类型 

的网页。打开nutch一0.9/conf/crawl—urlifher.txt, 

找到下面2行: 

#accept hosts in MY.DOMAIN.NAME 

+ ̄http://([a—z0—9] \.) MY.DOMAIN.NAME/ 

以上部分是正则表达式,表示搜索的范围。在 

这里测试改为+ http://([a—z 0-9]%\.) 

yjsy.oec.mtn/,表示抓取yjsy下所有的网页。 

3)修改nutch一0.9\conf\nutch—site.xml,设置 

http代理名称。 

<configuration> 

<property> 

<name>http.agent.name</name> 

<value>oee</value> 

</property> 

</conifguration> 

4)运行Crawl命令抓取网页 

在Cygwin控制台下输入cd/cygdrive/d/nutch. 

0.9,运行bin/nutch crawl ur1.txt-dir crawled.depth 3一 

threads 4>&craw1.1og。其中,一dir指定抓取内容所 

存放的目录;一depth表示抓取的网页深度;.threads 

指定并发的线程数;一craw1.1og日志文件的存储地 

址。 ・ 

程序运行结束后,在nutch一0.9目录下创建了 

名为crawled的文件夹,index是crawled中的子文件 

夹之一,用luke索引察看器就可以看到nutch一0.9 

实现中文分词后的索引。 

4.2用Luke查看索引结果 

Luke是查询Nutch索引文件的图形化工具,可 

以比较直观地看到索引创建情况,它需要结合Lu. 

cene包使用。图3、4是用Luke查看建立的索引。 

21 72 ̄content, 

管 

22 72 ̄content- 

究 

23 

72 Ctitle ̄ 

研 

24 72 ̄url= 

asp 

25 72 《C0nten 

26 72 c0ntent》 

27 

72-content- 

28 72 ̄content> 

29 

71  ̄content= 

30 71  ̄content= 

31 

71 《c0ntent》 

32 71 -conten> 

33 71<c0ntenP' 

34 71  ̄content= 

生理

35 

院言方

71

 ̄conten> 

天今是规址 

图3加入ICTCLAS分词前的索弓 

21 71  ̄content》 

时间 

22 

71  ̄content> 

入口 

23 71  ̄content> 

地址 

24 

71  ̄contont ̄ 

培养 

25 

71  ̄content= 

我 

26 

71 《C0ntenl》 

单位 

27 

71 《c0ntent》 

加入 

28 71  ̄content= 

领导 

29 71<conten> 

队伍 

30 

71  ̄content> 

首 

31 

71  ̄conten> 

导师 

32 

71  ̄content> 

简介 

33 71  ̄conten> 

规章制度 

34 71 《cOntent》 

为首 

35 

71 ≮COntenl》 

收藏 

图4加入ICTCLAS分词后的索引 

(下转第70页) 

70 军械工程学院学报 

2・2握把宽厚比Pd 

考虑到自然握持模型的横断面并非圆形,并且 

自动手枪的握把中要容纳弹夹,所以,应该给出一个 

合适的握把颈部宽厚比。试验结果表明,非圆截面 

握把的另一个好处是,可以通过握持感觉,给射手以 

指向性提示。 

击 

J 绢 日 

 、

由于笔者试验条件所限,试验的结果和据此得 

出的初步结论不一定准确,但却展示出了一种可能, 

即用关键特征量来对武器握把的人机工程学特性进 

行描述。例如:对于握把舒适性的描述。这对于提 

参考自然握持模型和3种认可度较高的手枪的 高武器握把设计水平以及设计自动化等方面具有一 

宽厚比,可以得出比较适宜的握把颈部宽厚比P 的 

取值在1.8~2.2之间。 

2.3握把前沿长度 

射击时产生的翻转力矩,主要靠虎口与中指、无 

名指和小手指产生的平衡力矩来平衡。当握把有效 

握持长度不足时,小手指处于悬空状态,将会影响握 

持的稳定性,并由此对射手的心理产生不良影响。 

因此,握把前沿最小长度应该大于等于中指、无名指 

定的意义。如果在此基础上把身高或手型与武器握 

把尺寸加以匹配,那么握把舒适性将会得到进一步 

提高。 

参考文献: 

[1]GB5703--85,人体测量方法[s]. 

[2]GB10000--88,中国成年人人体尺寸[s]- 

[ ]GB/T1298--1991,在产品设计中应用人体尺寸百分位 

租小篓踅妻 根据对手部尺寸实测的结果…………… …~ 

《中国成年人人体尺寸》中的有关数据 1进行修正, 

笔者给出的适宜的握把前沿长度L ≤55 Film。 

并孝照国家标准 莘 

王 

: …~~…一 

:3948.

机工程与造型 M . 

(责任编辑:陈北宁) 

从图3、4中可以看出,加入ICTCLAS分词前的索引 

以单字存放,加入ICTCLAS分词后的索引按照词来 

存放。 

参考文献: 

[1]胡涛,路红英.基于Nutch的搜索引擎的研究[J].计算 

机时代,2007(1):57.59. 

[2]曹羽中,曹勇刚,金茂忠,等.支持智能中文分词的互联 

网搜索引擎的构建[J].计算机工程设计,2006,27 

(23):43954398. 

5结束语 

笔者通过分析基于Lucene的开源搜索引擎 

Nutch的分词器,实现了在Nutch中添加基于多层隐 

[3]邱哲,符滔滔.开发自己的搜索引擎Lucene 2.0+Heft— 

trix[M].北京:人民邮电出版社,2007. 

马模型汉语词法分析系统ICTCLAS,使Nutch具有 

较好的中文处理能力,能切分出满足一定要求的词, 

基本满足用Nutch一0.9建立小型搜索的需要。不 

过,ICTCLAS分词还存在一些固有的缺陷,如它的分 

[4]潘亭沥.基于Lucene的面向商业应用的搜索引擎研究 

与实现[D].成都:电子科技大学,2007. 

[5]苏晓珂.基于Nutch的主题爬虫研究与实现[D].昆明: 

昆明理工大学,2007. 

词算法以及所用数据是不可分割的整体,可调整性 

较差。如果使用Nutch一0.9实现更加完善的中文 

信息的搜索查询,对中文分词就有更高的要求,需要 

对ICTCLAS分词的这些问题进一步深入研究后,再 

[6]屈培,葛秦.Nutch一0.8.1中二分法中文分词的实现 

[J].计算机时代,2007(7):9-11. 

(责任编辑:韩红艳) 

提出可行的方案进行完善。 


本文标签: 分词 抓取 实现 匹配 搜索引擎