hadoop学习过程-2013.08.30.2--初次使用IKAnalyzer来切词--切词试验

来源:互联网 发布:如何注册一个好的域名 编辑:程序博客网 时间:2024/06/01 11:54

代码如下:

package 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;/** * 切词演示 * @author caogl * */public class IKAnalyzerTest {    public static void main(String[] args) throws Exception{    new IKAnalyzerTest().testIKAnalyzer();    }        public void testIKAnalyzer() throws Exception {                String keyWord = "2013年欧洲杯四强赛";//        String keyWord = "中方数月内三度警告美方勿干涉香港内政 ";                IKAnalyzer analyzer = new IKAnalyzer();                //使用智能分词        analyzer.setUseSmart(true);                //打印分词结果        printAnalysisResult(analyzer,keyWord);            }        /**     * 打印出给定分词器的切词结果     */    private void printAnalysisResult(Analyzer analyzer, String keyWord) throws Exception {//        System.out.println("当前使用的分词器:" + analyzer.getClass().getSimpleName());        TokenStream tokenStream = analyzer.tokenStream("content", new StringReader(keyWord));        tokenStream.addAttribute(CharTermAttribute.class);        CharTermAttribute charTermAttribute = null;                //以下循环中charTermAttribute.termBuffer是同一个对象        while (tokenStream.incrementToken()) {            charTermAttribute = tokenStream.getAttribute(CharTermAttribute.class);//            System.out.println(new String(charTermAttribute.buffer()));            System.out.println(new String(charTermAttribute.toString()));        }    }}


 

 

依赖的jar包:

IKAnalyzer2012_u6/IKAnalyzer2012_u6.jar

lucene-3.6.0/lucene-core-3.6.0.jar

 

程序输出结果分析:

 输出结果是: (#之间的为输出,不包括单引号)  #
2013年
欧洲杯3年
四强赛3年

#
每一行后面都有9个类似'口'的符号。输出结果解释如下:
第一次进循环时, charTermAttribute.termBuffer内容为
['2', '0', '1', '3', '年', '\u0000', '\u0000', '\u0000', '\u0000', '\u0000', '\u0000', '\u0000', '\u0000', '\u0000']
第二次进循环时, charTermAttribute.termBuffer内容为
['欧', '洲', '杯', '3', '年', '\u0000', '\u0000', '\u0000', '\u0000', '\u0000', '\u0000', '\u0000', '\u0000', '\u0000']
第三次进循环时, charTermAttribute.termBuffer内容为
['四', '强', '赛', '3', '年', '\u0000', '\u0000', '\u0000', '\u0000', '\u0000', '\u0000', '\u0000', '\u0000', '\u0000']
因此产生了上述输出。

当然了如果输出charTermAttribute.toString(),程序输出结果是:  #
2013年
欧洲杯
四强赛

#
得到的内容正常了,不再包括上次循环的内容。

 

原创粉丝点击