1. 程式人生 > >java實現NLPIR(ICTCLAS)分詞

java實現NLPIR(ICTCLAS)分詞

       
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();
		}

	}
}