当前位置:文档之家› 基于Lucene的中文分词方法设计与实现

基于Lucene的中文分词方法设计与实现

收稿日期:2007207204

基金项目:四川省重点科技项目(05GG021200322)

作者简介:李颖(1981-),男,四川内江人,硕士研究生,主要研究领域为网络与信息系统.E 2mail :liying.working @https://www.doczj.com/doc/4915317197.html,

文章编号: 049026756(2008)0521095205

基于L ucene 的中文分词方法设计与实现

李 颖1,李志蜀1,邓 欢2

(1.四川大学计算机学院,成都610064; 2.泸州医学院生物工程系,泸州646000)

摘 要:本文设计实现了一个中文分词模块,其主要研究目的在于寻找更为有效的中文词汇

处理方法,提高全文检索系统的中文处理能力.整个模块基于当前最流行的搜索引擎架构Lucene ,实现了带有歧义消除功能的正向最大匹配算法.在系统评测方面,比较了该方法与现有方法的区别,对于如何构建一个高效的中文检索系统,提出了一种实现.关键词:中文分词;搜索引擎;Lucene ;正向最大匹配算法中图分类号:TP391.12 文献标识码:A

Design and implementation of Chinese words

segementation based on Lucene

L I Yi ng 1

,L I Zhi 2S hu 1

,D EN G Huan

2

(1.Department of Computer Science and Technology ,Sichuan University ,Chengdu 610064,China ;

2.Department of Biomedical Engineering ,Luzhou Medical College ,Luzhou 646000,China )

Abstract :This paper design and implement a Chinese words segmentation module ,which mainly for dealing with Chinese words to improve the ability of full text search system.The whole module based on the most popular architecture Lucene ,and implement the Maximum Matching Algorithm with the ability of eliminate different meanings.The authors also compare our method with methods in existence ,and bring forward a im 2plementation about how to construct a high efficiency Chinese searching system.

K ey w ords :Chinese word segmentation ,search engine ,Lucene ,forwards maximum match algorithm

1 引 言

信息世界的发展和扩容用一日千里来形容已经毫不为过了,每月增加的新的信息资讯可以以百万记.在这浩如烟海的信息海洋中,如何及时,准确地获取自己需要的资讯,是在当今社会掌握先机,把握机遇的必备条件.中国也在世界发展的过程中逐渐积累,将科技资源转化为科技资本,汉语,方块字也将自己汇入了这股信息的大潮中.但是由于中文的特殊情况,中文分词成了中文信息检索中横亘在信息工作者面前的一道屏障.和英文的单词不

同,中文的词汇构成方法多种多样,组成词汇的字数各不相同,句子中所有的字连起来才能描述一个意思,而英文是以词为单位的,词和词之间是靠空格隔开.因此对于中文字符串,需要经过特殊的中文分词处理才能进行有效的检索.目前比较常用和实用的主要有正向最大匹配法MM (Maximum Matching Algorithm ),反向最大匹配法RMM (Re 2verse Direction Maximum Matching Algorithm ),二

次扫描法等等.同时中文语句的切分还必须考虑歧义的情况.我们着重在于设计改进的正向最大匹配算法的中文分词方法,同时该方法具有较好的歧义

2008年10月 第45卷第5期 四川大学学报(自然科学版)

Journal of Sichuan University (Natural Science Edition ) Oct.2008Vol.45 No.5

消除功能.在平台方面,使用Apache Foundation 下的全文检索工具Lucene 作为检索平台,通过重新编写Lucene 的分词模块来实现更为高效准确的分词程序.

2 Lucene 全文检索引擎

2.1 Lucene 简介

Lucene 目前是著名的Apache Jakarta 家族中

的一个开源项目[1],它是一个基于Java 的全文检索工具包,你可以利用它来为你的应用程序加入索引和检索功能.2.2 Lucene 系统功能介绍

Lucene 的将所有源码分为了7个模块.图1展示了其中的主要部分以及运行流程

.

图1 Lucene 的结构示意图

Fig.1 Structure chart of Lucene

3 中文分词中的正向最大匹配分词

算法及歧义处理

3.1 中文分词技术简介

中文自动分词是任何中文自然语言处理系统都难以回避的第一道“工序”,其作用是怎么估计都

不会过分.只有逾越这个障碍,中文处理系统才称

得上初步打上了“智能”的印记,构建于词平面之上的各种后续语言分析手段才有展示身手的舞台.进一步的工作就是进行语句的语义分析,这也是中文自然语言处理的一个难点,其中有一部分的工作就是消除语义中的歧义,这是提高中文分词系统准确率必不可少的步骤.

