今天尝试了用张华平博士打造的汉语分词系统进行分词测试,遇到了一些问题,最终还是分词成功,首先感谢NLPIR提供的源码及资料,现将使用过程中遇到的问题及解决方法分享出来,仅供参考。
NLPIR提供了多种开发接口,包括c,c#,java,python等,可用于windows和linux平台。本次使用的语言为Java,平台为windows10
一、下载源码及资料
可以去官网下载最新的源码及开发文档,下载地址为http://ictclas.nlpir.org/downloads,下载后解压文件
二、解压后,文件夹中含有sample目录,里面包含了c,c#,hadoop,java,python测试用例,选用java测试用例,也可新建工程。
三、完成分词要包含Data文件夹,jna.jar,NLPIR.dll等文件,为了开发方便,将解压文件夹根目录下的Data文件夹拷贝到java工程的根目录。解压文件夹根目录下的lib目录,根据系统环境选择引用库文件,本次选择为win64,将win64文件夹里的NLPIR文件拷贝到java工程文件夹下。另外还需要引用jar包,jar包已经包含在java测试用例中了。
四、eclipse打开java工程,如果提示jar包错误,则重新引用jar包即可。
五、更改代码中的路径。
在给的测试用例中,接口代码中,CLibrary Instance = (CLibrary) Native.loadLibrary(libpath, CLibrary.class);,libpath即为动态链接库的路径,步骤三中已经放在工程的根目录下,此时,libpath值应为 “NLPIR”,即dll文件的名字,注意,不用添加".dll"。如果NLPIR.dll文件放在了sample文件夹下,则libpath值应为 “sample/NLPIR”。在初始化代码中,int init_flag = CLibrary.Instance.NLPIR_Init(datapath, charset_type, "0") ; datapath即为Data文件夹的路径,此时,根据步骤三存放的位置,值应为“./”或“”。
六、可能出现证书过期的情况,可以去https://github.com/NLPIR-team/NLPIR/tree/master/License下载最新的证书,下载后,解压并复制替换Data中的文件即可
七、源码及测试结果
源码:
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 = "山东科技大学";
try {
//分词结果
nativeBytes = CLibrary.Instance.NLPIR_ParagraphProcess(sInput, 1);
System.out.println("分词结果为: " + nativeBytes);
//添加词典以后
int nItems = CLibrary.Instance.NLPIR_ImportUserDict("mykey.txt");
System.out.println(nItems);
nativeBytes = CLibrary.Instance.NLPIR_ParagraphProcess(sInput, 1);
System.out.println("增加用户词典后分词结果为: " + nativeBytes);
//关键词提取结果
String nativeByte = CLibrary.Instance.NLPIR_GetKeyWords(sInput, 10, false);
System.out.println("关键词提取结果是:" + nativeByte);
CLibrary.Instance.NLPIR_Exit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
结果测试:
我的项目可在:git@code.csdn.net:wanna_wsl/nlpirtest.git下载,仅供参考