怎麽用?先在線下載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折磨死了,有時間就不說了)!
繼續前進。