下載源碼包,解壓
編譯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");
}