1. 程式人生 > >ICTCLAS2014 C++版本 的使用方法

ICTCLAS2014 C++版本 的使用方法

這個工具是什麼?先看看他的官方介紹吧:

NLPIR漢語分詞系統(又名ICTCLAS2013),主要功能包括中文分詞;詞性標註;命名實體識別;使用者詞典功能;支援GBK編碼、UTF8編碼、BIG5編碼。新增微博分詞、新詞發現與關鍵詞提取;張華平博士先後傾力打造十餘年,核心升級10次。

雖然介紹時候還是用的ICTCLAS2013,但是你會發現下載的版本里面dll是2014版本的。以前的部落格可能不能成功使用。

ICTCLAS2013 Java版本的使用方法 請點選點選開啟連結

ICTCLAS2013 c++版本的使用方法  

一,先下載2014版本的c++版本:點選開啟連結

此本版下面後的檔名字:20131115123549_nlpir_ictclas2013_u20131115_release.zip

解壓檔案後看到很多檔案的:


圖1. rar解壓後的檔案圖

但是2014版本中的bin資料夾開啟時這樣的:


圖2. 圖1中bin資料夾開啟後看到的圖

注意: 此dll是2014版本的。

二,自己新建一個c++工程,在vs2010建名為ICTCLAS2014的工程(不要使用預編譯頭)。

建好後如圖所示:


圖3. 工程ICTCLAS2014根目錄下的檔案

三,將圖1中的example-c資料夾(是整個資料夾,下同)複製到圖3的ICTCLAS2014目錄下,並且在ICTCLAS2014原始檔中匯入,同時將ICTCLAS2014.cpp檔案下的_tmain函式註釋掉。如圖:


圖4. 匯入example-c資料夾下的E

xample-C.cpp檔案


圖5. 匯入完成後,工程下面出現Example-C.cpp檔案(圖中紅底線示意)

四,將圖1中的include資料夾複製到圖2的工程根目錄下。否則,會出現下圖所示錯誤。


圖6. 複製include資料夾之前工程提示“無法開啟原始檔 "../../include/NLPIR.h"


圖7.複製include資料夾之後,工程ICTCLAS2014根目錄下的檔案

五,

1>將圖1中的lib資料夾複製到圖2工程根目錄下面,並且在專案->新增現有項中匯入lib下的NLPIR.lib檔案。


圖8. 匯入lib資料夾下NLPIR.lib檔案

2>將圖2中ICTCLAS2014資料夾下的NLPIR.dll檔案複製到工程根目錄下ICTCLAS2014目錄下Debug目錄下[注意:沒有Debug目錄,請將工程編譯一次]。

注意:如果機器是32位的,請去下載32位對應的dll。

3>註釋掉Example-C.cpp檔案第9行語句。

 #pragma comment(lib, "../../bin/NLPIR.lib")  -->   // #pragma comment(lib, "../../bin/NLPIR.lib")

  (不要問我為什麼,我只能告訴你,我也不知道。在我實驗中不註釋掉這句話,依然報錯 fatal error LNK1104。)

六,將圖1中的Data資料夾和test資料夾複製到圖3工程根目錄下。


圖9, 步驟六完成後工程根目錄下的檔案


七,不做修改,編譯後,執行工程。

失敗了!!!!!!


圖10, 編譯,執行未做任何修改Example-C.cpp程式碼的結果。

解決方法:

Example-C.cpp的322行註釋掉,並且將323行注符號刪除。修改後的兩行如下:

testNewWord(GBK_CODE);
//testNewWord(UTF8_CODE);

編譯後執行程式。成功了,如圖:

圖11,修改322行和323行後執行結果,識別新詞。

如果想試試分詞,繼續行動。將327行註釋符號去掉。編譯,執行。

可惜的是......ICTCLAS INIT FAILED! 如圖:


圖12, 同時開啟識別新詞和分詞函式的失敗結果圖。

不要洩氣,註釋掉322行,然後修改第80行程式碼:

if(!ICTCLAS_Init())//資料在當前路徑下,預設為GBK編碼的分詞   ==》 if(!NLPIR_Init("..",0)//資料在當前路徑下,預設為GBK編碼的分詞

注意:此處的NLPIR_Init("..",0)中的0是表示GBK編碼。

編譯,執行。 成功!!


圖13,執行成功圖。

注意事項:

1. 如果細心你會發現在圖2中ICTCLAS2014資料夾中有一個20131213.err檔案。


圖14,ICTCLAS2014資料夾中檔案,下劃線為20131213.err檔案

開啟20131213.err檔案


圖15,20131213.err檔案內容

此處的報錯和圖10報錯是同一個型別(圖10報錯時候log檔案也顯示這個)。

2,testNewWord(GBK_CODE) 和 SplitGBK(sInput)同時使用報錯。錯誤型別還未知。