當前位置:成語大全網 - 英語詞典 - 如何使用ictclas分詞系統進行分詞

如何使用ictclas分詞系統進行分詞

ICTCLAS分詞系統是壹個NB系統。這幾天我仔細試了壹下,效率極高。分詞算法的效率比我自己的字典高很多倍,用起來也很簡單。BOSS需要導出壹個自定義詞庫,然後用文章訓練。反正可以用。DT已經成功使用hash兩周了,進度很慢。分析壹本書《龍脈八枝》,統計詞頻(詞只是基於頻率,沒有詞典無法實現智能分詞!大概需要十幾分鐘,可見效率較低,內存在200M m左右,使用ICTCLAS分詞系統可以高效的實現分詞。把過程貼在下面。

怎麽用?先在線下載ICTCLAS,因為我是在windows下用C++實現的。下載ICTCLAS 2011 _ Windows _ 32 _ C,解壓。項目中的demo、doc和copy API目錄下有所有文件(文件夾),將它們添加到源文件中。

#包含“ICTCLAS50.h”

# pragma comment (lib," ictlas50.lib")//ictlas50.lib庫被添加到項目中。

//

//妳這裏的代碼,請參考Demo裏的代碼。

//

去做吧。

近似函數C++函數接口都在Doc文件下的文檔中:

bool ICTCLAS _ Init(const char * pszInitDir = NULL);初始化功能

返回值

如果初始化成功,則返回true,否則返回false。如果初始化不成功,請查看ictclas.log文件,了解詳細的錯誤原因。

參數

PszInitDir:初始化路徑,應該包括配置文件(Configure.xml)、字典目錄(Data directory)和授權文件(user.lic)。如果這些文件和目錄位於系統運行的當前目錄中,則該參數可以為null。

bool ICTCLAS _ Exit();退出以釋放內存

返回值

返回true成功;否則返回false。

無符號int ICTCLAS _ import user dict(const char * sFilename,eCodeType eCT)

//導入用戶定義的字典

返回值

成功導入的字數

參數

SFilename:用戶定義的字典文件。

ECT:編碼格式

int ICTCLAS _ ParagraphProcess(const char * sParagraph,int nPaLen,eCodeType eCt,int bPOStagged,char * sResult);//壹段文字的分段

返回值

返回指向結果緩沖區(sResult)的指針和結果的長度r。

參數

SParagraph:原始文本段

NPaLen:文本段的長度。

ECodeType:文本段的編碼格式。

BPOStagged:是否需要根據標註集進行標註?0 =標記;1 =未標記;默認值為1。

SResult:輸出結果。

t _ pstRstVec ICTCLAS _ ParagraphProcessA(const char * sParagraph,int PaLen,eCodeType eCodeType,int bPOStagged,int & ampnRstCnt);

//處理文本段

返回值

結果向量指針,系統調用,用戶不能分配和釋放。

結構應力結果{

int start//開始位置

int長度;//長度

#ifdef POS_TAGGER

國際首次公開募股;//位置

char sPOS[POS _ SIZE];//單詞類型

#endif

int word _ ID//word_ID

int word _ type//是用戶詞典的單詞?(0-否,1-是)

int重量;//單詞權重

};

參數

SParagraph:原始文本段

NPaLen:文本段的長度。

ECodeType:編碼格式

BPO已標記:

需要按照標簽集標註嗎?0 =標記;1 =未標記;默認值為1。

NRstcnt:處理結果的長度值。

詳細用法見Doc文件。

bool ICTCLAS _ file process(const char * sSrcFilename,eCodeType eCt,const char *sDsnFilename,int bPOStagged);//處理txt文件

返回值

成功處理文本文件將返回true,否則將返回false。

參數

SSourceFilename:原始處理文件

ECodeType:原始文件編碼格式

SDsnFilename:用於存儲結果的文件名t。

BPOStagged:是否需要根據標註集進行標註?0 =標記;1 =未標記;默認值為1。

需要註意的事項

在調用這個函數之前,需要調用init函數成功,通過ICTCLAS配置可以改變輸出格式,這需要學習配置文件。

int ICTCLAS _ SetPOSmap(int NPOs map);//設置註釋集

返回值

成功是1,其他是0。

參數

nPOSmap:

ICT_POS_MAP_FIRST計算第壹級標註集。

ICT_POS_MAP_SECOND計算二次標註集PKU_POS_MAP_SECOND北大二次標註集PKU_POS_MAP_FIRST北大壹次標註集。

int ICTCLAS _ GetWordId(const char * sWord,int nWrdLen,ecode type eCT);

返回值

單詞的ID(我覺得是字典中的存儲位置,不知道字典的具體結構)

參數

劍:目標詞

NWrdLen:字長

ECodeType:編碼格式

bool ICTCLAS _ result free(t _ pstRstVec pret vec)

//釋放調用ICTCLAS_ParagraphProcessAW得到的向量指針。

返回值

成功是1,失敗是0。

參數

來自t _ pstrstvec的向量指針:ictklas _ paragraphprocessaw

總結:這些功能非常好用。我需要使用文件處理函數ICTCLAS_FileProcess。我的問題是:單獨調用這個函數是沒有問題的,但是在MFC界面中調用兩個選擇打開文件路徑並保存結果文件路徑的CFileDialog之後,ICTCLAS_Init的初始化就會失敗!郁悶了很久,看著ICTCLAS.log文件,

默認路徑:E:\ test _ ICTCLAS \ test _ ICTCLAS \ test _ ICTCLAS

開始許可證檢查。

許可成功!無法打開用戶詞典

e:\ test _ ICTCLAS \ test _ ICTCLAS \ test _ ICTCLAS \ Data \ user dict . pdat。

無法打開文件E:\ test _ ICTCLAS \ test _ ICTCLAS \ test _ ICTCLAS \ Data \ user dict . map。

無法打開用戶字典E:\ test _ ICTCLAS \ test _ ICTCLAS \ test _ ICTCLAS \ Data \ user dict . pos。

下載字典!

沒有例外。加載失敗,因為沒有自定義詞典。

仔細調查後發現,Boolictclas _ init(const char * pszinitdir = null)有壹個默認的工作路徑。CFileDialog不打開時,默認路徑是exe文件執行路徑,但如果打開後不設置,工作路徑會改變!這就是為什麽妳點擊CFileDialog路徑改變找不到路徑下的文件,當然也無法初始化!(pszInitDir:初始化路徑,應該包括配置文件(Configure.xml)、字典目錄(Data directory)和授權文件(user.lic)。如果這些文件和目錄位於系統運行的當前目錄中,則該參數可以為null。)

解決方案:

方案1。每次調用CFileDialog打開文件後,重置工作路徑。

方案二。在程序中使用絕對路徑

方案三。CFileDialog的構造函數有八個參數,通常只指定第壹個,以省去麻煩。其實要解決這個問題,只要在第四個參數dwFlags中加上OFN_NOCHANGEDIR就可以了。

我用第三種方法解決了_!後面我會把最後分詞的代碼貼出來。還有壹些我中間遇到的事情(我已經被微軟用CString LPS CSTR CHAR * Const CHAR * Unicode和multibyte折磨死了,有時間就不說了)!

繼續前進。