中文自动分词方面,现在业内基本上是3种分词方案[2]:(1)基于字符串匹配的分词方法;(2)基于理解的分词方法;(3)基于统计的分词方法.这3种方案都有着各自的特点和优势.

Lucene 还没有比较成熟的中文分词模块,其自身的C J KAnalyser 所采用的是中文单字和双字分词模块,对中文语言处理难以达到应用需要的效果.因此,我们在Lucene 的架构上,选择了基于词表的中文正向最大匹配算法,以此来设计并实现了可以适用于日常应用的中文词表分词模块,其中设计的中文歧义消除模块能够有效的屏蔽大部分的机器歧义字符串,从中提取出正确的词汇.3.2 正向最大匹配分词算法通常,正向最大匹配算法需要一个词表.其基本思想[3]是这样的,假设自动分词词表(或词库)中的最长词条是i 个字,则取被处理材料当前字符串序列中的前i 个字作为匹配字段,查找词表,若词表中存在这样的一个i 字词,则匹配成功,匹配字段被作为一个词切分出来;如果在词表中找不到这样一个i 字词,则匹配失败,匹配字段去掉最后一个字,剩下的字段重新进行匹配,如此进行下去,直到匹配成功,也就是完成一轮匹配,切分出一个词为止.

但这样的最大分词实现算法存在以下的问题[4]:只能取到与最长词条相符合的词汇,而该词条中包含的子词条,比如“中华人民共和国”,如果按上面的方法匹配,我们最后只能得到中华人民共和国,中华,而人民,共和国这些词条会被漏掉.这

样分词建立的索引不够细致,在用户进行查询的时

候,需要另外的算法来寻找词条中包含的子词条,增加查询等待时间,降低用户体验效果.我们实现的最大分词方法,是采取渐增的方式来进行正向最大匹配,每次最长匹配7个字(该项可设置).同时每次只移动一个字符,能够尽可能地将所有包含的词汇拆分出来,同时在分词的同时,记录每个词汇的起止位置和长度,为下一步的词汇消歧做好准备.

6

901四川大学学报(自然科学版)第45卷

3.3 歧义字符串处理及难点

定义1 词间距wordDistance=W2的起始位置W21start Position-(W1的起始位置W1.start2 Position+W1的词长度length-1).

定义2 原义词就是根据正常的语义理解,同时结合上下文环境,从句子中提取出来的反映语句本身含义的词汇.

定义3 机械歧义词就是仅根据程序的切分算法,在未考虑上下文环境的情况下,从语句中切分出的机械歧义词汇,该词和语句本身含义没有任何关系.

在搜索词汇的时候,我们希望查询的结果尽量接近我们的期望值,否则返回一大堆与期望结果无关的垃圾信息,会大大降低查询准确率.一个典型的问题,如果分词不当,我们在搜索下列语句的时候,会得到这样的结果:“管理和服务必须.”用户输入的是“和服务必”,没有实现消歧机制的分词器,比如二分分词法,这时实现的分词结果是:管理,和服,服务,务必,必须…因此用户在查找“和服务必”这样的关键词汇的时候,这样的信息干扰语句也会出现在结果之中,如果有大量的这样的语句出现,肯定会严重干扰用户的查询工作.这时就需要一种适当的中文分词歧义消除方法(简称:中文消歧)来处理这样的情况,为用户提供尽可能准确的查询结果.

在中文消歧方面,这里主要是处理由于机械分词造成的歧义,我们将这种试验的方法取了一个类似于武功招式的名字,称为“三段式首词间距法”,一是便于理解,二来也形象的体现了中文分词过程其实也像武术一样,利用招式,将对手的功力,即待处理的中文字符串,一一化解.

三段式的实现思想是这样的:首先我们根据初步分词的结果:二分分词,智能分词,正向最大匹配分词都可以(只有逆向最大分词需要采取稍微改进的方法,主要是分词方向和逆向词表),按照初步处理后的结果将整个中文字符串中的词汇标识出来,按序号1,2,3…依次标记.然后,我们将头三段词汇取成一组,这三个词汇分别标记为W1,W2, W3.这时,我们利用最初分词时取得的数据,词间距wordDistance作为中文消歧的一个主要参数来处理我们分组的数据.

这个方法的原理是:机器分词造成的歧义都是由于切分点选取重复造成的,产生的机械歧义词往往是前后两个原义词的一部分的截取.比如“管理

和服务”这个字符串,机器切分的结果是:管理,和服,服务.显然,机械歧义词是“和服”,原义词是“管理,服务”,同时还有助词“和”,机械歧义词“和服”就是截取了助词“和”以及原义词“服务”的一部分构成.针对这样情况我们就通过词间距来判断中间的词是否为机械歧义词.因此,该方法的关键是:首词与三词的距离,小于二词的词长,不构成成词情况,如果大于或等于词长,该词还要进入下一个三段式,再进行比较,而不会被舍去.

