主要部分详细代码:开发工具ecliplse;

本文没有做太详细的步骤解析:

但只需要在nlpir官网,下载你需要的文件就可以了,文件包括数据源 Data 文件夹,jna.4.0.0 jar包,NLPIR.dll或者NLPIR.so 文件,这些在下载的文件内都有;

具体在哪些地方用,看代码就可以了; 写完后 写一个main方法测试一下就可以了;


1)注意的问题:加载动态链接库,注意dll文件的存放位置;一般在ecliplse 中是存放在根目录下;

2)分词的词库文件的加载,也是在ecliplse根目录下;

3)以上一直作为一般的开发下,可以调试成功;但是如果部署在服务器的系统中应用到分词;就需要根据具体情况来加载动态链接库和数据源文件;


特别注意的是:在官网下载的代码,其实数据源 Data文件夹 中的nlpir.user文件,存在系统授权过期问题,当出现这种问题时,需要在官网下载最新版本的代码,将

nlpir.user替换即可;


最近发现NLPIR的分词突然无法运行,然后出现下面的错误:

    Not valid license or your license expired! Please feel free to contact pipy_zhang@msn.com!

都说下载最新的,但是我一直以为是从官网(http://ictclas.nlpir.org/downloads)下载(之前是在官网是做更新的)。

BUT,替换了都不行。

其实现在基本上是在github上上传维护的授权文件:

也是在官网下载页面,可以看到

NLPIR分词系统下载新增github链接

下载地址:https://github.com/NLPIR-team/NLPIR  下载你想用的授权文件就可以了





import java.io.UnsupportedEncodingException; 

 import java.net.URL; 

 import java.util.Arrays; 

 import java.util.List; 

 import java.util.Properties; 



 import kevin.zhang.NLPIR; 


 import org.apache.log4j.Logger; 

 import org.openrdf.query.algebra.Str; 


 import com.sun.jna.Library; 

 import com.sun.jna.Native; 



 /** 

  * @author 卡奇派对 

  * 

  */ 

 public class Participles { 

private static Logger logger = Logger.getLogger(Participles.class); 

 // 定义接口CLibraryLinux,windows环境 (64) 

public interface CLibrary extends Library { 

// 定义并初始化接口的静态变量 

URL s = Participles.class.getClassLoader().getResource(""); 

String path = s.toString().substring(6,s.toString().indexOf("/WEB-INF")); 

 

CLibrary Instance = (CLibrary) Native.loadLibrary( 

path+"\\nlpir\\win64\\NLPIR", CLibrary.class);//此处加载动态链接库NLPIR.dll文件(此文件可在汉语分词系统官网下载) 

//指定的路径动态加载 

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

} 

// 定义接口CLibraryLinux,Linux环境(64) 

public interface CLibraryLinux extends Library { 

// 定义并初始化接口的静态变量 

CLibraryLinux InstanceLinux = (CLibraryLinux) Native.loadLibrary( 

"NLPIR", CLibraryLinux.class);//加载动态链接库NLPIR.so文件(此文件可在汉语分词系统官网下载)下面有具体详解:1.0 

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

} 



/** 

* @param str 需要获取关键词的字符串 

* @param num 最多获取关键词个数 

* @return list   
*/
//根据具体需求进行修改
 
public static List<String> getKeyWordsList(String str,int num){ 

URL s = Participles.class.getClassLoader().getResource(""); 

 String path = s.toString().substring(6,s.toString().indexOf("/WEB-INF")); 

 String argu = path+"/nlpir";//

此路径是Data文件夹的父文件夹(自定义)


List<String> keyWordsList = null; 

int charset_type = 1; 

Properties props=System.getProperties(); //获得系统属性集      

String osName = props.getProperty("os.name"); //操作系统名称      

String osArch = props.getProperty("os.arch"); //操作系统构架   

int init_flag = 0; 

if(osName.indexOf("Windows") != -1 && osArch.indexOf("64") != -1){ 

try { 

 

init_flag = CLibrary.Instance.NLPIR_Init(argu, charset_type, "0");//windows7 64 

 

} catch (Exception e) { 

logger.error("Windows 分词初始化失败"+e.getMessage()); 

} 

String nativeBytes = null; 



if (0 == init_flag) { 

nativeBytes = CLibrary.Instance.NLPIR_GetLastErrorMsg(); 

System.err.println("初始化失败!fail reason is "+nativeBytes); 

return null; 

} 

 

String nativeStr = CLibrary.Instance.NLPIR_GetKeyWords(str, num,false); 

 

String regex = " "; 

String words = nativeStr.replaceAll(regex, "#").replaceAll("###", "#"); 

keyWordsList = Arrays.asList(words.split("#")); 

}else{ 

try { 

init_flag = CLibraryLinux.InstanceLinux.NLPIR_Init(argu, charset_type, "0");//Linux 64 

} catch (Exception e) { 

logger.error("Linux 分词初始化失败;"+e.getMessage()); 

} 

 

String nativeBytes = null; 



if (0 == init_flag) { 

nativeBytes = CLibraryLinux.InstanceLinux.NLPIR_GetLastErrorMsg(); 

System.err.println("初始化失败!fail reason is "+nativeBytes); 

return null; 

} 

 

String nativeStr = CLibraryLinux.InstanceLinux.NLPIR_GetKeyWords(str, num,false); 

 

String regex = " "; 

String words = nativeStr.replaceAll(regex, "#").replaceAll("###", "#"); 

keyWordsList = Arrays.asList(words.split("#")); 

} 

 

return keyWordsList; 

} 

 

}

详解1.0:


在Linux环境下nlpir.so文件的存放主要有3种方法:
1. 用ln将需要的so文件链接到/usr/lib或者/lib这两个默认的目录下边


ln -s /where/you/install/lib/*.so /usr/lib


sudo ldconfig


2.修改LD_LIBRARY_PATH


export LD_LIBRARY_PATH=/where/you/install/lib:$LD_LIBRARY_PATH


sudo ldconfig


3.修改/etc/ld.so.conf,然后刷新



vim /etc/ld.so.conf


add /where/you/install/lib


sudo ldconfig




以上作为参考,个人认为已经解释的很清楚了,毕竟具体情况具体分析,这些相信都没问题,都是小问题;