zoukankan      html  css  js  c++  java
  • Lucene学习——IKAnalyzer中文分词

    一、环境

    1、平台:MyEclipse8.5/JDK1.5

    2、开源框架:Lucene3.6.1/IKAnalyzer2012

    3、目的:测试IKAnalyzer的分词效果

    二、开发调试

    1、下载框架

    1)IKAnalyzer:http://code.google.com/p/ik-analyzer/downloads/list

    2)Lucene:http://www.apache.org/dist/lucene/java/3.6.1/

    2、添加依赖的库

    1)添加Lucene:lucene-core-3.6.1.jar

    2)添加IKAnalyzer:IKAnalyzer2012.jar

    3、配置IKAnalyzer

    1)添加配置文件IKAnalyzer.cfg.xml和StopWord词典库stopword.dic文件,把这两个文件放到src目录下,也就是classpath路径下

    4、编写测试程序,测试代码如下

    package org.cyxl.lucene.test;
    
    import java.io.StringReader;
    
    import org.apache.lucene.analysis.Analyzer;
    import org.apache.lucene.analysis.TokenStream;
    import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
    import org.wltea.analyzer.lucene.IKAnalyzer;
    
    public class IKAnalyzerTest {
        public static void main(String[] args) {
            String keyWord = "IKAnalyzer的分词效果到底怎么样呢,我们来看一下吧";
            //创建IKAnalyzer中文分词对象
            IKAnalyzer analyzer = new IKAnalyzer();
            // 使用智能分词
            analyzer.setUseSmart(true);
            // 打印分词结果
            try {
                printAnalysisResult(analyzer, keyWord);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 打印出给定分词器的分词结果
         * 
         * @param analyzer
         *            分词器
         * @param keyWord
         *            关键词
         * @throws Exception
         */
        private static void printAnalysisResult(Analyzer analyzer, String keyWord)
                throws Exception {
            System.out.println("["+keyWord+"]分词效果如下");
            TokenStream tokenStream = analyzer.tokenStream("content",
                    new StringReader(keyWord));
            tokenStream.addAttribute(CharTermAttribute.class);
            while (tokenStream.incrementToken()) {
                CharTermAttribute charTermAttribute = tokenStream
                        .getAttribute(CharTermAttribute.class);
                System.out.println(charTermAttribute.toString());
    
            }
        }
    }

    5、结果如下

    [IKAnalyzer的分词效果到底怎么样呢,我们来看一下吧]分词效果如下
    加载扩展停止词典:stopword.dic
    ikanalyzer
    的
    分词
    效果
    到底
    怎么样
    呢
    我们
    来看
    一下
    吧

    6、扩展自己的词典和StopWord

    1)在src目录下,新建自身的词典文件ext.dic,输入词如下(注意第一行留空,不知道为什么)

    分词效果

     2)在src目录下,新建自身的StopWord文件chinese_stopword.dic(也是第一行留空,疑惑中)

    吧  
    呢  
    来  
    的

    3)配置IKAnalyzer配置文件IKAnalyzer.cfg.xml,如下

    <?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">ext.dic;</entry>   
          
        <!--用户可以在这里配置自己的扩展停止词字典-->  
        <entry key="ext_stopwords">stopword.dic;chinese_stopword.dic</entry>   
          
    </properties>  

    4)配置好后测试结果如下

    [IKAnalyzer的分词效果到底怎么样呢,我们来看一下吧]分词效果如下  
    加载扩展词典:ext.dic  
    加载扩展停止词典:stopword.dic  
    加载扩展停止词典:chinese_stopword.dic  
    ikanalyzer  
    分词效果  
    到底  
    怎么样  
    我们  
    来看  
    一下  

    三、总结

    1、IKAnalyzer分词效果基本还是可以的,可以根据我们自身的项目业务扩展自己的词典和StopWord

    2、下面就结果中文分词和Lucene将上一篇的搜索引擎雏形加以修改,让它适合中文网站

  • 相关阅读:
    C. Chessboard( Educational Codeforces Round 41 (Rated for Div. 2))
    B. Lecture Sleep( Educational Codeforces Round 41 (Rated for Div. 2))
    51Nod 1256 乘法逆元(扩展欧几里得)
    C
    B
    9.13 web基础知识
    web基础知识
    9.11 web基础知识
    9.10 web基础知识
    web 基础知识
  • 原文地址:https://www.cnblogs.com/henuyuxiang/p/7600311.html
Copyright © 2011-2022 走看看