IKAnalyzer分词器及lucene使用IKAnalyzer分析
更新时间:2023-10-18 17:00:01 阅读量: 综合文库 文档下载
IKAnalyzer版本 Jar包下载
IKAnalyzer3.2.8_bin 下载地址:
http://code.google.com/p/ik-analyzer/downloads/detail?name=IKAnalyzer3.2.8 bin.zip&can=2&q=
下载后包含说明及API文档(在目录doc3.2.8中)。
源码下载
http://code.google.com/p/ik-analyzer/downloads/detail?name=IKAnalyzer3.2.8 source.zip&can=2&q=
IKSegmentation浅析(纯IK分词)
IKSegmentation是IK中独立的分词器,和lucene没有关系。不继承,不扩展,不使用lucene相关的类。
IK主分词器构造函数
/**
* IK主分词器构造函数 * @param input
* @param isMaxWordLength 当为true时,分词器进行最大词长切分 */ public IKSegmentation(Reader input , boolean isMaxWordLength){ this.input = input ;
segmentBuff = new char[BUFF_SIZE];
context = new Context(segmentBuff , isMaxWordLength); segmenters = Configuration.loadSegmenter(); }
Reader input 是一个输入流,用于读取文件内容。 IKSegmentation的构造器,作了3个事
1、new Context(segmentBuff , isMaxWordLength) 创建上下文对象Context
context = new Context(segmentBuff , isMaxWordLength);
Contex主要是存储分词结果集和记录分词处理的游标位置。
2、Configuration.loadSegmenter() 加载词典、创建分词器
Configuration.loadSegmenter() 方法实现在加载词典,创建分词器详情如下。 /**
* 初始化子分词器实现
* (目前暂时不考虑配置扩展) * @return List
public static List
//初始化词典单例,如果查看getInstance()发现里面有详细的初始化词典的相关方法
Dictionary.getInstance();
List
segmenters.add(new QuantifierSegmenter()); //处理中文词的子分词器
segmenters.add(new CJKSegmenter()); //处理字母的子分词器
segmenters.add(new LetterSegmenter()); return segmenters; }
得到Lexeme
这是IK分词器的语义单元对象,相当于Lucene中的Token词元对象。由于3.0版本被设计为独立于Lucene的Java分词器实现,因此它需要Lexeme来代表分词的结果。
调用的next()方法,会返回Lexeme 对象,如果没有下一个分词结果,会返回null。 源码如下
/**
* 获取下一个语义单元
* @return 没有更多的词元,则返回null * @throws IOException */
public synchronized Lexeme next() throws IOException { if(context.getResultSize() == 0){ /*
* 从reader中读取数据,填充buffer
* 如果reader是分次读入buffer的,那么buffer要进行移位处理
* 移位处理上次读入的但未处理的数据 */
int available = fillBuffer(input);
if(available <= 0){
context.resetContext(); return null; }else{
//分词处理
int analyzedLength = 0;
for(int buffIndex = 0 ; buffIndex < available ; buffIndex++){
//移动缓冲区指针
context.setCursor(buffIndex);
//进行字符规格化(全角转半角,大写转小写处理) segmentBuff[buffIndex] =
CharacterHelper.regularize(segmentBuff[buffIndex]); //遍历子分词器
for(ISegmenter segmenter : segmenters){
segmenter.nextLexeme(segmentBuff , context); }
analyzedLength++; /*
* 满足一下条件时,
* 1.available == BUFF_SIZE 表示buffer满载 * 2.buffIndex < available - 1 && buffIndex > available - BUFF_EXHAUST_CRITICAL表示当前指针处于临界区内
* 3.!context.isBufferLocked()表示没有segmenter在占用buffer
* 要中断当前循环(buffer要进行移位,并再读取数据的操作)
*/
if(available == BUFF_SIZE
&& buffIndex < available - 1 && buffIndex > available - BUFF_EXHAUST_CRITICAL
&& !context.isBufferLocked()){
break; } }
for(ISegmenter segmenter : segmenters){ segmenter.reset(); }
//System.out.println(available + \: \+ buffIndex); //记录最近一次分析的字符长度
context.setLastAnalyzed(analyzedLength); //同时累计已分析的字符长度
context.setBuffOffset(context.getBuffOffset() + analyzedLength);
//如果使用最大切分,则过滤交叠的短词元 if(context.isMaxWordLength()){ context.excludeOverlap(); }
//读取词元池中的词元
return buildLexeme(context.firstLexeme()); } }else{
//读取词元池中的已有词元
return buildLexeme(context.firstLexeme()); }
Lexeme说明
??public int getBeginPosition()
说明:获取诧义单元的起始字符在文本中的位置 返回值:int , 诧义单元相对于文本的绝对起始位置 ??public int getEndPosition()
说明:获取诧义单元的结束字符的下一个位置
返回值:int , 诧义单元相对于文本的绝对终止位置的下一个字符位置 ??public int getLength()
说明:获取诧义单元包含字符串的长度
返回值:int , 诧义单元长度 = getEndPosition – getBeginPosition ??public String getLexemeText()
正在阅读:
IKAnalyzer分词器及lucene使用IKAnalyzer分析10-18
关于中国社会福利的调查研究报告 - 暑期社会实践论文01-03
新人教版九年级上册数学教学计划(精编)10-21
马集乡中心学校2012年中考备考方案03-08
计算机组成原理简答题缩印版08-06
汽车电器复习题11-13
第六章 第六节 典型零件机械加工工艺分析08-31
文职人员面试准备材料11-13
《社会主义从空想到科学的发展》读后感10-06
- 冀教版版五年级科学下册复习资料
- 微生物学复习提纲
- 2013—2014学年小学第二学期教研组工作总结
- 国有土地转让委托服务合同协议范本模板
- 我的固废说明书
- 企业管理诊断报告格式
- 东鼎雅苑施工组织设计
- 谈谈如何做好基层党支部书记工作
- 浮梁县环保局市级文明单位创建工作汇报
- 管理学基础知识
- 大学物理实验报告23 - PN结温度传感器特性1
- 计算机网络实践
- 酒桌上这四种情况下要坐牢,千万别不当回事……
- 国家康居示范工程建设技术要点
- 中国贴布行业市场调查研究报告(目录) - 图文
- 新课标下如何在高中物理教学中培养学生的创新能力初探
- 营养师冬季养生食谱每日一练(7月4日)
- 关注江西2017年第3期药品质量公告
- 建设海绵城市专题习题汇总
- 10万吨年环保净水剂建设项目报告书(2).pdf - 图文
- IKAnalyzer
- 分词
- 使用
- 分析
- lucene
- 数据结构试卷A
- 一通三防各工种岗位责任制 - 图文
- 江西省师大附中2014届高三开学摸底考试 数学文 Word版含答案
- 开展中华经典诵读活动实施方案及总结
- 2011年100份全国中考数学真题汇编:第33章直线与圆的位置关系
- 机电技术应用专业课程标准
- 海门市2017年中考数学二模试卷(含答案) 推荐
- 大肠杆菌表达重组蛋白的超声破碎及纯化
- 我国农产品电子商务模式发展研究(下)
- 关于加快拜城县煤炭产业发展的几点思考
- 张先生家庭的资产负债表和收支储蓄表
- 篮球比赛数字计分牌
- 星巴克详细配方表 - 图文
- 咨询工程师继续教育工程项目环境影响分析评价试卷答案
- 2012年中考化学试题汇编
- 西安电子科技大学《电路基础》第二章部分习题解
- 水电站机组运行人员岗位职责
- 浙大材料复试题目
- 维维集团战略调整分析
- 国际商事交易法案例