我们还是用上面的例句来展示处理的过程:“管理和服务必须”.

首先,我们使用正向最大匹配分词法,初步分词的结果是:管理,和服,服务,务必,必须…分别标识为W1,W2,W3,W4,W5,….

然后我们取前面三段,管理,和服,服务,它们序号分别是W1,W2,W3.我们来看他们的词间距:(W1,W2)=0,(W2,W3)=1,1

再取W3,W4,W5作为第二组三段式分词, (W3,W4)=-1,(W3,W5)=0,0

可以看到,在这个过程结束后,我们分离出了:管理,服务,必须这三个词汇,“和服”以及“务必”这个两个干扰词汇被剔除出去.

因此,在三段式中,分为以下两种情况来处理,就可以达到消除大部分机械歧义的效果:

保留的情况是(W1,W2)=0,(W1,W3)≥W2.Length

舍弃的情况是(W1,W2)<0,(W1,W3)< W2.Length

3.4 词表描述及其数据结构

本文词表采用了网上公布的开源词表进行测试,包含19万以上的词条,尽可能的保证了测试结果的准确和覆盖率的全面.在加载词表的时候采用了sington单态模式,保证了在程序运行期间词表只被加载一次,减少系统资源损耗.在存储词表的数据结构HashMap,其时间复杂度为常数n.

整个系统的结构与源码组织如图2.

7901

第5期李颖等:基于Lucene的中文分词方法设计与实现 

图2 系统结构与源码组织结构图

Fig.2 System structure and source code organization

4 中文智能分词模块的设计与实现本文的描述中,在没有完成分词之前,我们读取的句子都还只能称为字符串,词汇也只能是暂称为字符序列.首先我们将所要分词的字符串先扫描一遍,依据字符渐增的方法将字符序列与词表中的各项进行比较,如果遇到匹配的,则返回token.同时为了优化最后分词的效果,我们将保留能够取到的所有符合词表的字符序列,也就是各个长度的词汇,并记录下这些词汇的起始位置,我们将这些初步的分词结果放在一个集合stringTmp中,为后期的语义消歧处理做好了准备.这样虽然会加重分词器的负担,但是这样建立的索引表更加优化,用户查询的时候只需在索引表的Map结构中寻找到匹配的词汇即可,不用进行二次分词.象分词,消歧,这样的步骤都是搜索引擎的前期工作,以系统的前期付出,可以换来了后期更好的用户体验.

下面我们具体的来描述一下这个算法,考虑到汉字词汇的大多数情况,为了使分词的结果更加准确.我们舍弃了7字以及7字以上的词汇,同时在过滤词汇集合STOPWORD[ ]中过滤了部分没有含义的助词.这一限制可以在程序中进行设定,选择符合你分词要求的设置.

1)我们c用变量word来保存切分过程中的临时字符序列.

2)开始扫描字符串C1C2…C i…C n,取出字符C i,初始的时候为C1,字符序列的起始位置每次移动1位,保存字符序列起始位置的wordStart [j]置为i.

3)判断,如果word的长度等于0,则将C i附加到word中,将i增1,返回到步骤2).

4)如果word的长度大于0,那么将C i和word连接到一起,并将连接后的字符序列与词表匹配.

5)如果匹配成功,则将C i附加到word中同时将i增1,将word.append(C i)赋值给Token,同时将word的起始位置wordStart[j],词长(i-j+ 1)保存起来,放入wordObj对象集合中,返回到步骤2).

6)如果匹配不成功,说明word中的字符序列是可匹配的最长的词,进行切分,将word赋值给Token返回,同时将word清空(即长度为0),返回到步骤2).

7)当取完字符串中的所有字符时,我们将所有已经切分好的词汇的集合wordObj[ ],进行歧义消除,因为我们在截取每段字符串的时候是根据标点符号来切分,所以产生的每个词汇集合不会太大,而且使用标点符号切分避免了因为换行而漏掉的词汇.

8)消歧之后,结束分词.

这只是对于算法的一个轮廓性的描述.具体实现的代码主要包含这样几个关键的函数.(1)void loadDict():将词表读入内存,以供下一步使用;

(2)Token next():Lucene的分词函数,返回to2 ken;(3)String[ ]stringSplit(read input):根据分割标识符对字符串进行初步切分,返回一个包含按标点切分后的字符串数组;(4)String[ ] wordConfirm(wordObj[ ]words):根据正向最大匹配算法返回的wordObj类型结果,进行歧义消除处理,wordObj对象包含的参数有,词汇的起始位置,词长.在函数中根据上文提出的算法对词汇集合进行歧义消除处理.

