Lucene3.0的SmartChineseTokenizer的使用

RT。代码如下。

package com.CKmeans.Tokenizer;
import java.io.IOException;
import java.io.StringReader;
import java.util.*;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.cn.smart.*;
import org.apache.lucene.analysis.tokenattributes.TermAttribute;
import org.apache.lucene.util.Version;
/*
 * 基于SmartChinseTokenizer的中文分词方法
 * (SmartChineseTokenizer是基于隐马尔科夫模型的中文分词方法,
 * 感谢Lucene社区的无私支持)
 * 科普一下:Nutch是Lucene的子项目,而Hadoop又是Nutch的子项目,Apache很好很强大
 */
public class ChineseTokenizer {

	public static ArrayList<String> tokenizer(String page)
	{
		ArrayList<String> words=new ArrayList<String>();
		//滤去所有的非中文字符
		page=page.replaceAll("[^\u4E00-\u9FA0]","");
		//读取page中的内容
		StringReader sr=new StringReader(page);
		//使用SmartChineseTokenizer,构造函数需要传入Lucene的版本号码
		SmartChineseAnalyzer analyzer=new SmartChineseAnalyzer(Version.LUCENE_30);
		//获得分词流
		TokenStream tokenStream=analyzer.tokenStream("", sr);
		//分词
		TermAttribute ta=tokenStream.getAttribute(TermAttribute.class);
		//用法真的变了很多,感觉Lucene2.9和Lucene3.0完全不同
		try{
			while(tokenStream.incrementToken())
			{
				//一个字的词去掉.因为像年、月、日,这种词基本没意义
				if(ta.term().length()>=2)
				{
				  words.add(ta.term());
				}
			}
		}
		catch(IOException ex)
		{
			ex.printStackTrace();
		}
		finally
		{
			if(tokenStream!=null)
			{
				try {
					tokenStream.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(analyzer!=null)
			{
				analyzer.close();
			}
		}
		return words;
	}
	//测试的main方法,用于进行分词
	public static void main(String[] args)
	{
		String str="绿波水无痕,源竭曷为青。";
		ArrayList<String> list=ChineseTokenizer.tokenizer(str);
		for(int i=0;i<list.size();i++)
		{
			System.out.println(list.get(i));
		}
	}
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值