下载源码包,解压
编译C++ bin文件
./configure
make
sudo make install
编译完成生成crf_learn和crf_test两个bin文件,可以使用它们来训练模型和测试了。
为了在java里面能调用c++ so文件,需要使用swig将so转换成支持JNI调用的格式。
cd CRF++-0.58
cd swig/
make
cd ..
echo $JAVA_HOME 查看java include目录,如 /usr/java/jdk1.8.0_45/include/
vi Makefile 将INCLUDE改写成/usr/java/jdk1.8.0_45/include/
make
cd到swig目录,执行make命令;再进入解压路径中的java目录,再次执行make命令。这样java目录中就会生成JNI所需要的文件,其中有libCRFPP.so链接库和CRFPP.jar包。
在mac下和Linux下分别通过下面方式进行加载。在Linux下需要加载libcrfpp.so.0和libCRFPP.so两个so,libcrfpp.so.0在/usr/local/lib下,是一个指向libcrfpp.so.0.0.0的软链接,所以可以拷贝libcrfpp.so.0.0.0,重命名为libcrfpp.so.0在工程里加载,或者直接拷贝libcrfpp.so.0(拷贝软链接相当于拷贝指向的文件并重命名)。
if (OS.contains("mac")) {
String libDir = resourceLoader.getPath("libCRFPP.dylib");
System.load(libDir);
System.out.println("load libCRFPP.dylib successfuly");
} else {
String libDir = resourceLoader.getPath("libCRFPP.so");
// 必须先加载.so.0
String so0Path = libDir.substring(0, libDir.lastIndexOf("lib")) + "libcrfpp.so.0";
System.load(so0Path);
System.load(libDir);
System.out.println("load libCRFPP.so successfuly");
}