ICTCLAS20160405分詞系統調試過程


一、前期准備:

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使用分詞實例。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM