ansj分词器 java分词器 的hive UDF实现

前段时间做了一个小项目用到了ANSJ分词器 来说说怎么使用吧

先说这是一个Maven项目,需要对pom.xml文件修改增加依赖

依赖如下 写在dependencies内不用说了吧

		
		
			org.ansj
			ansj_seg
			5.1.1
		
		

符实际代码吧 这是一个Hive UDF的实现,带main方法测试

先说明这只是Ansj分词器的一种用法,其他用法还需要探索

package cn.tl.g1.UDF;

import java.util.List;

import org.ansj.domain.Result;
import org.ansj.domain.Term;
import org.ansj.splitWord.analysis.NlpAnalysis;
import org.apache.hadoop.hive.ql.exec.UDF;

public class CwsUDF extends UDF {
	public String evaluate(String input) {
		// 如果输入为空,则直接返回空即可
		if (input == null || input.trim().length() == 0) {
			return null;
		}
		// 采用nlp分词,具备(用户自定义词典/数字识别/人名识别/机构名识别/新词发现)功能
		Result result = NlpAnalysis.parse(input);
		// 如果处理结果为null,则直接返回一个null即可
		if (result == null || result.getTerms() == null) {
			return null;
		}
		// 将分词结果集合返回给变量itemList
		List termList = result.getTerms();
		// 存储每次分词完成后的词序列集合,词之间以'\001'分隔
		StringBuilder stringBuilder = new StringBuilder();
		// 循环记数器,当counter>0的时候,每次添加元素前先添加分隔符
        // 因为分隔符总是比元素少一个 
		int counter = 0;
		// 遍历集合,加入结果集中
		for (Term term : termList) {
			if (counter > 0) {
				stringBuilder.append('\001');
			}
			// 只要分词的名字结果,不要词性部分
			stringBuilder.append(term.getName());
			counter++;
		}
		return stringBuilder.toString();
	}

	public static void main(String[] args) {
		System.out.println(new CwsUDF().evaluate("我超级爱吃大白萝卜你信吗?"));
	}
}

运行结果如下

我超级爱吃大白萝卜你信吗?

你可能感兴趣的:(java,ANSJ,java,ANSJ)