Eclipse环境下使用JNI调用中科院ICTCLAS分词

下载中科院分词程序包ICTCLAS50 windows版

32位系统JNI调用包:http://download.csdn.net/detail/lzdwlhn/6002919

64位系统JNI调用包:http://download.csdn.net/detail/lzdwlhn/6002961

Eclipse中新建工程,并将分词程序需要的数据拷贝到工程根目录

将对应的JNI程序拷贝到工程中,对应的内容如下:

package ICTCLAS.I3S.AC;
public class ICTCLAS50{
	//public enum eCodeType
	//{
	//    CODE_TYPE_UNKNOWN,//type unknown 
	//    CODE_TYPE_ASCII,//ASCII
	//    CODE_TYPE_GB,//GB2312,GBK,GB10380
	//    CODE_TYPE_UTF8,//UTF-8
	//    CODE_TYPE_BIG5//BIG5
	//}
	
	public native boolean ICTCLAS_Init(byte[] sPath);
	public native boolean ICTCLAS_Exit();
	public native int ICTCLAS_ImportUserDictFile(byte[] sPath,int eCodeType);
	public native int ICTCLAS_SaveTheUsrDic();
	public native int ICTCLAS_SetPOSmap(int nPOSmap);
	public native boolean ICTCLAS_FileProcess(byte[] sSrcFilename, int eCodeType, int bPOSTagged,byte[] sDestFilename);
	public native byte[] ICTCLAS_ParagraphProcess(byte[] sSrc, int eCodeType, int bPOSTagged);
	public native byte[] nativeProcAPara(byte[] sSrc, int eCodeType, int bPOStagged);
	/* Use static intializer */
	static{
		System.loadLibrary("ICTCLAS50");
	}
}

编写调用程序:

import java.io.UnsupportedEncodingException;
import ICTCLAS.I3S.AC.ICTCLAS50;
/**
 * 分词
*/
public class Split{   
	
	static ICTCLAS50 testICTCLAS50 = new ICTCLAS50();
	static{
		String argu = ".";//当前目录
		//初始化
			try {
				if (testICTCLAS50.ICTCLAS_Init(argu.getBytes("GB2312")) == false){
					System.out.println("Init Fail!");
				}
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}
		//设置词性标注集(0 计算所二级标注集,1 计算所一级标注集,2 北大二级标注集,3 北大一级标注集)
		testICTCLAS50.ICTCLAS_SetPOSmap(2);
		System.out.println("初始化");
		//导入用户字典
		int nCount = 0;
		String usrdir = "userdict.txt"; //用户字典路径
		byte[] usrdirb = usrdir.getBytes();//将string转化为byte类型
		//导入用户字典,返回导入用户词语个数第一个参数为用户字典路径,第二个参数为用户字典的编码类型
		nCount = testICTCLAS50.ICTCLAS_ImportUserDictFile(usrdirb, 0);
	}
	/**
	 * 处理输入内容.    
	 * @param sInput
	 */
	public static String process(String sInput){
		StringBuffer s=new StringBuffer();
		try{
			byte nativeBytes[] = testICTCLAS50.ICTCLAS_ParagraphProcess(sInput.getBytes("GB2312"), 2, 1);//分词处理
			String nativeStr = new String(nativeBytes, 0, nativeBytes.length, "GB2312");
			String str[]=nativeStr.split(" ");
			for(int i=0;i<str.length;i++){
				if(str[i].indexOf("/")>0){
					//保留名词和动词且丢弃人名名词
		if((str[i].split("/")[1].indexOf("n")>=0||str[i].split("/")[1].indexOf("v")>=0)
					    &&!str[i].split("/")[1].equals("nx")
					   ){
						s.append(str[i].split("/")[0]+" ");
					}
				}
			}
		}
		catch (Exception ex){
			ex.printStackTrace();
		}
		return s.toString();
	}
	/**
	 * 测试.
	 */
	public static void main(String[] args) {
	     String sInput = "2013年6月20日,这个疯狂的一天,足以载入中国银行间市场史册。当日,银行间隔夜回购利率最高达到史无前例的30%。";
	     String result = process(sInput);
	     System.out.println(result);
	}
}


运行程序查看处理结果。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值