首页 > 代码库 > 中科院分词系统(NLPIR)JAVA简易教程(2014-11-12)

中科院分词系统(NLPIR)JAVA简易教程(2014-11-12)

这篇文档内容主要从官方文档中获取而来,对API进行了翻译,并依据个人使用经验进行了一些补充,鉴于能力有限、水平较低,文档中肯定存在有很多不足之处,还请见谅。

如果要用JAVA来使用NLPIR,需要通过JNA来调用NLPIR的函数来实现。下面通过具体的例子来进行说明:

首先在JAVA项目中新建一个接口,继承JNA的Library接口,在接口中定义对NLPIR一系列函数的实现(具体API可参见include文件夹中的头文件NLPIR.h)。

import com.sun.jna.Library;public interface CLibrary extends Library{    //初始化    public int NLPIR_Init(String sDataPath, int encoding, String sLicenceCode);    //对字符串进行分词    public String NLPIR_ParagraphProcess(String sSrc, int bPOSTagged);    //对TXT文件内容进行分词    public double NLPIR_FileProcess(String sSourceFilename,String sResultFilename, int bPOStagged);    //从字符串中提取关键词     public String NLPIR_GetKeyWords(String sLine, int nMaxKeyLimit,boolean bWeightOut);    //从TXT文件中提取关键词     public String NLPIR_GetFileKeyWords(String sLine, int nMaxKeyLimit,boolean bWeightOut);    //添加单条用户词典    public int NLPIR_AddUserWord(String sWord);    //删除单条用户词典    public int NLPIR_DelUsrWord(String sWord);    //从TXT文件中导入用户词典    public int NLPIR_ImportUserDict(String sFilename);    //将用户词典保存至硬盘    public int NLPIR_SaveTheUsrDic();    //从字符串中获取新词    public String NLPIR_GetNewWords(String sLine, int nMaxKeyLimit, boolean bWeightOut);    //从TXT文件中获取新词    public String NLPIR_GetFileNewWords(String sTextFile,int nMaxKeyLimit, boolean bWeightOut);    //获取一个字符串的指纹值    public long NLPIR_FingerPrint(String sLine);    //设置要使用的POS map    public int NLPIR_SetPOSmap(int nPOSmap);    //获取报错日志    public String NLPIR_GetLastErrorMsg();    //退出    public void NLPIR_Exit();    }

 

之后再新建一个类,实例化上面的接口后,就可以调用NLPIR的各个函数了。

import java.math.BigDecimal;import wordSegmentation.study.CLibrary;import com.sun.jna.Native;public class Demo {        public static void main(String[] args) throws Exception {        //初始化        CLibrary instance = (CLibrary)Native.loadLibrary(System.getProperty("user.dir")+"\\source\\NLPIR", CLibrary.class);        int init_flag = instance.NLPIR_Init("", 1, "0");        String resultString = null;        if (0 == init_flag) {            resultString = instance.NLPIR_GetLastErrorMsg();            System.err.println("初始化失败!\n"+resultString);            return;        }                        String sInput = "哎~那个金刚圈尺寸太差,前重后轻,左宽右窄,他戴上去很不舒服,"                + "整晚失眠会连累我嘛,他虽然是只猴子,但你也不能这样对他啊,官府知道会说我虐待动物的,"                + "说起那个金刚圈,啊~去年我在陈家村认识了一个铁匠,他手工精美,价钱又公道,童叟无欺,"                + "干脆我介绍你再定做一个吧!";        try {            resultString = instance.NLPIR_ParagraphProcess(sInput, 1);            System.out.println("分词结果为:\n " + resultString);                        instance.NLPIR_AddUserWord("金刚圈");            instance.NLPIR_AddUserWord("左宽右窄");            resultString = instance.NLPIR_ParagraphProcess(sInput, 1);            System.out.println("增加用户词典后分词结果为:\n" + resultString);                        instance.NLPIR_DelUsrWord("左宽右窄");            resultString = instance.NLPIR_ParagraphProcess(sInput, 1);            System.out.println("删除用户词典后分词结果为:\n" + resultString);                        instance.NLPIR_ImportUserDict(System.getProperty("user.dir")+"\\source\\userdic.txt");            resultString = instance.NLPIR_ParagraphProcess(sInput, 1);            System.out.println("导入用户词典文件后分词结果为:\n" + resultString);                        resultString = instance.NLPIR_GetKeyWords(sInput,10,false);            System.out.println("从段落中提取的关键词:\n" + resultString);                        resultString = instance.NLPIR_GetNewWords(sInput, 10, false);            System.out.println("新词提取结果为:\n" + resultString);                        Double d = instance.NLPIR_FileProcess("d:\\1.txt", "d:\\2.txt", 1);                        System.out.println("对文件内容进行分词的运行速度为: " );            if(d.isInfinite())                System.out.println("无结果");            else{                BigDecimal b = new BigDecimal(d);                System.out.println(b.divide(new BigDecimal(1000), 2, BigDecimal.ROUND_HALF_UP)+"秒");                            }            resultString = instance.NLPIR_GetFileKeyWords("D:\\3.txt", 10,false);            System.out.println("从文件中提取关键词的结果为:\n" + resultString);                                    instance.NLPIR_Exit();        } catch (Exception e) {            System.out.println("错误信息:");            e.printStackTrace();        }    }

 

中科院分词系统(NLPIR)JAVA简易教程(2014-11-12)