下载中科院分词程序包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);
}
}
运行程序查看处理结果。