1---------java调用NLPIR(ICTCLAS2016)实现分词功能
2016-04-18 19:52
609 查看
备注:win7 64位系统,netbeans编程
NLPIR分词系统,前身是2000年发布的ICTCLAS,2009年更为现名。张华平博士打造。
实现步骤:
1、在Netbeans中,文件→新建项目→java→java应用程序;项目名称:CWordSeg;
2、将NLPIR文件下…\sample\JnaTest_NLPIR\src\code中NlpirTest.java里的代码拷贝到CWordSeg.java里面;
初步修改代码为下图所示:
![](http://img.blog.csdn.net/20160315131422013)
(1)将package包声明修改为cwordseg;
(2)将类名NlpirTest重命名重构为CWordSeg;
方法:右键CwordSeg.java→重构→重命名,改名为CWordSeg→重构;
如果只是直接修改代码里的类名,则仍然需要进行重构,否则运行时会报错:找不到主类CWordSeg。
(3)import utils.SystemParas; 未用到,暂时注释掉。
3、将NLPIR文件下…\sample\JnaTest_NLPIR\src下的utils文件夹直接拷贝到项目CWordSeg的src文件夹中;
4、将NLPIR文件下…\sample\JnaTest_NLPIR\lib下的jna-4.0.0.jar导入到工程库中;
方法(1):右键库→添加JAR→选择jna-4.0.0.jar导入;
方法(2):直接复制jna-4.0.0.jar文件到工程…\CWordSeg\lib文件夹下。
导完之后工程目录如下:
![](http://img.blog.csdn.net/20160315131445612)
5、在工程CWordSeg文件夹中新建文件夹file:
(1)将NLPIR中的Data文件夹全部拷贝到file文件夹中;
(2)将…\lib\win64文件夹也全部拷贝到file文件夹(注意:如果是win32或linux请选择对应的文件夹)。
6、修改部分代码2:
(1)修改文件NLPIR.dll所在的路径,它在第5步中拷入的win64文件夹中,例如:
D:\\NetBeansProjects\\CWordSeg\\file\win64\\NLPIR
注意:最后的NLPIR是文件名,不要加后缀.dll。
附:已经试验过,如果是64位操作系统,使用32位的文件将会报错。
![](http://img.blog.csdn.net/20160315131530738)
(2)修Data文件夹所在的路径(即第5步中的Data文件夹),如下图所示:
D:\\NetBeansProjects\\CWordSeg\\file
![](http://img.blog.csdn.net/20160315131546232)
(3)其他可以更改的地方:
编码格式:int charset_type = 1; 改为其它值。
其中:GBK对应0,UTF-8对应1,BIG5对应2,含繁体字的GBK对应3。
简化后代码如下:
运行结果:
![](http://img.blog.csdn.net/20160315131655717)
出错解决:找不到主类CWordSeg
在第2步中修改了类名,需要用正确的方法修改,或者通过重构修正。
NLPIR分词系统,前身是2000年发布的ICTCLAS,2009年更为现名。张华平博士打造。
实现步骤:
1、在Netbeans中,文件→新建项目→java→java应用程序;项目名称:CWordSeg;
2、将NLPIR文件下…\sample\JnaTest_NLPIR\src\code中NlpirTest.java里的代码拷贝到CWordSeg.java里面;
初步修改代码为下图所示:
(1)将package包声明修改为cwordseg;
(2)将类名NlpirTest重命名重构为CWordSeg;
方法:右键CwordSeg.java→重构→重命名,改名为CWordSeg→重构;
如果只是直接修改代码里的类名,则仍然需要进行重构,否则运行时会报错:找不到主类CWordSeg。
(3)import utils.SystemParas; 未用到,暂时注释掉。
3、将NLPIR文件下…\sample\JnaTest_NLPIR\src下的utils文件夹直接拷贝到项目CWordSeg的src文件夹中;
4、将NLPIR文件下…\sample\JnaTest_NLPIR\lib下的jna-4.0.0.jar导入到工程库中;
方法(1):右键库→添加JAR→选择jna-4.0.0.jar导入;
方法(2):直接复制jna-4.0.0.jar文件到工程…\CWordSeg\lib文件夹下。
导完之后工程目录如下:
5、在工程CWordSeg文件夹中新建文件夹file:
(1)将NLPIR中的Data文件夹全部拷贝到file文件夹中;
(2)将…\lib\win64文件夹也全部拷贝到file文件夹(注意:如果是win32或linux请选择对应的文件夹)。
6、修改部分代码2:
(1)修改文件NLPIR.dll所在的路径,它在第5步中拷入的win64文件夹中,例如:
D:\\NetBeansProjects\\CWordSeg\\file\win64\\NLPIR
注意:最后的NLPIR是文件名,不要加后缀.dll。
附:已经试验过,如果是64位操作系统,使用32位的文件将会报错。
(2)修Data文件夹所在的路径(即第5步中的Data文件夹),如下图所示:
D:\\NetBeansProjects\\CWordSeg\\file
(3)其他可以更改的地方:
编码格式:int charset_type = 1; 改为其它值。
其中:GBK对应0,UTF-8对应1,BIG5对应2,含繁体字的GBK对应3。
简化后代码如下:
package cwordseg; import java.io.UnsupportedEncodingException; // import utils.SystemParas; import com.sun.jna.Library; import com.sun.jna.Native; /** * * 功能:基本的分词功能 * 最后更新时间:2016年3月14日 21:01:21 */ public class CWordSeg { // 定义接口CLibrary,继承自com.sun.jna.Library public interface CLibrary extends Library { // 定义并初始化接口的静态变量,用于加载NLPIR.dll,路径指向文件NLPIR.dll,但不加后缀dll CLibrary Instance = (CLibrary) Native.loadLibrary("D:\\NetBeansProjects\\CWordSeg\\file\\win64\\NLPIR",CLibrary.class); // 初始化函数声明:sDataPath是初始化路径地址,包括核心词库和配置文件的路径,encoding为输入字符的编码格式 public int NLPIR_Init(String sDataPath,int encoding,String sLicenceCode); // 分词函数声明:sSrc为待分字符串,bPOSTagged=0表示不进行词性标注,bPOSTagged=1表示进行词性标注 public String NLPIR_ParagraphProcess(String sSrc,int bPOSTagged); // 获取最后一个错误信息的函数声明 public String NLPIR_GetLastErrorMsg(); // 退出函数声明 public void NLPIR_Exit(); } public static String transString(String aidString,String ori_encoding,String new_encoding) { try { return new String(aidString.getBytes(ori_encoding),new_encoding); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return null; } public static void main(String[] args) throws Exception { String argu = "D:\\NetBeansProjects\\CWordSeg\\file"; // 该路径指向Data文件夹(系统核心词库) // String system_charset = "UTF-8"; int charset_type = 1; // UTF-8编码模式,其它的GBK对应0,BIG5对应2,含繁体字的GBK对应3 int init_flag = CLibrary.Instance.NLPIR_Init(argu, charset_type, "0"); // 运行初始化函数,成功则返回1,失败返回0 String nativeBytes; // 初始化失败提示 if (0 == init_flag) { nativeBytes = CLibrary.Instance.NLPIR_GetLastErrorMsg(); // 获取错误信息 System.err.println("初始化失败!原因:"+nativeBytes); return; } String sInput = "这是一本关于信息检索的书。"; // 手工输入的字符串sInput try { nativeBytes = CLibrary.Instance.NLPIR_ParagraphProcess(sInput, 1); // 运行分词函数 System.out.println("分词结果为: " + nativeBytes); // 输出分词结果 CLibrary.Instance.NLPIR_Exit(); // 退出 } catch (Exception ex) { // TODO Auto-generated catch block ex.printStackTrace(); } } }
运行结果:
出错解决:找不到主类CWordSeg
在第2步中修改了类名,需要用正确的方法修改,或者通过重构修正。
![](https://images2015.cnblogs.com/blog/682366/201604/682366-20160418195103585-1670273053.png)
相关文章推荐
- 接口与抽象类
- 【小笨鸟看JDK1.7集合源码之一】JAVA集合整体框架
- Spring-Security
- Spring MVC 和 Struts2 的区别?
- Ubuntu下安装了java但启动eclipse报错说没装java
- JAVA使用JDBC连接MySQL数据库
- Spring IOC核心源码学习
- XXX will not be managed by spring
- spring boot 使用
- selenium java 设置firefox的默认下载文件路径
- 搭建spring框架步骤
- java毕向东听课笔记16(线程5)
- java加载驱动
- java加载驱动
- spring aop 拦截业务方法,实现权限控制
- 【JUC】JDK1.8源码分析之CyclicBarrier(四)
- java中的List
- ECLIPSE启动参数
- java中的|与||,&与&&的区别,与、或,非、异或、位运算
- ECLIPSE 字体设置