中科院分词系统(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();
        }

    }
时间: 2024-11-14 11:27:15

中科院分词系统(NLPIR)JAVA简易教程(2014-11-12)的相关文章

[遇见时光]中科院分词工具NLPIR,Not valid license or your license expired!

第一词运行的时候下载的版本不新,然后就报错Not valid license or your license expired!,后来在网上查了许久才发现,NLPIR经常更新,要使用最新的Data才可以. 去官网下载最新的工具包,解压后把Data替换旧的Data文件夹,再运行就不会出错了. 友情提示,如何配置NLPIR参考我二师兄的博客http://www.cnblogs.com/CheeseZH/p/4585477.html

Scrum Meeting 6 -2014.11.12

今天apec最后一天,大部分任务都差不多了,局部测试问题不大.大家修复下小细节就可以开始整合了. Member Today’s task Next task 林豪森 协助测试及服务器部署 协助测试及服务器部署 宋天舒 修复发现的分词算法bug 整合测试分词算法 张迎春 整合测试分词算法 整合测试分词算法 黄漠源 修复提取关键词算法bug 整合测试提取关键词算法 黄敬博 整合测试提取关键词算法 整合测试提取关键词算法 刘翔宇 修复文档信息提取bug 整合测试文档信息提取 叶露婷 整合测试文档信息提

2014.11.12模拟赛【美妙的数字】| vijos1904学姐的幸运数字

美妙的数字(number.c/.cpp/.pas) 题目描述 黄巨大认为非负整数是美妙的,并且它的数值越小就越美妙.当然0是最美妙的啦. 现在他得到一串非负整数,对于每个数都可以选择先对它做二进制非运算(模二意义下0.1互换,注意前导0也要交换),然后在任意相邻的两个数之间插入二进制与.二进制或,或者二进制异或.现在他想知道这样计算完产生的最美妙的数字是多少. 一共T组数据.对于每组数据,第一行一个n,表示这组数据中一串数有多少个.下面n个非负整数,表示这串数. 样例输入 2 2 3 6 3 1

2014.11.12模拟赛【最小公倍数】| vijos1047最小公倍数

最小公倍数(lcm.c/.cpp/.pas) 题目描述 给定两个正整数,求他们的最小公倍数. 样例输入 28 12 样例输出 84 数据范围 对于40%数据:1<=a,b<=10^9 对于60%的数据:1<=a,b<=10^12 对于100%数据:1<=a,b<=10^100 提示:为了略微降低题目难度,增加以下条件: 1. 输入数据保证a>=b 2. 输入数据保证a.b没有前导0 3. 输入数据保证除了在两个正整数a.b之间的空格和行末换行符以外,不存在其他非数

2014.11.12模拟赛【最大公因数】

最大公因数(gcd.c/.cpp/.pas) 题目描述 给定正整数n,求. 样例输入 6 样例输出 15 数据范围 对于40%的数据:1<=n<=1000000 对于100%的数据:1<=n<=3*10^12 提示:保证答案不超过10^18 原创题! ……好吧其实最后发现bzoj2705[longge的问题]跟这个一毛一样,但是这个数据更强 不过我真是独立yy出来的 首先,考虑gcd(i,n)==k的i有几个 显然这是等价于gcd(j,n/k)==1的j有几个,其中1<=j&

NLPIR(北理工张华平版中文分词系统)的SDK(C++)调用方法

一.本文内容简介 二.具体内容 1. 中文分词的基本概念 2.关于NLPIR(北理工张华平版中文分词系统)的基本情况 3.具体SDK模块(C++)的组装方式 ①准备内容: ②开始组装 三.注意事项 一.本文内容简介 关于中文分词的基本概念 关于NLPIR(北理工张华平版中文分词系统)的基本情况 具体SDK模块(C++版)的组装方法 二.具体内容 1. 中文分词的基本概念 中文分词是自然语言处理的一个分支,自然语言即人们在日常生活中使用的语言,包含书面语,口语,例如报纸上的一篇通讯,博客里面的一篇

Java快速教程--vamei 学习笔记(基础篇)

链接:http://www.cnblogs.com/vamei/archive/2013/03/31/2991531.html java快速教程第1课 从HelloWorld到面向对象 学习网址:http://www.cnblogs.com/vamei/archive/2013/03/14/2958654.html java快速教程第2课 方法与数据成员 学习网址:http://www.cnblogs.com/vamei/archive/2013/03/25/2964430.html java快

2014.11.9心情随笔

嗯不知不觉已经夜深了,父亲与妹妹已经入睡,而我却还守着电脑看教程. 有的时候挺迷茫的,不知道自己做的这一切是为了什么,喜欢编程吗?可我说不出来喜欢它的理由,只是单纯的觉得那一行行的代码能像当初推理一样给我带来快乐,兴奋感. 可有的时候就像老师说的,我不学习不考个好的大学做这一切有什么用呢?人活着这一辈子又是为了什么呢? 是我想太多了么?同龄人该想什么?我才初二呀,有的时候挺憎恨自己为什么想那么多. 找份安稳的工作赚钱糊口养家,这已经是我的目标了,梦想什么的早就扯淡没了. 梦想离我太遥远了吗?忘了

ZH奶酪:Java调用NLPIR汉语分词系统

NLPIR工具 支持自定义词表: 可以离线使用: 下载地址:http://ictclas.nlpir.org/newsdownloads?DocId=389 在线演示:http://ictclas.nlpir.org/nlpir/ 自然语言处理与信息检索共享平台:(nlpir相关的一些软件.文档.论文.语料库等资源)http://www.nlpir.org/ 上边这个地址写的信息比较详细丰富,但是万事开头难,很多同学不知道怎么具体应该调用?下边我就把几个步骤简单介绍一下: Step1.下载 我下