一、前期准備:
1、下載最新版本的資源包:CTCLAS20160405171043_ICTCLAS2016分詞系統下載包
2、下載最新版本的licence:https://github.com/NLPIR-team/NLPIR/tree/master/License
二、調試程序
1、將JnaTest_NLPIR工程工程導入到MyEclipse。
2、修改NLPIR目錄
這個與操作系統有關,在\漢語分詞20140928\lib\操作系統目錄下。我的是win7 64bit,所以在漢語分詞20140928\libwin64\目錄下。寫路徑的時候注意特殊字符的轉義,而且windows路徑是反斜杠“\”,注意改成形如這樣:“E://test//漢語分詞20140928//lib//win64//NLPIR”,文件名不加后綴名。
3、修改Data文件夾目錄
String argu = new File("").getAbsolutePath(); //Data文件夾在工程目錄下
Data文件不在工程目錄下,寫路徑要注意編碼問題,我程序設置的系統編碼是GBK,但是工程的編碼設置的是utf-8,打印出來就能看出來路徑中的中文都是亂碼,當然會導致無法加載類或者是找不到配置文件。將所有設置編碼的地方都設置成一樣的編碼,保證不會有錯。工程的編碼可以是utf-8,只要程序中所有地方都引用同一個系統編碼就可以。
我第二次做這個實驗鬼抽風般File("").getAbsolutePath();得到的是亂碼(沒有中文也有亂碼)。還是IDE的編碼設置等和其他一些編碼設置問題,這個我實在是郁悶了。new File("").getAbsolutePath().getBytes("GBK")也許有效~我設置了工程的編碼是GBK,但是打開工程文件.project是里面寫了utf-8,我不清楚這有沒有關系,實在不行,用命令行調試吧。
三、運行程序
如果你運氣夠好,沒有出現什么幺蛾子,沒有亂改程序,這時程序就可以正常運行了。
運行結果:
分詞結果為: 據悉/v ,/wd 質檢/vn 總局/n 已/d 將/d 最新/a 有關/vn 情況/n 再次/d 通報/v 美方/n ,/wd 要求/v 美方/n 加強/v 對/p 輸/v 華/b 玉米/n 的/ude1 產地/n 來源/n 、/wn 運輸/vn 及/cc 倉儲/vn 等/udeng 環節/n 的/ude1 管/v 控/v 措施/n ,/wd 有效/ad 避免/v 輸/v 華/b 玉米/n 被/pbei 未經/d 我國/n 農業部/nt 安全/an 評估/vn 並/cc 批准/v 的/ude1 轉基因/n 品系/n 污染/vn 。/wj
關鍵詞提取結果是:農業部#評估#倉儲#污染#
如果你像我一樣亂改了程序或者運氣實在太差,sorry,你可能初始化失敗。初始化失敗的原因可能有:
1、licence過期。解決辦法是下載最新的licence和修改系統時間。
2、無法找到Configure.xml。可能你有個地方亂改字符集或者字符集代碼。請檢查所有設置字符集的地方N遍。我在初始化ICTCLAS_Init時,將new File("").getAbsolutePath().getBytes("字符集")作為參數傳遞就可以正確運行了。
3、其他錯誤請參見錯誤日志的輸出。
四、分析其他文件
1、字符流緩沖類輸入輸出文件
1 File file = new File("文件路徑"); 2 FileReader fileReader = new FileReader(file); 3 BufferedReader bufferedReader = new BufferedReader(fileReader); 4 String sInput = bufferedReader.readLine(); 5 File outFile = new File("輸出結果路徑+輸出結果.txt"); 6 FileWriter fileWiter = new FileWriter(outFile); 7 BufferedWriter bufferedWriter = new BufferedWriter(fileWiter); 8 while((sInput = bufferedReader.readLine())!=null){ 9 String nativeBytes = null; 10 try { 11 nativeBytes = CLibrary.Instance.NLPIR_ParagraphProcess(sInput, 3); 12 // String nativeStr = new String(nativeBytes, 0, 13 // nativeBytes.length,"utf-8"); 14 //System.out.println("分詞結果為: " + nativeBytes); 15 System.out.println("分詞結果為: "+ transString(nativeBytes, system_charset, "GBK")); 16 bufferedWriter.write("分詞結果為: "+ transString(nativeBytes, system_charset, "GBK")); 17 bufferedWriter.write("\r\n"); 18 int nCountKey = 0; 19 String nativeByte = CLibrary.Instance.NLPIR_GetKeyWords(sInput, 10,false); 20 System.out.println("關鍵詞提取結果是:" + nativeByte); 21 bufferedWriter.write("關鍵詞提取結果是:" + nativeByte); 22 bufferedWriter.write("\r\n"); 23 } catch (Exception ex) { 24 // TODO Auto-generated catch block 25 ex.printStackTrace(); 26 } 27 }
記得關閉bufferedWriter。
2、找一篇文章存為txt格式,進行分詞和關鍵詞提取。
到此為止我終於調試好了分詞系統,中英文都很有效。文件也差不多看了,只是.dll里面不知道寫了什么。能做到這里我已經很開心了,下篇我將按照說明做hadoop使用分詞實例。