(转)NLPIR(ICTCLAS2016)分词系…

版权声明:本文为博主 http://blog.csdn.net/churximi 原创文章,未经允许不得转载,谢谢。

备注:win7 64位系统,netbeans编程

基本代码框架参见我的另一篇文章:NLPIR分词功能


代码实现

 

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. package cwordseg;  
  2.   
  3. import java.io.UnsupportedEncodingException;  
  4. // import utils.SystemParas;  
  5. import com.sun.jna.Library;  
  6. import com.sun.jna.Native;  
  7.   
  8.   
  9.   
  10. public class CWordSeg  
  11.     public interface CLibrary extends Library  
  12.         CLibrary Instance (CLibrary) Native.loadLibrary("D:\\NetBeansProjects\\CWordSeg\\file\\win64\\NLPIR",CLibrary.class);  
  13.         public int NLPIR_Init(String sDataPath,int encoding,String sLicenceCode);  
  14.         public String NLPIR_ParagraphProcess(String sSrc, int bPOSTagged);  
  15.         // 添加用户词汇  
  16.         public int NLPIR_AddUserWord(String sWord);  
  17.         // 删除用户词汇  
  18.         public int NLPIR_DelUsrWord(String sWord);  
  19.         // 保存用户词汇到用户词典  
  20.         public int NLPIR_SaveTheUsrDic();   
  21.         // 导入用户自定义词典:自定义词典路径,bOverwrite=true表示替代当前的自定义词典,false表示添加到当前自定义词典后    
  22.         public int NLPIR_ImportUserDict(String sFilename, boolean bOverwrite);   
  23.         public String NLPIR_GetLastErrorMsg();  
  24.         public void NLPIR_Exit();  
  25.      
  26.       
  27.     public static String transString(String aidString,String ori_encoding,String new_encoding)  
  28.         try  
  29.             return new String(aidString.getBytes(ori_encoding),new_encoding);  
  30.         catch (UnsupportedEncodingException e)  
  31.             e.printStackTrace();  
  32.          
  33.         return null 
  34.      
  35.       
  36.     public static void main(String[] args) throws Exception  
  37.         String argu "D:\\NetBeansProjects\\CWordSeg\\file" 
  38.         // String system_charset "UTF-8";  
  39.         int charset_type 1                 
  40.         int init_flag CLibrary.Instance.NLPIR_Init(argu, charset_type, "0");      
  41.         String nativeBytes;  
  42.   
  43.         // 初始化失败提示  
  44.         if (0 == init_flag)  
  45.             nativeBytes CLibrary.Instance.NLPIR_GetLastErrorMsg();   
  46.             System.err.println("初始化失败!原因:"+nativeBytes);  
  47.             return 
  48.          
  49.           
  50.         String sInput "这是一本关于信息检索的书,作者是南京大学的。"  
  51.         try  
  52.             nativeBytes CLibrary.Instance.NLPIR_ParagraphProcess(sInput, 1);  // 分词函数,是否标注词性  
  53.             System.out.println("原始的分词结果为: " nativeBytes);  
  54.               
  55.             // 添加两个用户词汇,此处为单个添加方法  
  56.             CLibrary.Instance.NLPIR_AddUserWord("信息检索 n");  // n为词性  
  57.             CLibrary.Instance.NLPIR_AddUserWord("南京大学 n");  
  58.             nativeBytes CLibrary.Instance.NLPIR_ParagraphProcess(sInput, 1);  
  59.             System.out.println("增加词汇后结果为: " nativeBytes);  
  60.               
  61.             CLibrary.Instance.NLPIR_DelUsrWord("南京大学");    // 删除其中一个词汇  
  62.             nativeBytes CLibrary.Instance.NLPIR_ParagraphProcess(sInput, 1);  
  63.             System.out.println("删除词汇后结果为: " nativeBytes);  
  64.               
  65.             // CLibrary.Instance.NLPIR_SaveTheUsrDic();  // 保存用户自定义词汇,建议不用  
  66.               
  67.             int nCount CLibrary.Instance.NLPIR_ImportUserDict("D:\\NetBeansProjects\\CWordSeg\\file\\adduserdict.txt",true);   
  68.             System.out.println(String.format("已导入%d个用户词汇"nCount));   
  69.             nativeBytes CLibrary.Instance.NLPIR_ParagraphProcess(sInput, 1);  
  70.             System.out.println("导入词典后结果为: " nativeBytes);  
  71.               
  72.             CLibrary.Instance.NLPIR_Exit();     // 退出  
  73.               
  74.         catch (Exception ex)  
  75.             // TODO Auto-generated catch block  
  76.             ex.printStackTrace();  
  77.          
  78.      
  79.  

添加用户词汇的函数说明

 

    用户词汇将优先用于分词。

1.

 

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. public int NLPIR_AddUserWord(String sWord);  
功能:少量词汇逐个添加

 

参数:sWord表示要添加的词汇,格式为:"自定义词汇+空格+词汇词性",空格可以是多个,也可以用Tab制表符代替;

注意事项:该函数添加的用户自定义词汇具有临时性,即只在本程序的本次运行中有效。因为从Data数据角度来看,该函数并不会修改Data文件夹的词库数据。


2.

 

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. public int NLPIR_DelUsrWord(String sWord);  
功能:少量词汇逐个删除

 

参数:sWord表示要删除的词汇,格式为:"自定义词汇"。这里没有词性

注意事项:个人不太明白该函数存在的意义,因为如果想要删除用户词汇的话,只需要将增加临时词汇的NLPIR_AddUserWord()语句注释掉或者删掉即可。该函数既不能删除下面将要提到的NLPIR_SaveTheUsrDic()函数保存的用户词汇,也不能删除NLPIR_ImportUserDict()函数批量导入的词汇。因为该函数不会对Data文件夹里的文件进行修改。


3.

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. public int NLPIR_SaveTheUsrDic();  
功能:将用户词汇保存到系统词典

 

参数:没有参数,如果保存成功,返回值为1,否则返回值为0。

注意事项:

(1)会将前面添加的所有用户词汇(不包括又删除掉的)保存到用户词典;

(2)通过该函数保存的用户词汇是永久性的,因为会修改Data文件夹里的UserDict.pdat文件,以后的分词程序都会使用已保存的用户词汇;

(3)只能保存NLPIR_AddUserWord()添加的词汇,不能保存NLPIR_ImportUserDict()导入的词汇。

停用方法:由于永久性效果,可用以下方法停用——
    方法(1):打开Data文件夹里的Configure.xml文件,将UserDict参数由on改为off;
    方法(2):用原始的UserDict.pdat文件替换掉现在的。

4.

 

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. public int NLPIR_ImportUserDict(String sFilename, boolean bOverwrite);  

 

功能:从词典文本批量导入用户词汇,返回值是添加词汇的个数。

参数

    sFilename为词典文本路径;例如:D:\\NetBeansProjects\\CWordSeg\\file\\adduserdict.txt

    bOverwrite=true表示新导入的数据将会覆盖原来的用户自定义词典;

    bOverwrite=false表示新导入的数据将会添加到原来用户自定义词典的后面(追加)。

文本词典格式:每行一个,词汇+空格+词性

 

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. 信息检索  
  2. 南京大学  
注意事项

 

(1)通过该函数导入用户词汇会修改Data文件夹里的FieldDict.pdat、FieldDict.pos文件,并会新建一个UserDefinedDict.lst文件,但是不会修改UserDict.pdat文件。所以通过这种方式导入的用户词汇,可以通过导入新的用户词典进行覆盖(bOverwrite=true),或是补充添加新词汇(bOverwrite=false)。

(2)UserDefinedDict.lst文件中记录了已经添加的用户词汇。

(3)如果设置NLPIR_ImportUserDict的参数bOverwrite=false,即新导入的数据不覆盖原有数据,则可以修改UserDefinedDict.lst里的内容(原有词汇),并同时增加新的词汇;
(4)如果设置NLPIR_ImportUserDict的参数bOverwrite=true,新导入的数据将会覆盖原有数据,此时即使修改UserDefinedDict.lst里的内容也会被新数据覆盖掉,最终只保留新导入的词汇。

(5)这种方式导入的用户词汇也是永久性的,分词效果将一直存在。

停用方法
方法1:打开Data文件夹里的Configure.xml文件,将FieldDict参数由on改为off;
方法2:导入一个空的文本词典;(导入词典可以为空)
方法3:用原始FieldDict.pdat、FieldDict.pos文件替换掉现在的,UserDefinedDict.lst可删可不删。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值