




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
IKAnalyzer3.2.8中文分词器介绍2012年3月2日1. IKAnalyzer简介IKAnalyzer是一个开源基于JAVA语言的轻量级的中文分词第三方工具包,从2006年推出已经经历了三个较为完整的版本,目前最新版本为3.2.8,它基于lucene为应用主体,但是,它也支持脱离lucene,成为一个独立的面向JAVA的分词工具。2. IKAnalyzer结构图3. IKAnalyzer特性a. 算法采用“正向迭代最细粒度切分算法”,支持细粒度和最大词长两种分词方式,速度最大支持80W字/秒(1600KB/秒)。b. 支持多子处理器分析模式:中文、数字、字母,并兼容日文、韩文。c. 较小的内存占用,优化词库占有空间,用户可自定义扩展词库。d. 扩展lucene的扩展实现,采用歧义分析算法优化查询关键字的搜索排列组合,提高lucene检索命中率。4. 关键类介绍org.wltea.analyzer.lucene.IKAnalyzerIK分词主类,基于Lucene的Analyzer接口实现。org.wltea.analyzer.lucene.IKQueryParser IK分词器提供的Query解析、构造工具类,其中parseMultiField函数(所有的重载函数)为关键函数。org.wltea.analyzer.IKSegmentation IK分词器的核心类,真正分词的实现类。5. IK分词算法理解根据作者官方说法IK分词器采用“正向迭代最细粒度切分算法”,分析它的源代码,可以看到分词工具类IKQueryParser起至关重要的作用,它对搜索关键词采用从最大词到最小词层层迭代检索方式切分,比如搜索词:“中华人民共和国成立了”,首先到词库中检索该搜索词中最大分割词,即分割为:“中华人民共和国”和“成立了”,然后对“中华人民共和国”切分为“中华人民”和“人民共和国”,以此类推。最后,“中华人民共和国成立了”切分为:“中华人民 | 中华 | 华人 | 人民 | 人民共和国 | 共和国 | 共和 | 成立 | 立了”,当然,该切分方式为默认的细粒度切分,若按最大词长切分,结果为:“中华人民共和国 | 成立 | 立了”。核心算法代码如下:boolean accept(Lexeme _lexeme)/* * 检查新的lexeme 对当前的branch 的可接受类型 * acceptType : REFUSED 不能接受 * acceptType : ACCEPTED 接受 * acceptType : TONEXT 由相邻分支接受 */int acceptType = checkAccept(_lexeme);switch(acceptType)case REFUSED:/ REFUSE 情况return false;case ACCEPTED : if(acceptedBranchs = null)/当前branch没有子branch,则添加到当前branch下acceptedBranchs = new ArrayList(2);acceptedBranchs.add(new TokenBranch(_lexeme);elseboolean acceptedByChild = false;/当前branch拥有子branch,则优先由子branch接纳for(TokenBranch childBranch : acceptedBranchs)acceptedByChild = childBranch.accept(_lexeme) | acceptedByChild;/如果所有的子branch不能接纳,则由当前branch接纳if(!acceptedByChild)acceptedBranchs.add(new TokenBranch(_lexeme);/设置branch的最大右边界if(_lexeme.getEndPosition() this.rightBorder)this.rightBorder = _lexeme.getEndPosition();break;case TONEXT : /把lexeme放入当前branch的相邻分支if(this.nextBranch = null)/如果还没有相邻分支,则建立一个不交叠的分支this.nextBranch = new TokenBranch(null);this.nextBranch.accept(_lexeme);break;return true;从代码中可以了解到,作者采用了递归算法(代码中加粗的部分)切分搜索词。若词存在子词则递归该函数,继续切分。6. 词库的扩展IK本身带有27W的词库,对于词库的扩展目前支持两种方式,分别是配置文件和API扩展,同时提供了对用户自定义停止词的扩展支持。针对数据库存储字库,采用这种方式比较好。基于API词库扩展:类名:org.wltea.analyzer.dic.Dictionary 函数:public static void loadExtendWords(List extWords) 加载用户扩展的词汇列表到IK的主词典中。 函数:public static void loadExtendStopWords(List extStopWords) 加载用户扩展的停止词列表。基于配置的词库扩展:IKAnalyzer.cfg.xml文件可以扩展专有词库及停止词库。配置如下: IK Analyzer 扩展配置 /mydict.dic; /com/mycompany/dic/mydict2.dic; /ext_stopword.dic 7. 与solr的结合可以说IK与solr的结合非常简单,只要把 solr中的schema.xml添加如下代码即可: 或者是: 其中org.wltea.analyzer.solr.IKTokenizerFactory 继承了solr1.4的BaseTokenizerFactory类,而org.wltea.analyzer.lucene.IKAnalyzer继承了lucene的Analyzer类。8. 在solr1.4中使用IKQueryParser由于 Solr 默认的 Query Parser 生成的 Query 一般是 “短语查询”,导致只有很精确的结果才被搜索出来。比如默认情况下,库里有”北京爱皮科技有限公司”,用户搜索词为”爱皮公司”,solr是不会把结果显示出来的。所以,必须分别扩展:QParserPlugin、QParser,代码如下:IKQParserPlugin:import mon.params.SolrParams;import mon.util.NamedList;import org.apache.solr.request.SolrQueryRequest;import org.apache.solr.search.QParser;import org.apache.solr.search.QParserPlugin;public class IKQParserPlugin extends QParserPlugin public void init(NamedList args) public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) return new IKQParser(qstr, localParams, params, req); IKQParser:import org.apache.lucene.queryParser.ParseException;import org.apache.lucene.search.Query;import mon.params.CommonParams;import mon.params.SolrParams;import org.apache.solr.request.SolrQueryRequest;import org.apache.solr.search.QParser;import org.wltea.analyzer.lucene.IKQueryParser;class IKQParser extends QParser String defaultField; public IKQParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) super(qstr, localParams, params, req); public Query parse() throws ParseException String qstr = getString(); defaultField = getParam(CommonParams.DF); if (defaultField=null) defaultField = getReq().getSchema().getDefaultSearchFieldName(); Query query = null; query = IKQueryParser.parse(defaultField, qstr); return query; public String getDefaultHighlightFields() return defaultField = null ? null : new StringdefaultField; 将代码打包放到,solr-home的lib下面,配置solrconfig.xml里面:然后在下面增加ik即可。9. 和其他中文分词器的比较目前流行的几大开源分词器主要有:paoding、mmseg4j、IKAnalyzer,它们三个都是基于JAVA语言开发的,总体上来说没有谁最好,各有优劣。Paoding开发者及活跃度:SVN最后更新时间2010年4月29日,基本停止维护更新。速度:在PIII 1G内存个人机器上,1秒 可准确分词 100万 汉字算法和代码复杂度:采用基于 不限制个数 的词典文件对文章进行有效切分,使能够将对词汇分类定义,7000行左右JAVA代码。技术实现上和IK类似。文档:无。用户自定义词库:支持不限制个数的用户自定义词库,自动检测词库的更新。自带词库22W个。Lucene和solr的支持:支持Lucene3.0,和solr的集成需自己写代码扩展。mmseg4j开发者及活跃度:SVN最后更新时间2011年6月29日。速度:两种分词方法,Simple和Complex,目前 complex 1200kb/s左右,simple 1900kb/s左右,但内存开销了50M左右。算法和代码复杂度:MMSeg算法,2500行左右代码。 文档:MMSeg算法有英文文档,原理比较简单。用户自定义词库:自带搜狗的词库,支持自定义词库,不支持自动检测。 自带词库16W个。Lucene和solr的支持:支持Lucene2.4、solr1.3IKAnalyzer开发者及活跃度:SVN最后更新时间2011年4月15日。速度:每秒80W字。算法和代码复杂度:正向迭代最细粒度切分算法,4500行左右代码。 文档:有一个中文使用手册。 用户自定义词库:支持自定义词库,不支持自动检测。 自带词库27W个。Lucene和solr的支持:支持Lucene3.0、solr1.4综上所述,IKAnalyzer具有一定的优势。10. IK分词弱点、缺点总体来说,IK是一个很不错的中文分词工具,但它自身也存在一些缺点,比如
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年美术教师编制考试模拟试卷:美术教学案例研究与评价试题
- 2025-2030中国黑龙江省养老机构行业发展状况与前景方向分析研究报告
- 2025-2030中国鱼罐头行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国高粱酒市场需求动向与投资商机盈利性研究报告
- 2025年辅导员职位考试:学生思想政治教育方法与大学生心理健康教育策略试题
- 2025-2030中国食用植物油行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国颜色选择机行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国面部保湿霜行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国隔音窗行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国防静电吸尘器行业市场发展趋势与前景展望战略研究报告
- 《水土保持监测技术规范SLT 277-2024》知识培训
- 2025年江苏南京事业单位招聘(787人)高频重点模拟试卷提升(共500题附带答案详解)
- 档案管理制度培训宣贯
- GB/T 33136-2024信息技术服务数据中心服务能力成熟度模型
- 《保护地球爱护家园》课件
- 雾化吸入疗法合理用药专家共识(2024版)解读
- 2024年度产学研合作与科研奖励协议3篇
- 电力工程线路交叉跨越施工主要工序及特殊工序施工方法
- 【MOOC】软件度量及应用-中南大学 中国大学慕课MOOC答案
- 24秋国家开放大学《儿童发展问题的咨询与辅导》周测验参考答案
- 2025届江苏省苏州市重点中学高三第二次模拟考试英语试卷含解析
评论
0/150
提交评论