java實現NLPIR(ICTCLAS)分詞
阿新 • • 發佈:2019-02-08
package com.code; import java.io.UnsupportedEncodingException; import utils.SystemParas; import com.sun.jna.Library; import com.sun.jna.Native; public class test1 { // 定義介面CLibrary,繼承自com.sun.jna.Library public interface CLibrary extends Library { // 定義並初始化介面的靜態變數 這一個語句是來載入 dll 的, 注意 dll 檔案的路徑 //可以是絕對路徑也可以是相對路徑,只需要填寫 dll 的檔名,不能加字尾 CLibrary Instance = (CLibrary) Native.loadLibrary( "E:\\ICTCLAS2015\\bin\\ICTCLAS2015\\NLPIR", CLibrary.class); // 初始化函式宣告 public int NLPIR_Init(String sDataPath, int encoding, String sLicenceCode); //執行分詞函式宣告 public String NLPIR_ParagraphProcess(String sSrc, int bPOSTagged); //提取關鍵詞函式宣告 public String NLPIR_GetKeyWords(String sLine, int nMaxKeyLimit, boolean bWeightOut); public String NLPIR_GetFileKeyWords(String sLine, int nMaxKeyLimit, boolean bWeightOut); //新增使用者詞典宣告 public int NLPIR_AddUserWord(String sWord);//add by qp 2008.11.10 //刪除使用者詞典宣告 public int NLPIR_DelUsrWord(String sWord);//add by qp 2008.11.10 public String NLPIR_GetLastErrorMsg(); //退出函式宣告 public void NLPIR_Exit(); //檔案分詞宣告 public void NLPIR_FileProcess(String utf8File, String utf8FileResult, int i); } public static String transString(String aidString, String ori_encoding, String new_encoding) { try { return new String(aidString.getBytes(ori_encoding), new_encoding); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return null; } public static void main(String[] args) throws Exception { String argu = "E:\\ICTCLAS2015"; //String system_charset = "GBK";//GBK----0 String system_charset = "UTF-8"; int charset_type = 1; //檔案分詞的輸入和輸出 String utf8File = "test/屌絲,一個字頭的誕生.TXT.TXT"; String utf8FileResult = "test/屌絲,一個字頭的誕生.TXT_result.TXT"; int init_flag = CLibrary.Instance.NLPIR_Init(argu, charset_type, "0"); String nativeBytes = null; if (0 == init_flag) { nativeBytes = CLibrary.Instance.NLPIR_GetLastErrorMsg(); System.err.println("初始化失敗!fail reason is "+nativeBytes); return; } String sInput = "去年開始,開啟百度李毅吧,滿屏的帖子大多含有“屌絲”二字,一般網友不僅不懂這詞什麼意思,更難理解這個詞為什麼會這麼火。然而從下半年開始,“屌絲”已經覆蓋網路各個角落,人人爭說屌絲,人人爭當屌絲。 從遭遇惡搞到群體自嘲,“屌絲”名號橫空出世"; //String nativeBytes = null; try { //引數0表示不帶詞性,引數1表示帶有詞性 nativeBytes = CLibrary.Instance.NLPIR_ParagraphProcess(sInput, 0); System.out.println("分詞結果為: " + nativeBytes); //增加使用者詞典後 CLibrary.Instance.NLPIR_AddUserWord("滿屏的帖子 n"); CLibrary.Instance.NLPIR_AddUserWord("更難理解 n"); nativeBytes = CLibrary.Instance.NLPIR_ParagraphProcess(sInput, 1); System.out.println("增加使用者詞典後分詞結果為: " + nativeBytes); //刪除使用者詞典後 CLibrary.Instance.NLPIR_DelUsrWord("更難理解"); nativeBytes = CLibrary.Instance.NLPIR_ParagraphProcess(sInput, 1); System.out.println("刪除使用者詞典後分詞結果為: " + nativeBytes); // //CLibrary.Instance.NLPIR_FileProcess(utf8File, utf8FileResult,0); CLibrary.Instance.NLPIR_FileProcess(utf8File, utf8FileResult,1); int nCountKey = 0; String nativeByte = CLibrary.Instance.NLPIR_GetKeyWords(sInput, 10,false); System.out.print("關鍵詞提取結果是:" + nativeByte); nativeByte = CLibrary.Instance.NLPIR_GetFileKeyWords("test\\屌絲,一個字頭的誕生.TXT.txt", 10,false); System.out.print("關鍵詞提取結果是:" + nativeByte); CLibrary.Instance.NLPIR_Exit(); } catch (Exception ex) { // TODO Auto-generated catch block ex.printStackTrace(); } } }