Java调用CRF++

CRF++是条件随机场(CRF)的主流工具包之一。它使用C++编写,通过SWIG提供了多种语言的接口。由于工程需求,要用Java来调用CRF++,这里记录下安装配置过程。

CRF++安装

下载源代码,目前最新的版本号是0.58,下载后缀名为tar.gz的,zip的是Win平台编译好的。

解压后进入解压路径中,输入以下命令安装:

./configure
make
sudo make install

可以使用crf_learn和crf_test两个命令来训练模型和测试,但这时如果直接运行命令会出现错误。

crf_learn: error while loading shared libraries: libcrfpp.so.0: cannot open shared object file: No such file or directory

出现这种情况的原因是找不到libcrfpp.so.0等库文件,解决方案一为(貌似此方法对root用户不管用):

  1. 修改/etc/ld.so.conf文件
  2. 加入include /usr/local/lib
  3. 执行/sbin/ldconfig -v,刷新LIB库

解决方案二为建立以下符号链接:

ln -s /usr/local/lib/libcrfpp.a /usr/lib/libcrfpp.a
ln -s /usr/local/lib/libcrfpp.so /usr/lib/libcrfpp.so
ln -s /usr/local/lib/libcrfpp.so.0 /usr/lib/libcrfpp.so.0

再运行crf_learn就会出现正常的提示信息了。即使一开始运行正常也要进行这步操作,因为后续Java接口也需要这些库文件。

Java接口配置

首先安装SWIG

sudo apt-get install swig

然后进入解压路径中的swig目录,执行make命令;接着进入java目录,修改Makefile文件,INCLUDE=这一项修改为系统所装Java路径下的include文件夹(该文件夹下包含jni.h头文件),然后执行make命令,得到libCRFPP.so和CRFPP.jar两个文件。

在IDE中建立一个项目,把CRFPP.jar包导入,libCRFPP.so加到LD_LIBRARY_PATH中(或者直接把它放到/usr/lib目录下),参照java目录里的test.java文件即可编写测试代码。