您的位置:首页 > 其它

Lucene-IKAnalyzer(中文分词)基于配置的词典扩充

2015-10-14 13:51 381 查看


第一次写博客,写了半个小时,居然不见了,55555,还好后面发现有草稿箱,开森


阅读并感觉好的博客推荐:

    http://blog.csdn.net/yhqbsand/article/details/39251495
    http://www.itzhai.com/ikanalyzer-lucene-demo-performance-test.html#%E4%BD%BF%E7%94%A8IKSegmenter%E8%BF%9B%E8%A1%8C%E5%88%86%E8%AF%8D
    http://blog.csdn.net/lijun7788/article/details/7719166

介绍:

   国人林良益写的IK Analyzer应该是最好的Lucene中文分词器之一,IK
Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。到现在,IK发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。在2012版本中,IK实现了简单的分词歧义排除算法,标志着IK分词器从单纯的词典分词向模拟语义分词衍化。

特性:

(1) 采用了特有的“正向迭代最细粒度切分算法“,支持细粒度和智能分词两种切分模式;

(2)在系统环境:Core2 i7 3.4G双核,4G内存,window
7 64位, Sun JDK 1.6_29 64位 普通pc环境测试,IK2012具有160万字/秒(3000KB/S)的高速处理能力。

(3) 2012版本的智能分词模式支持简单的分词排歧义处理和数量词合并输出。

(4)采用了多子处理器分析模式,支持:英文字母、数字、中文词汇等分词处理,兼容韩文、日文字符

(5)优化的词典存储,更小的内存占用。支持用户词典扩展定义。特别的,在2012版本,词典支持中文,英文,数字混合词语。

使用到的jar包:

             IKAnalazer2012.jar  ,   lucene-analyzers-2.2.0.jar ,  lucence-core-3.6.0.jar

简单测试代码:

            Analyzer analyzer = new IKAnalyzer(true);        //true智能切分

//                Analyzer analyzer = new IKAnalyzer(false);        //false  细粒度切分

                StringReader reader = new StringReader(strText);

                TokenStream ts = analyzer.tokenStream("", reader);

                CharTermAttribute term = ts.getAttribute(CharTermAttribute.class);

                //遍历分词数据  

                while(ts.incrementToken()){

                    System.out.print(term.toString()+"|");

                }

                System.out.print(term);

                reader.close();

       

项目字典存放的位置如下图:

附加:在项目里面修改字典的话,有时候会出现Resource is uot of sync with the file system的问题或者修改木有效果,refresh项目就ok。

后缀名.dic的词典文件,必须如使用文档里所说的 无BOM的UTF-8编码保存的文件。如果不确定什么是  无BOM的UTF-8编码,最简单的方式就是用Notepad++编辑器打开,Encoding->选择 Encoding in UTF-8 without BOM,然后保存。

字典解析:

配置 IKAnalyzer.cfg.xml 文件来扩充您的专有词典以及停止词典

1.stopword.dic:IKAnalyzer2012发布包自带的里面存的是英文的停用词

比如:stopword.dic里面含有“a”: 原来语句:巫山烤鱼a中汇店ff   , 则分词后:巫山|烤鱼|中汇|店|ff|  ,  否则:巫山|烤鱼|a|中汇|店|ff|

2.chinese_stopword.dic:用来存放中文停用词。chinese_stopword.dic需要使用UTF-8编码。词典中,每个中文词汇独占一行。  (后期自己添加)

比如:chinese_stopword.dic里面含有“年”  原来语句:巫山烤鱼年中汇店   , 则分词后:巫山|烤鱼|中汇|店|  ,  否则:巫山|烤鱼|年|中汇|店|

    

3.ext.dic(扩展词典)可以配置多个词典文件,文件使用";"号分隔

比如:ext.dic里面含有“联想笔记本电脑”  原来语句:联想笔记本电脑搜索   , 则分词后:联想笔记本电脑|搜索|  ,  否则:联想|笔记本电脑|搜索|

4.product_word.dic:是购物经热门词汇,可以选择加入ext.dic

5:IKAnalyzer.cfg.xml:IK 分词器还支持通过配置 文件来扩充自己的专有词典以及停止词典(过滤词典)

KAnalyzer.cfg.xml 部署在代码根目录下( class 根目录)(对于web 项目,通常是WEB-INF/classes 目录)同hibernate、log4j等配置文件相同。

.词典文件的编辑与部署分词器的词典文件格式是无 BOM的 UTF-8编码的中文文本文件,文件扩展名不限。词典中,每个中文词汇独立占一行,使用\r\n的 DOS方式换行。

格式如下:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">  

<properties>  

    <comment>IK Analyzer 扩展配置</comment>

    <!--用户可以在这里配置自己的扩展字典 -->

    <!--

        <entry key="ext_dict">com/xxx/config/ext.dic;com/xxxx/config/product_word.dic</entry>

        <entry key="ext_dict">com/xxx/config/ext.dic</entry>

    -->

    <entry key="ext_dict">com/xxxx/config/ext.dic</entry>

    

    

    <!--用户可以在这里配置自己的扩展停止词字典-->

    <entry key="ext_stopwords">com/diandian/config/chinese_stopword.dic;com/diandian/config/stopword.dic</entry>

    

</properties>

配置多个词典文件。文件名使用“;”号分隔

boolean useSmart ,是否采用智能切分策略:

其中true表示智能分词(分词器采用智能切分),false表示细粒度分词(进行最细粒度切分):

 1. Analyzer analyzer = new IKAnalyzer(true); 

   //棉花|糖|交|党费|12345.|觉|gfh|               

  2.

    Analyzer analyzer = new IKAnalyzer(false); 

   //棉花|糖|交|党费|12345.|12345|觉|gfh|       
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息