龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > asp.net编程 >

Lucene中文分词实现方法:基于StopWord分割分词

时间:2009-12-21 11:47来源:未知 作者:admin 点击:
分享到:
pa title=车东对Lucene的介绍 href=http://www.chedong.com/tech/lucene.htmlspan style=color: #0066ff;Lucene/span/a应用越来越多,在对中文对索引过程中,中文分词问题也就越来越重要。/pp在已有的分词模式中
<p><a title="车东对Lucene的介绍" href="http://www.chedong.com/tech/lucene.html"><span style="color: #0066ff;">Lucene</span></a>应用越来越多,在对中文对索引过程中,中文分词问题也就越来越重要。</p> <p>在已有的分词模式中,目前比较常用的也是比较通用的有一元分词、二元分词和基于词库的分词三种。<a href="http://yysun.cnblogs.com/archive/2004/08/03/29903.html"><span style="color: #0066ff;">一元分词在Java版本上由yysun实现</span></a>,并且<a href="http://svn.apache.org/repos/asf/lucene/java/trunk/contrib/analyzers/src/java/org/apache/lucene/analysis/cn/"><span style="color: #0066ff;">已经收录到Apache</span></a>。其实现方式比较简单,即将每一个汉字作为一个Token,例如:&ldquo;这是中文字&rdquo;,在经过一元分词模式分词后的结果为五个Token:这、是、中、文、字。而二元分词,则将两个相连的汉字作为一个Token划分,例如:&ldquo;这是中文字&rdquo;,运用二元分词模式分词后,得到的结果为:这是、是中、中文、文字。</p> <p>一元分词和二元分词实现原理比较简单,基本支持所有东方语言。但二者的缺陷也比较明显。一元分词单纯的考虑了中文的文字而没有考虑到中文的词性,例如在上述的例子中,&ldquo;中文&rdquo;、&ldquo;文字&rdquo;这两个十分明显的中文词语就没有被识别出来。相反,二元分词则分出了太多的冗余的中文词,如上所述,&ldquo;这是&rdquo;、&ldquo;是中&rdquo;毫无意义的文字组合竟被划分为一个词语,而同样的缺陷,命中的词语也不十分准确,如上:在&ldquo;这是中文字&rdquo;中,&ldquo;中文字&rdquo;这个词语应该优先考虑的。而二元分词也未能实现。</p> <p>基于词库的分词实现难度比较大,其<a href="http://www.fullsearcher.com/n2004911134640735.asp"><span style="color: #0066ff;">模式也有多种</span></a>,如<a href="http://www.microsoft.com/china/rdcenter/info/result/chinese.asp"><span style="color: #0066ff;">微软在自己的软件中的汉语分词</span></a>、<a href="http://www.hylanda.com/production/SegmentStudy.htm"><span style="color: #0066ff;">海量的中文分词研究版</span></a>,还有目前在.Net下实现的<a href="http://www.lietu.com/doc/LuceneDotNetSeg.htm"><span style="color: #0066ff;">使用率较高的猎兔</span></a>,和<a href="http://www.siuying.net/articles/2005/03/16/382/"><span style="color: #0066ff;">一些其他人自发实现的分词工具</span></a>等等。其都有自己的分析体系,虽然分析精度高,但实现难度大,实现周期长,而且,对一般的中小型应用系统来讲,在精度的要求不是十分苛刻的环境下,这种模式对系统对消耗是一种奢侈行为。</p> <p>在综合考虑一元分词、二元分词及基于词库的分词模式后,我大胆提出一种基于StopWord分割的分词模式。这种分词模式的设计思想是,针对要分割的段落,先由标点分割成标准的短句。然后根据设定的StopWord,将短句由StopWord<strong>最大化分割</strong>,分割为一个个词语。如:输入短句为&ldquo;这是中文字&rdquo;,设定的StopWord列表为:&ldquo;这&rdquo;、&ldquo;是&rdquo;,则最终的结果为:&ldquo;中文字&rdquo;。</p> <p>这个例子相对比较简单,举个稍微长一点的例子:输入短句&ldquo;中文软件需要具有对中文文本的输入、显示、编辑、输出等基本功能&rdquo;,设定的StopWord列表为:&ldquo;这&rdquo;、&ldquo;是&rdquo;、&ldquo;的&rdquo;、&ldquo;对&rdquo;、&ldquo;等&rdquo;、&ldquo;需要&rdquo;、&ldquo;具有&rdquo;,则分割出对结果列表为:</p> <p>====================<br />&nbsp;中文软件<br />&nbsp;中文文本<br />&nbsp;输入<br />&nbsp;显示<br />&nbsp;编辑<br />&nbsp;输出<br />&nbsp;基本功能<br />====================</p> <p>基本实现了想要的结果,但其中也不乏不足之处,如上述的结果中&ldquo;中文软件&rdquo;与&ldquo;中文文本&rdquo;应该分割为三个独立词&ldquo;中文&rdquo;、&ldquo;软件&rdquo;和&ldquo;文本&rdquo;,而不是上述的结果。</p> <p>并且,对StopWord列表对设置,也是相对比较复杂的环节,没有一个确定的约束来设定StopWord。我的想法是,可以将一些无意义的主语,如&ldquo;我&rdquo;、&ldquo;你&rdquo;、&ldquo;他&rdquo;、&ldquo;我们&rdquo;、&ldquo;他们&rdquo;等,动词&ldquo;是&rdquo;、&ldquo;对&rdquo;、&ldquo;有&rdquo;等等其他各种词性诸如&ldquo;的&rdquo;、&ldquo;啊&rdquo;、&ldquo;一&rdquo;、&ldquo;不&rdquo;、&ldquo;在&rdquo;、&ldquo;人&rdquo;等等(System32目录下noise.chs文件里的内容可以作为参考)作为StopWord。</p> <p><strong><span style="color: #0000ff; font-size: medium;">编辑推荐DotLucene搜索引擎文章列表:</span></strong><br />全文搜索解决方案:DotLucene搜索引擎之创建索引<br /><a href="http://www.xueit.com/html/2009-02/21_606_00.html">http://www.xueit.com/html/2009-02/21_606_00.html</a><br />DotLucene搜索引擎之搜索索引Demo<br /><a href="http://www.xueit.com/html/2009-02/21_607_00.html">http://www.xueit.com/html/2009-02/21_607_00.html</a><br />全文搜索技术:dotLucene中文分词的highlight显示<br /><a href="http://www.xueit.com/html/2009-02/21_608_00.html">http://www.xueit.com/html/2009-02/21_608_00.html</a><br />Lucene.NET增加中文分词<br /><a href="http://www.xueit.com/html/2009-02/21_609_00.html">http://www.xueit.com/html/2009-02/21_609_00.html</a><br />全文搜索之Lucene增加中文分词功能方法<br /><a href="http://www.xueit.com/html/2009-02/21_610_00.html">http://www.xueit.com/html/2009-02/21_610_00.html</a><br />简介下基于.NET的全文索引引擎Lucene.NET<br /><a href="http://www.xueit.com/html/2009-02/21_611_00.html">http://www.xueit.com/html/2009-02/21_611_00.html</a><br />使用dotlucene为数据库建立全文索引<br /><a href="http://www.xueit.com/html/2009-02/21_612_00.html">http://www.xueit.com/html/2009-02/21_612_00.html</a><br />使用dotlucene多条件检索数据库<br /><a href="http://www.xueit.com/html/2009-02/21_613_00.html">http://www.xueit.com/html/2009-02/21_613_00.html</a><br />Lucene中文分词实现方法:基于StopWord分割分词<br /><a href="http://www.xueit.com/html/2009-02/21_614_00.html">http://www.xueit.com/html/2009-02/21_614_00.html</a><br />dotLucene实现增量索引源代码<br /><a href="http://www.xueit.com/html/2009-02/21_615_00.html">http://www.xueit.com/html/2009-02/21_615_00.html</a></p> <p><strong>ASP.NET全文搜索Lucene.net系列文章:</strong><br />创建索引的方法<br /><a href="http://www.xueit.com/html/2009-11-26/21-135108596156.html">http://www.xueit.com/html/2009-11-26/21-135108596156.html</a><br />认识Lucene.net入门例子<br /><a href="http://www.xueit.com/html/2009-11-26/21-460920681562.html">http://www.xueit.com/html/2009-11-26/21-460920681562.html</a><br />Lucene.net索引详解<br /><a href="http://www.xueit.com/html/2009-11-28/21-6716887990.html">http://www.xueit.com/html/2009-11-28/21-6716887990.html</a></p>
精彩图集

赞助商链接