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用户不管用):
- 修改/etc/ld.so.conf文件
- 加入include /usr/local/lib
- 执行/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文件即可编写测试代码。