5 实验及测试数据比较

实验文章来自“https://www.doczj.com/doc/4915317197.html,”的网站,下面是一些切分的实例.所有分词均为自动分词结果.

原文是:

“新快报综合报道美国《新闻周刊》最新一期刊登专题,分析亚洲十大富豪面临的挑战.文章说,亚洲不少富豪已臻古稀之年,子女纷纷接班,大企业的话事人在未来数年势必来个大换血.子承父业的模式在亚洲极为普遍,不过目前全球经济一体化,加上兄弟争产分家之事时有发生,不少亚洲企业传至第二或第三代时,已是风光不再.”

8901四川大学学报(自然科学版)第45卷

分词的结果是:

“新 快报 综合 报道 美国 新闻 周刊 最新 一期 刊登 专题 分析 亚洲 十大 富豪 面临 的 挑战 文章 说 亚洲 不少 富豪 已 臻 古稀之年 子女 纷纷 接班 大 企业 话 事 人 未来 数年 势必 来个 大 换血 子承父业 模式 在 亚洲 极为 普遍 不过 目前 全球 经济 一体化 加上 兄弟 争产 分家 之事 时有 发生 不少 亚洲 企业 传 至 第二 或 第三代 时 已是 风光 不再”

在歧义消除方面我们来使用一个比较经典的例子进行测试.

原句是:“长春市长春节讲话.”这句话中从字面上看出现了两个“长春”,但是真正的含义却完全不同,只有第一个长春才是原义词,我们来看看歧义消除模块能否分辨.

分词后的结果是:“长春 市长 春节 讲话”

我们再看一个没有包含歧义消除功能的正向最大匹配算法分词结果:

“长春市 长春 节 讲话”从以上结果看到,包含歧义消除模块的分词算法效率达到了让人满意的效果.我们用上文描述的歧义消除算法来解释我们如何取得这样的结果.其中尽管“长春市”,“长春”都是包含在词表中的合理词汇,但是由于“长春市”是截取了“长春”和“市长”两个原义词,第二个“长春”是截取了“市长”和“春节”两个原义词,在“三段式首词间距法”中都得到了消除,完全达到了保留语句原义的效果.说明该歧义消除算法有着很好的实用价值.

根据我们规模测试多次实验的结果分析,同时参考业界已经公布的已有分词算法的数据,我们将最后测试实验的比较结果归纳成表1.

表1 实验数据和现有方法比较

Tab.1 Compare algorithmic data to existing methods 算法名称

正确率(%)

速度(字/min )

本文改进的包含歧义消除功能的正向最大分词算法

97.623117,630基于统计的分词算法[5]

96.25240,000规则和统计相结合的分词算法[5]97.61845,000

业界公认最好的海量科技的分词器

99.800不详

中科院计算机研究所ICTCLAS (结果经973专家组测试)

97.58

145,000

经我们改进的带有中文歧义消除功能的正向

最大匹配分词算法在分词速度上高于基于统计的分词算法以及规则和统计相结合的分词算法.准确率上也高于统计分词算法,规则和统计相结合的分词算法以及ICTCLAS 的分词算法.

6 结 语

通过在基于Lucene 的搜索引擎架构中实现自

己的基于词表的正向最大匹配的中文智能分词模块,使其具备了很好的中文语言处理能力.在正向最大匹配和语义歧义消除方面提出了自己的算法.在研究过程中,建立了一个全面的实验平台,并与其他的中文分词算法进行了比较,证明该分词模块具有较高的实用价值,同时这些分析结果有助于将来的进一步研究.今后我们将还作这样几个方面的工作:加入自动词表更新功能,改进词表的存储效率,提高歧义消除模块的排查能力.另外,在索引的

建立上,我们认为还可以改善其在相关度排序上的功能,使该平台的中文语言处理能力不断提高.参考文献:

[1] 王莉云,王华,陈刚,等.基于Lucene 的全文检索系

统的设计与实现[J ].计算机工程与设计,2007,28

(24):60.

[2] 郭伟,于中华.基于延迟决策和斜率的新词识别方

法[J ].四川大学学报:自然科学版,2007,44(3):

519.

[3] 彭波.搜索引擎的混合索引技术[J ].计算机工程与

应用,2004,40(22):18.

[4] 秦文,苑春法.基于策略树的汉语未登录词识别[J ].

中文信息学报,2004,18(1):13.

[5] 费洪晓,康松林,朱小娟,等.基于词频统计的中文

分词研究[J ].计算机工程与应用,2005,11(7):69.

[责任编辑:伍少梅]

9901第5期李颖等:基于Lucene 的中文分词方法设计与实现 

相关主题
文本预览
相关文档 最新文档