IK Analyzer分词工具(转载)

来源:互联网 发布:nba历届全明星mvp数据 编辑:程序博客网 时间:2024/05/22 09:17
IK Analyzer是基于lucene实现的分词开源框架。
需要在项目中引入:
IKAnalyzer.cfg.xml
IKAnalyzer2012.jar
lucene-core-3.6.0.jar
stopword.dic
具体用法参考以下代码:

package com.haha.test;

import java.io.IOException;
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 Test2 {
public static void main(String[] args) throws IOException {
String text="基于java语言开发的轻量级的中文分词工具包";
//创建分词对象
Analyzer anal=new IKAnalyzer(true);
StringReader reader=new StringReader(text);
//分词
TokenStream ts=anal.tokenStream("", reader);
CharTermAttribute term=ts.getAttribute(CharTermAttribute.class);
//遍历分词数据
while(ts.incrementToken()){
System.out.print(term.toString()+"|");
}
reader.close();
System.out.println();
}

}

运行后结果:
基于|java|语言|开发|的|轻量级|的|中文|分词|工具包|
使用(lucene)实现:

package com.haha.test;

import java.io.IOException;
import java.io.StringReader;

import org.wltea.analyzer.core.IKSegmenter;
import org.wltea.analyzer.core.Lexeme;

public class Test3 {

public static void main(String[] args) throws IOException {
String text="基于java语言开发的轻量级的中文分词工具包";
StringReader sr=new StringReader(text);
IKSegmenter ik=new IKSegmenter(sr, true);
Lexeme lex=null;
while((lex=ik.next())!=null){
System.out.print(lex.getLexemeText()+"|");
}
}

}



######################################################################################

IKAnalyzer分词单独使用例子
最近用了一下中文分词工具,网上说中科院研究的盘古分词比较好,找了一下没有java版本的,只有.net版本的,所以选用的IKAnalyzer分词工具.
IKAnalyzer官方说有以下特点(我没有做过测试,不知是真是假):
采用了特有的“正向迭代最细粒度切分算法“,具有60万字/秒的高速处理能力。
采用了多子处理器分析模式,支持:英文字母(IP地址、Email、URL)、数字(日期,常用中文数量词,罗马数字,科学计数法),中文词汇(姓名、地名处理)等分词处理。

言归正传开始看代码:
使用版本3.2.8 地址 http://code.google.com/p/ik-analyzer/downloads/list
目录结构:
/ext_stopword.dic (停词列表)
/IKAnalyzer.cfg.xml (配置文件)
/IKAnalyzer3.2.8.jar
/doc3.2.8
把/ext_stopword.dic /IKAnalyzer.cfg.xml两个文件放到classpath下,引入/IKAnalyzer3.2.8.jar

/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">/mydict.dic</entry> 

<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">/ext_stopword.dic</entry> 

</properties>
/mydict.dic内容:
不是坏人
不是好人
ext_stopword.dic内容:
使

package IKAnalyzerTest;

import java.io.IOException;
import java.io.StringReader;

import org.wltea.analyzer.IKSegmentation;
import org.wltea.analyzer.Lexeme;

/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args ) throws IOException{
String str = "从那时起,我就不是坏人了";
StringReader reader = new StringReader(str);
IKSegmentation ik = new IKSegmentation(reader,true);//当为true时,分词器进行最大词长切分
Lexeme lexeme = null;
while((lexeme = ik.next())!=null)
System.out.println(lexeme.getLexemeText());
}
}


去掉/mydict.dic和/ext_stopword.dic运行结果:
从那时起
就不是
坏人
只去掉/mydict.dic运行结果:
从那时起
就不是
坏人
全加上运行结果:
从那时起
就不是
不是坏人
0 0
原创粉丝点击