欢迎来到天天文库
浏览记录
ID:37919152
大小:244.00 KB
页数:12页
时间:2019-06-02
《IKAnalyzer分词器与lucene使用IKAnalyzer分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、IKAnalyzer版本Jar包下载IKAnalyzer3.2.8_bin下载地址:http://code.google.com/p/ik-analyzer/downloads/detail?name=IKAnalyzer3.2.8%20bin.zip&can=2&q=下载后包含说明及API文档(在目录doc3.2.8中)。源码下载http://code.google.com/p/ik-analyzer/downloads/detail?name=IKAnalyzer3.2.8%20source.zip&can=2&q=IKSegmentation浅析(纯IK分词)IKS
2、egmentation是IK中独立的分词器,与lucene没有关系。不继承,不扩展,不使用lucene相关的类。IK主分词器构造函数/***IK主分词器构造函数*@paraminput*@paramisMaxWordLength当为true时,分词器进行最大词长切分*/publicIKSegmentation(Readerinput,booleanisMaxWordLength){this.input=input;segmentBuff=newchar[BUFF_SIZE];context=newContext(segmentBuff,isMaxWordLength);s
3、egmenters=Configuration.loadSegmenter();}Readerinput是一个输入流,用于读取文件内容。IKSegmentation的构造器,作了3个事1、newContext(segmentBuff,isMaxWordLength)创建上下文对象Contextcontext=newContext(segmentBuff,isMaxWordLength);Contex主要是存储分词结果集与记录分词处理的游标位置。2、Configuration.loadSegmenter()加载词典、创建分词器Configuration.loadSegmen
4、ter()方法实现在加载词典,创建分词器详情如下。/***初始化子分词器实现*(目前暂时不考虑配置扩展)*@returnList*/publicstaticListloadSegmenter(){//初始化词典单例,如果查看getInstance()发现里面有详细的初始化词典的相关方法Dictionary.getInstance();Listsegmenters=newArrayList(4);//处理数量词的子分词器segmenters.add(newQuantifierSe
5、gmenter());//处理中文词的子分词器segmenters.add(newCJKSegmenter());//处理字母的子分词器segmenters.add(newLetterSegmenter());returnsegmenters;}得到Lexeme这是IK分词器的语义单元对象,相当于Lucene中的Token词元对象。由于3.0版本被设计为独立于Lucene的Java分词器实现,因此它需要Lexeme来代表分词的结果。调用的next()方法,会返回Lexeme对象,如果没有下一个分词结果,会返回null。源码如下/***获取下一个语义单元*@return没有
6、更多的词元,则返回null*@throwsIOException*/publicsynchronizedLexemenext()throwsIOException{if(context.getResultSize()==0){/**从reader中读取数据,填充buffer*如果reader是分次读入buffer的,那么buffer要进行移位处理*移位处理上次读入的但未处理的数据*/intavailable=fillBuffer(input);if(available<=0){context.resetContext();returnnull;}else{//分词处理in
7、tanalyzedLength=0;for(intbuffIndex=0;buffIndex
此文档下载收益归作者所有