展会信息港展会大全

基于逆向最大化词表中文分词法。
来源:互联网   发布日期:2011-09-16 11:34:41   浏览:16147次  

导读:以前做知识管理系统的时候,由于需要建立全文检索和统计词频,需要对中文文本进行分词。对于中文分词, 国内做到好的应该是中科院自然研究所,但是相对比较复杂,我...


以前做知识管理系统的时候,由于需要建立全文检索和统计词频,需要对中文文本进行分词。对于中文分词,

软件开发网 www.mscto.com

国内做到好的应该是中科院自然研究所,但是相对比较复杂,我看了几次没有看明白.:) ,由于平常我们的知识系统

对分词的要求没有这么高,所以就选择了最大化的词表分词法. 词表选择的是人民日报97版的词表. 软件开发网 www.mscto.com

实际效果可以达到90%以上,基本可以满足需要。支持Lucene.net分词,词表是启动时一次性载入;

具体代码如下: www.mscto.com

publicsealedclassLtWordTokenizer:Tokenizer { privateStringbufferText; privateArrayListwordArray; privateint intIndex=0; publicstaticHashtablehsDic=newHashtable();

publicLtWordTokenizer(TextReader_in) { input=_in; bufferText=input.ReadToEnd().ToLower(); wordArray=newArrayList(); wordSegment(bufferText); }

publicvoidwordSegment(StringSentence) { intsenLen=Sentence.Length; inti=0,j=0; intM=12; stringword; while(i<senLen) { intN=i M<senLen?i M:senLen 1; boolbFind=false; for(j=N-1;j>i;j--) { word=Sentence.Substring(i,j-i).Trim(); if(hsDic.ContainsKey(word.Trim())) { wordArray.Add(newToken(word,i,i word.Length)); bFind=true; i=j; break; } } if(!bFind) { word=Sentence.Substring(i,1).Trim(); i=j 1; if(word.Trim()!="") { wordArray.Add(newToken(word,i,i word.Length)); } } } }

软件开发网 www.mscto.com

publicoverrideTokenNext() { if(intIndex<wordArray.Count) { intIndex ; return(Token)(wordArray[intIndex-1]); } else returnnull; } }}

下次可以在分词的时候更改一下,不必先分好保存到arraylist,动态速度更好。

软件开发网 www.mscto.com


赞助本站

相关热词: 中文 最大化 基于 word if 可以

相关内容
AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港