初用中文分词,介绍ICTCLAS的用法:
1.软件准备:
http://www.ictclas.org/ictclas_download.aspx,此处使用win7 64bit
2.解压
子目录API中文件如下:
为避免eclipse添加原目录代码问题,直接将所有文件拷入自己的工程目录的src文件夹中。刷新eclipse即可。
动态链接问题,将dll文件拷至system32文件夹
3.测试代码
import java.io.UnsupportedEncodingException;
import ICTCLAS.I3S.AC.ICTCLAS50;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
try {
ICTCLAS50 testIctclas50 = new ICTCLAS50();
String argu = "src/";//原接口文档中此处为".",在实际应用中应改为Configure.xml的文件夹目录
if (testIctclas50.ICTCLAS_Init(argu.getBytes("gb2312"))==false) {
System.out.println("fail");
return;
}else {
System.out.println("success");
}
String input = "长春市长春药店";//此处为需要分词的语句
byte nativeBytes[] = testIctclas50.ICTCLAS_ParagraphProcess(input.getBytes("utf-8"), 0, 0);//最后一个参数控制是否显示词性
System.out.println(nativeBytes.length);
String nativeStr = new String(nativeBytes, 0, nativeBytes.length,"utf-8");
System.out.println(nativeStr);//分词结果,token以空格分割
testIctclas50.ICTCLAS_Exit();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
3.输出
4.添加自定义词典
代码与上面基本保持一致,在初始化之后分词之前添加词典
int nCount = 0;
String usrdir = "usrdir.txt"; //用户字典路径
byte[] usrdirb = usrdir.getBytes();
//第一个参数为用户字典路径,第二个参数为用户字典的编码类型(0:type unknown;1:ASCII码;2:GB2312,GBK,GB10380;3:UTF-8;4:BIG5)
nCount = testIctclas50.ICTCLAS_ImportUserDictFile(usrdirb, 3);//此处函数与接口文档中不同,注意
System.out.println("导入用户词个数"+ nCount);
nCount = 0;
5.用户词典
如图,每行一个词,@@之后为词性,可参见软件中的词性标注集,如无词性需要,每行一个词即可。
6.总结
ICTCLAS号称可以识别人名,发现在部分情况下可以识别,最好还是自己添加词典,确保在任何句式中可以发现,不足的是未找到如何添加停用词,这点稍逊于IK分词