使用NLPIR汉语分词系统进行分词
今天嘗試了用張華平博士打造的漢語分詞系統(tǒng)進(jìn)行分詞測試,遇到了一些問題,最終還是分詞成功,首先感謝NLPIR提供的源碼及資料,現(xiàn)將使用過程中遇到的問題及解決方法分享出來,僅供參考。
NLPIR提供了多種開發(fā)接口,包括c,c#,java,python等,可用于windows和linux平臺。本次使用的語言為Java,平臺為windows10
一、下載源碼及資料
可以去官網(wǎng)下載最新的源碼及開發(fā)文檔,下載地址為http://ictclas.nlpir.org/downloads,下載后解壓文件
二、解壓后,文件夾中含有sample目錄,里面包含了c,c#,hadoop,java,python測試用例,選用java測試用例,也可新建工程。
三、完成分詞要包含Data文件夾,jna.jar,NLPIR.dll等文件,為了開發(fā)方便,將解壓文件夾根目錄下的Data文件夾拷貝到j(luò)ava工程的根目錄。解壓文件夾根目錄下的lib目錄,根據(jù)系統(tǒng)環(huán)境選擇引用庫文件,本次選擇為win64,將win64文件夾里的NLPIR文件拷貝到j(luò)ava工程文件夾下。另外還需要引用jar包,jar包已經(jīng)包含在java測試用例中了。
四、eclipse打開java工程,如果提示jar包錯誤,則重新引用jar包即可。
五、更改代碼中的路徑。
在給的測試用例中,接口代碼中,CLibrary Instance = (CLibrary) Native.loadLibrary(libpath, CLibrary.class);,libpath即為動態(tài)鏈接庫的路徑,步驟三中已經(jīng)放在工程的根目錄下,此時,libpath值應(yīng)為 “NLPIR”,即dll文件的名字,注意,不用添加".dll"。如果NLPIR.dll文件放在了sample文件夾下,則libpath值應(yīng)為 “sample/NLPIR”。在初始化代碼中,int init_flag = CLibrary.Instance.NLPIR_Init(datapath, charset_type, "0") ; datapath即為Data文件夾的路徑,此時,根據(jù)步驟三存放的位置,值應(yīng)為“./”或“”。
六、可能出現(xiàn)證書過期的情況,可以去https://github.com/NLPIR-team/NLPIR/tree/master/License下載最新的證書,下載后,解壓并復(fù)制替換Data中的文件即可
七、源碼及測試結(jié)果
源碼:
package code;
import com.sun.jna.Library;
import com.sun.jna.Native;
public class NlpirTest {
private static String libpath = "NLPIR";
private static String rootpath = "";
public interface CLibrary extends Library {
CLibrary Instance = (CLibrary) Native.loadLibrary(libpath, CLibrary.class);
public int NLPIR_Init(String sDataPath, int encoding, String sLicenceCode);
public String NLPIR_ParagraphProcess(String sSrc, int bPOSTagged);
public int NLPIR_ImportUserDict(String path);
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);
public int NLPIR_DelUsrWord(String sWord);
public String NLPIR_GetLastErrorMsg();
public void NLPIR_Exit();
}
public static void main(String[] args) throws Exception {
int charset_type = 1;
int init_flag = CLibrary.Instance.NLPIR_Init(rootpath, charset_type, "0");
String nativeBytes = null;
if (0 == init_flag) {
nativeBytes = CLibrary.Instance.NLPIR_GetLastErrorMsg();
System.err.println("init failed, reason is " + nativeBytes);
return;
}
String sInput = "山東科技大學(xué)";
try {
//分詞結(jié)果
nativeBytes = CLibrary.Instance.NLPIR_ParagraphProcess(sInput, 1);
System.out.println("分詞結(jié)果為: " + nativeBytes);
//添加詞典以后
int nItems = CLibrary.Instance.NLPIR_ImportUserDict("mykey.txt");
System.out.println(nItems);
nativeBytes = CLibrary.Instance.NLPIR_ParagraphProcess(sInput, 1);
System.out.println("增加用戶詞典后分詞結(jié)果為: " + nativeBytes);
//關(guān)鍵詞提取結(jié)果
String nativeByte = CLibrary.Instance.NLPIR_GetKeyWords(sInput, 10, false);
System.out.println("關(guān)鍵詞提取結(jié)果是:" + nativeByte);
CLibrary.Instance.NLPIR_Exit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
結(jié)果測試:
我的項目可在:git@code.csdn.net:wanna_wsl/nlpirtest.git下載,僅供參考
總結(jié)
以上是生活随笔為你收集整理的使用NLPIR汉语分词系统进行分词的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 东北天到ecef的变换_GNSS学习笔记
- 下一篇: python变量名可以包含的字符有问号吗