中科院的分词工具ICTCLAS(Institute of Computing Technology,Chinese Lexical Analysis System)2011版,汉语词法分析系统ICTCLAS主要功能包括中文分词;词性标注;命名实体识别;新词识别;同时支持用户词典;支持繁体中文;支持gb2312、GBK、UTF8等多种编码格式。 ICTCLAS分词速度单机500KB/s,分词精度98.45%,API不超过100kb,各种词典数据压缩后不到3M,是世界上最好的汉语词法分析器。 详细介绍可到ICTCLAS官网了解,同时可以下载到最新的版本。另外,也可以到张华平博士的百度空间里去下载。
在看官网提供的API文档的过程中,感觉该文档写得不是很好,估计并没有跟进最新的版本,里面有些接口的介绍以及示例程序不是很正确,现在我将学习过程中的写的示例程序放在这里以供大家讨论。
以下是JNI接口的声明及其个接口的功能介绍,另外,可点击此处查看ICTCLAS各个接口间的调用流程图。本图是基于C++接口绘制的,但由于本人在实验的过程中主要用Java语言开发程序,所以在示例程序方面的都是调用的JNI接口,不过,JNI接口和C++接口命名和功能上都基本一样,只是参数可能不同,但这不是主要问题。
- package ICTCLAS.I3S.AC;
- public class ICTCLAS50 {
- /***********************************************************************
- * 各个接口中,字符编码参数的需按照如下设置,接口参数中不再详细说明, 若编码不确定,系统将会自动识别编码
- * (0:编码未知,系统将会自动识别)
- * (1:ASCII)
- * (2:gb2312、GBK、gb18030)
- * (3:UTF-8)
- * (4:BIG5)
- *************************************************************************/
- /************************************************************************
- * Method: ICTCLAS_Init<!读取配置文件,加载词典等>
- * Parameter: byte[] sPath<!配置文件configure.xml,授权文件user.lic及data文件夹所在路径的字节编码 >
- * Returns: bool<!初始化是否成功>
- * Description: 调用其它任何接口前,必须保证本接口调用成功!
- * Remark: 1.2010/06/03 17 : 34 created by x10n6y version 5.0
- *************************************************************************/
- public native boolean ICTCLAS_Init(byte[] sPath);
- /************************************************************************
- * Method: ICTCLAS_Exit<! 退出,释放相关资源>
- * Returns: ICTCLAS_API bool<! 退出是否成功>
- * Description: 所有操作完成后,请调用本接口释放相关资源!
- * Remark: 1.2010/06/04 9 : 42 created by x10n6y version 5.0
- *************************************************************************/
- public native boolean ICTCLAS_Exit();
- /************************************************************************
- * Method: ICTCLAS_ImportUserDictFile<! 导入用户词典文件>
- * Parameter: byte[] sPath<! 用户词典路径名称>
- * Parameter: int eCodeType<!词典编码类型>
- * Returns: ICTCLAS_API unsigned int<! 成功导入的词汇数量>
- * Description: 用户导入词汇文件格式如下:
- 1.词语与词性用‘@@’间隔。例如:“中科院@@nr;
- 2.一行一词;
- 3.词性可省略
- * Remark: 1.2010/06/04 9 : 43 created by x10n6y version 5.0
- ************************************************************************/
- public native int ICTCLAS_ImportUserDictFile(byte[] sPath, int eCodeType);
- /************************************************************************
- * Method: ICTCLAS_SaveTheUsrDic<!保存用户词典>
- * Description:1.本接口将会覆盖原有/data/文件夹用户相关词典。
- 2.用户可在配置文件中,指定下次是否使用该词典。
- *
- * Remark: 1.2010/07/05 16 : 16 created by x10n6y version 2.0
- *************************************************************************/
- public native int ICTCLAS_SaveTheUsrDic();
- /************************************************************************
- * Method: ICTCLAS_SetPOSmap<!指定词性标注集>
- * Parameter: int nPOSmap<! 标注集ID>
- ICT_POS_MAP_SECOND 0 //计算所二级标注集
- ICT_POS_MAP_FIRST 1 //计算所一级标注集
- PKU_POS_MAP_SECOND 2 //北大二级标注集
- PKU_POS_MAP_FIRST 3 //北大一级标注集
- * Returns: ICTCLAS_API bool<! 指定成功与否>
- * Description:
- * Remark: 1.2010/06/22 11 : 11 created by x10n6y version 5.0
- *************************************************************************/
- public native int ICTCLAS_SetPOSmap(int nPOSmap);
- /************************************************************************
- * Method: ICTCLAS_FileProcess<!文本文件分词>
- * Parameter: byte[] sSrcFilename<!要分词的文件>
- * Parameter: int eCodeType<!要处理的文本编码类型>
- * Parameter: int bPOSTagged<! 是否词性标准>
- * Parameter: byte[] sDestFilename<! 结果文件存放位置>
- * Returns: ICTCLAS_API bool<! 分词是否成功>
- * Description: 1.用户若不指定分词结果保存位置,系统将结果保存至
- 当前目录下,test_result.txt 中。
- 2.pszDstFileName若该文件不存在, 则自动生成;
- 否则先清空已有内容。
- * Remark: 1.2010/06/22 11 : 11 created by x10n6y version 5.0
- *************************************************************************/
- public native boolean ICTCLAS_FileProcess(byte[] sSrcFilename,
- int eCodeType, int bPOSTagged, byte[] sDestFilename);
- /************************************************************************
- * Method: ICTCLAS_ParagraphProcess<! 分词,返回结果为字符串>
- * Parameter: byte[] sSrc<!需要分词的文本内容>
- * Parameter: int eCodeType<!字符编码类型>
- * Parameter: int bPOSTagged<!是否词性标注 >
- * Returns: byte[]<! 分词后的字符串的字节编码>
- * Description: 调用本接口,由用户分配内存,保存结果(pszResult)
- ,建议内存大小strlen(pszText)*6!
- * Remark: 1.2010/06/22 11 : 11 created by x10n6y version 5.0
- *************************************************************************/
- public native byte[] ICTCLAS_ParagraphProcess(byte[] sSrc, int eCodeType,
- int bPOSTagged);
- /************************************************************************
- * Method: nativeProcAPara<! 分词,返回ICTCLAS_Result类对象对应的字节序列,需要按照一定的规则将其进行编码>
- * Parameter: byte[] sSrc<! 需要分词的文本内容>
- * Parameter: int bPOStagged<! 是否词性标注>
- * Returns: byte[] <! ICTCLAS_Result类对象对应的字节序列>
- * Description:( ~_~这个接口现在还不是很明白怎么对其返回结果进行处理,希望各位网友赐教~_~)
- * Remark: 1.2010/06/22 11 : 11 created by x10n6y version 5.0
- *************************************************************************/
- public native byte[] nativeProcAPara(byte[] sSrc, int eCodeType,
- int bPOStagged);
- /* Use static intializer */
- static {
- System.loadLibrary("ICTCLAS50");
- // System.out.println("load ictclas50...");
- }
- }