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
祝福老板事业的祝福语05-04
版高考化学总复习专题七化学反应的方向和限度教学案苏教版[精品07-01
曲线连续梁计算书12-16
细胞生物学复习题10-21
枕上诗书闲处好,门前风景雨来佳《摊破浣溪沙》意思-赏析09-11
我是手机迷作文600字06-30
2002年4月至2011年7月历次自考离散数学试题汇总(打印版) - 图文12-23
沥青混合料购销合同09-10
- 高一物理牛顿运动定律全套学习学案
- 水处理一级反渗透加还原剂亚硫酸氢钠后为什么ORP会升高
- 毕业设计(论文)-正文董家口 - 图文
- 荣盛酒店经营管理公司录用通知及入职承诺书II
- 第二讲 大学英语四级快速阅读技巧
- 质量管理体系文件(2015年委托第三方医药物流配送企业专用版本)
- 214071收款办法
- 苏轼对《文选》选文的评价
- 《诊断学基础B》1-8作业
- 广东省东莞市高一数学下学期期末教学质量检查试题
- 海南电网公司VIS推广应用管理办法
- 红星照耀中国习题
- 苏教版小学语文六年级上册期末复习资料之生字词整理
- 局域网组建与应用—王向东
- 税务稽查内部管理文书样式
- 环保社会实践调查表
- 九年级思品第一单元复习
- 2016年全国注册咨询工程师继续教育公路路线设计规范试卷
- 毕业设计-青岛港董家口港区防波堤设计
- 撞背锻炼方法与益处
- IKAnalyzer
- 分词
- 使用
- 分析
- lucene
- 数据结构试卷A
- 一通三防各工种岗位责任制 - 图文
- 江西省师大附中2014届高三开学摸底考试 数学文 Word版含答案
- 开展中华经典诵读活动实施方案及总结
- 2011年100份全国中考数学真题汇编:第33章直线与圆的位置关系
- 机电技术应用专业课程标准
- 海门市2017年中考数学二模试卷(含答案) 推荐
- 大肠杆菌表达重组蛋白的超声破碎及纯化
- 我国农产品电子商务模式发展研究(下)
- 关于加快拜城县煤炭产业发展的几点思考
- 张先生家庭的资产负债表和收支储蓄表
- 篮球比赛数字计分牌
- 星巴克详细配方表 - 图文
- 咨询工程师继续教育工程项目环境影响分析评价试卷答案
- 2012年中考化学试题汇编
- 西安电子科技大学《电路基础》第二章部分习题解
- 水电站机组运行人员岗位职责
- 浙大材料复试题目
- 维维集团战略调整分析
- 国际商事交易法案例