前言:ltp4j是語言技術(shù)平臺(tái)(Language Technology Platform, LTP)接口的一個(gè)Java封裝。官網(wǎng)給出了C++源碼,要想用java調(diào)用,必須編譯成java本地接口。 官網(wǎng)給的文檔太籠統(tǒng),遇到錯(cuò)誤根本不知道怎么處理。在網(wǎng)上搜的博客,一步一步來還是編譯不成功。這里給出在windows環(huán)境下編譯詳細(xì)過程,也是自己一點(diǎn)一點(diǎn)解決問題,最終在摸索中編譯成功。
準(zhǔn)備工作
- 源碼下載:
- 環(huán)境:
- 操作系統(tǒng):
windows 7/8/10 -
JDK版本:
1.8+ 32位(低于1.8版本的話,無法運(yùn)行) -
IDE:eclipse -
Ant:這個(gè)一般集成在
eclipse中,如果沒有請先安裝 -
cmake:下載鏈接 -
Visual studio Express 2012:其他版本不知道行不行,最好不要低于這個(gè)版本
- 操作系統(tǒng):
2. 生成jar文件
-
打開
eclipse,點(diǎn)擊File -> New -> Project -> Java Project from Existing Ant Buildfile,然后next -
project name填寫ltp4j,build file那里選擇剛才解壓的itp4j-master 中的build.xml,點(diǎn)擊Finish。
-
選中build.xml,右鍵->
Run As -> 2 Ant Build,在 彈出的窗口的導(dǎo)航欄中選擇main,第二項(xiàng)的Base Directory點(diǎn)擊下方的Browse File System,然后選擇LTP4J根目錄。最后點(diǎn)擊右下角的Run運(yùn)行。 -
控制臺(tái)顯示如下,說明build成功.可以打開根目錄下面
ltp4j-master\output\jar中查看生成的jar文件Buildfile: C:\Users\shixu\Documents\work space\ltp4j\build.xml
clean:
[delete] Deleting directory C:\Users\shixu\Documents\LTP\ltp4j-master\output
compile:[mkdir] Created dir: C:\Users\shixu\Documents\LTP\ltp4j-master\output\classes
[javac] C:\Users\shixu\Documents\work space\ltp4j\build.xml:17: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
[javac] Compiling 7 source files to C:\Users\shixu\Documents\LTP\ltp4j-master\output\classesjar:
[mkdir] Created dir: C:\Users\shixu\Documents\LTP\ltp4j-master\output\jar
[jar] Building jar: C:\Users\shixu\Documents\LTP\ltp4j-master\output\jar\ltp4j.jarmain:
BUILD SUCCESSFUL
Total time: 2 seconds
編譯LTP
-
構(gòu)建VC project:
在
ltp-master項(xiàng)目文件夾下新建一個(gè)名為build的文件夾,使用CMake Gui,在source code中填入項(xiàng)目文件夾,在binaries中填入build文件夾。然后Configure選擇vs 11 2012,點(diǎn)擊finish。稍等幾秒鐘,點(diǎn)擊Generate查看日志,如果出現(xiàn)如下,說明成功。
Configuring doneGenerating done?
-
編譯:
進(jìn)入
build文件夾,用vs 2012打開ALL_BUILD.vcxproj在vs的菜單欄中,點(diǎn)擊生成->生成解決方法,可以在控制臺(tái)看到,正在生成。注意要選擇Debug模式。(網(wǎng)上很多帖子說的選擇Release模式,我開始這么嘗試,后來發(fā)現(xiàn)在編譯ltp4j的時(shí)候失敗,一直報(bào)error link 1181:--.lib輸入文件無法打開。后來讀了一下ltp4j的配置文件,發(fā)現(xiàn)里面默認(rèn)的路徑是到ltp的lib\Debug中加載lib文件,如下? ```
if(WIN32) link_directories (${LTP_HOME}/lib/Debug) else(WIN32) link_directories (${LTP_HOME}/lib) endif(WIN32)如果選擇
Release,那么生成的庫只會(huì)在Release中,這也難怪會(huì)報(bào)上述錯(cuò)誤了。) 編譯生成比較耗時(shí)。生成完成之后,可以到
ltp-master\lib\Debug看到已經(jīng)生成庫文件。至此LTP的編譯已經(jīng)完成,接下來進(jìn)行LTP4J的編譯。
編譯 LTP4J
-
配置ltp的安裝路徑:
因?yàn)閖ni依賴于ltp編譯產(chǎn)生的動(dòng)態(tài)庫,所以在編譯過程中需要給出ltp的路徑。 請修改
/path/to/your/ltp4j-project/CMakeLists.txt中的LTP_HOME的值為您的LTP項(xiàng)目的路徑(/path/to/your/ltp-project), 對應(yīng)修改的代碼為:set (LTP_HOME "/path/to/your/ltp-project/") 構(gòu)建VC project。 在項(xiàng)目文件夾下新建一個(gè)名為build的文件夾,使用CMake Gui,在source code中填入項(xiàng)目文件夾,在binaries中填入build文件夾。然后Configure -> Generate。(同上)
?編譯:(同上)
生成完成之后,同樣可以到
ltp-master\libs\Debug看到已經(jīng)生成庫文件。至此所有編譯工作已經(jīng)完成,是不是覺得很簡單呀,哈哈。反正我是試了好多次。接下來重頭戲,開始在java 代碼中調(diào)用。
3. 實(shí)戰(zhàn)-- java中調(diào)用
打開eclipse,新建java project。
根目錄創(chuàng)建lib文件夾,將ltp4j.jar拷貝至此,然后build path。
將ltp4j中的libs文件夾中生成的所有動(dòng)態(tài)庫、以及原ltp lib文件夾下的splitsnt、segmentor、postagger、ner、parser、srl 6個(gè)動(dòng)態(tài)庫拷貝到項(xiàng)目根目錄
根目錄下面創(chuàng)建model文件夾,拷貝model文件至此,需要下載3.3.1版本的model文件,下載鏈接 。
-
創(chuàng)建一個(gè)類文件:這里測試一下分詞的接口調(diào)用。其他的自行測試。
package ltp; import java.util.ArrayList; import java.util.List; import edu.hit.ir.ltp4j.*; public class Test { public static void main(String[] args) { if(Segmentor.create("model\\cws.model")<0){ System.err.println("load failed"); return; } String sent = "我是中國人"; List<String> words = new ArrayList<String>(); int size = Segmentor.segment(sent,words); for(int i = 0; i<size; i++) { System.out.print(words.get(i)); if(i==size-1) { System.out.println(); } else{ System.out.print("\t"); } } Segmentor.release(); } }?
-
工程目錄結(jié)構(gòu)如圖:
-
運(yùn)行,完美分詞結(jié)果:
?
-
看到這兒 ,可能伸手黨表示已經(jīng)扛不住了。沒事兒,我這兒有傳送門。打包好的,下載就能用哦
?
用了一個(gè)午休的時(shí)間來寫,脖子都疼了。
如果能給你帶來一些幫助的話,那我也覺得值啦。
該休息了。下次見。---
想起我的阿里簡歷還沒完善,,馬上該面試了,神助我!






