Java调用LTP接口(JNI方式实现)

哈工大LTP: http://ltp.ai/

LTP编译使用译文提到了LTP自然语言处理平台的编译使用,设计C++、Python和Java方式,相信可以参见其在GitHub主页中提到的具体编译方式和使用。这里主要是关于在Java项目中调用C++。

Java调用C++(编译得到DLL文件),主要用JNI和JNA,其中JNA是基于JNI的。LTP的Java移植版本ltp4j是采用JNI的方式。Java调用C++编译后的DLL文件,对于DLL文件的方式位置有一定的要求,需要在java.library.path中,有如下几种方式:

  1. DLL文件放在项目目录下,即与src目录同一级别
    可以直接调用ltp4j中诸如Segmentor类及相关方法。

  2. DLL文件放在自定义文件中
    在使用中需要自己显示地调用库,比如:

System.loadLibrary("segmentor"); // 分词
  • 方式一: 配置Java Build Path中选择【Libraris】->【Native library location】,添加DLL文件所在目录。
![Java Build Path](https://img-blog.csdnimg.cn/img_convert/fda11c6232c038fb47959049be2fa265.png)
Java Build Path(Eclipse)中配置
  • 方式二:配置虚拟机参数,【Run Configurations】->【Arguments】,在【VM arguments】中添加:
-Djava.library.path=DLL文件所在目录
![VM arguments](https://img-blog.csdnimg.cn/img_convert/89a628cfefc8e0563b1b328e49651fa7.png)
VM arguments方式配置
  • 方式三:动态配置(代码)
private void addDirToLiraryPath(String dirpath) {
   
	try {
   
		Field field = ClassLoader.class.getDeclaredField("sys_paths");
		field.setAccessible(true);
		String[] oldpath = (String[]) field.get(null);
		String[] newPath = new String[oldpath.length + 1];
		System.arraycopy(oldpath, 0, newPath, 0, oldpath.length);
		tem[oldpath.length] = dirpath;
		field.set(null, newPath);
	} catch (Exception e) {
   
		e.printStackTrace();
	}
}

完整的测试代码

package test.hitltp;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

import 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值