360SDN.COM

首页/Java/列表

测试庖丁解牛分词工具(附java源代码)

来源:  2017-09-29 13:44:15    评论:0点击:

因为笔者要在MapReduce中进行中文分词解析数据,所以测试了一下庖丁解牛中文分词器(paoding-analysis-2.0.4-beta)。现将使用过程小结:

下载地址:http://pan.baidu.com/s/1eQ88SZS

个人环境:linux+eclipse

使用分为如下几步:

1. 配置dic文件:

修改paoding-analysis.jar中的paoding-dic-home.properties文件,将“#paoding.dic.home=dic”的注释去掉,并配置成自己dic文件的本地存放路径。eg:/home/hadoop/work/paoding-analysis-2.0.4-beta/dic

2. 把Jar包导入到项目中:

将paoding-analysis.jar、commons-logging.jar、lucene-analyzers-2.2.0.jar和lucene-core-2.2.0.jar四个包导入到项目中,这时就可以在代码片段中使用庖丁解牛工具提供的中文分词技术,例如:

package com.navinfo.fenci.logic;

import java.io.StringReader;
import java.util.HashMap;
import java.util.Map;
import org.apache.lucene.analysis.Analyzer; 
import org.apache.lucene.analysis.Token;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.OffsetAttribute;
import org.apache.lucene.analysis.tokenattributes.TermAttribute;

import net.paoding.analysis.analyzer.PaodingAnalyzer;

public class PaodingLogic {
	private static final PaodingAnalyzer ANALYZER = new PaodingAnalyzer();
    //@param text
    // @return
    
	public Map<String, String> parse(String text) {
		Map<String, String> map = new HashMap<String, String>();
		map.put("MOST_WORDS_MODE", parse(text, PaodingAnalyzer.MOST_WORDS_MODE));
		map.put("MAX_WORD_LENGTH_MODE",
				parse(text, PaodingAnalyzer.MAX_WORD_LENGTH_MODE));
		return map;
	}
 
	private   String parse(String text, int mode){ 
		//取得Token流  
		TokenStream stream = ANALYZER.tokenStream("", new StringReader(text)); 
		String result="";
        try{

    		//重置到流的开始位置 
    		stream.reset(); 

    		//添加工具类 
    		TermAttribute termAtt = (TermAttribute) stream.addAttribute(TermAttribute.class); 
    		OffsetAttribute offAtt = (OffsetAttribute) stream.addAttribute(OffsetAttribute.class); 

    		//循环打印所有分词及其位置 
    		while (stream.incrementToken()) {
    			String temp=termAtt.term() + " " + offAtt.startOffset() + " " + offAtt.endOffset();

    	         System.out.println(temp);
    		     result+=termAtt.term()+","; 
    		}
        } catch (Exception ex) {
			throw new RuntimeException(ex);
		} System.out.println(result);
		return result;
	}
	
	public static void main(String[] args){
		PaodingLogic logic=new PaodingLogic();
		String text = "庖丁系统是个完全基于lucene的中文分词系统,它就是重新建了一个analyzer,叫做PaodingAnalyzer,这个analyer的核心任务就是生成一个可以切词TokenStream。";
		logic.parse(text);
	 
		
	}
}

结果如下:

 

 庖丁 0 2

系统 2 4
是个 4 6
完全 6 8
基于 8 10
lucene 10 16
中文 17 19
分词 19 21
系统 21 23
它就 24 26
就是 25 27
重新 27 29
新建 28 30
建了 29 31
一个 31 33
analyzer 33 41
叫做 42 44
paodinganalyzer 44 59
这个 60 62
analyer 62 69
核心 70 72
任务 72 74
就是 74 76
生成 76 78
一个 78 80
切词 82 84
tokenstream 84 95

每一行的输出是一个token。


为您推荐

友情链接 |九搜汽车网 |手机ok生活信息网|ok生活信息网|ok微生活
 Powered by www.360SDN.COM   京ICP备11022651号-4 © 2012-2016 版权