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

NLPIR分词系统,前身是2000年发布的ICTCLAS,2009年更为现名。张华平博士打造。

实现步骤

1、在Netbeans中,文件→新建项目→java→java应用程序;项目名称:CWordSeg;
    2、将NLPIR文件下…\sample\JnaTest_NLPIR\src\code中NlpirTest.java里的代码拷贝到CWordSeg.java里面;

初步修改代码为下图所示:

(1)将package包声明修改为cwordseg;
    (2)将类名NlpirTest重命名重构为CWordSeg;
    方法:右键CwordSeg.java→重构→重命名,改名为CWordSeg→重构;

如果只是直接修改代码里的类名,则仍然需要进行重构,否则运行时会报错:找不到主类CWordSeg。
    (3)import utils.SystemParas; 未用到,暂时注释掉。

3、将NLPIR文件下…\sample\JnaTest_NLPIR\src下的utils文件夹直接拷贝到项目CWordSeg的src文件夹中;

4、将NLPIR文件下…\sample\JnaTest_NLPIR\lib下的jna-4.0.0.jar导入到工程库中;
    方法(1):右键库→添加JAR→选择jna-4.0.0.jar导入;
    方法(2):直接复制jna-4.0.0.jar文件到工程…\CWordSeg\lib文件夹下。
    导完之后工程目录如下:

5、在工程CWordSeg文件夹中新建文件夹file:
    (1)将NLPIR中的Data文件夹全部拷贝到file文件夹中;
    (2)将…\lib\win64文件夹也全部拷贝到file文件夹(注意:如果是win32或linux请选择对应的文件夹)。

6、修改部分代码2:
    (1)修改文件NLPIR.dll所在的路径,它在第5步中拷入的win64文件夹中,例如:
    D:\\NetBeansProjects\\CWordSeg\\file\win64\\NLPIR
    注意:最后的NLPIR是文件名,不要加后缀.dll。
    附:已经试验过,如果是64位操作系统,使用32位的文件将会报错。

(2)修Data文件夹所在的路径(即第5步中的Data文件夹),如下图所示:
    D:\\NetBeansProjects\\CWordSeg\\file

(3)其他可以更改的地方:
    编码格式:int charset_type = 1; 改为其它值。
    其中:GBK对应0,UTF-8对应1,BIG5对应2,含繁体字的GBK对应3。

简化后代码如下

  1.  package cwordseg;  
    
     import java.io.UnsupportedEncodingException;
    // import utils.SystemParas;
    import com.sun.jna.Library;
    import com.sun.jna.Native; /**
    *
    * 功能:基本的分词功能
    * 最后更新时间:2016年3月14日 21:01:21
    */ public class CWordSeg {
    // 定义接口CLibrary,继承自com.sun.jna.Library
    public interface CLibrary extends Library {
    // 定义并初始化接口的静态变量,用于加载NLPIR.dll,路径指向文件NLPIR.dll,但不加后缀dll
    CLibrary Instance = (CLibrary) Native.loadLibrary("D:\\NetBeansProjects\\CWordSeg\\file\\win64\\NLPIR",CLibrary.class);
    // 初始化函数声明:sDataPath是初始化路径地址,包括核心词库和配置文件的路径,encoding为输入字符的编码格式
    public int NLPIR_Init(String sDataPath,int encoding,String sLicenceCode);
    // 分词函数声明:sSrc为待分字符串,bPOSTagged=0表示不进行词性标注,bPOSTagged=1表示进行词性标注
    public String NLPIR_ParagraphProcess(String sSrc,int bPOSTagged);
    // 获取最后一个错误信息的函数声明
    public String NLPIR_GetLastErrorMsg();
    // 退出函数声明
    public void NLPIR_Exit();
    } public static String transString(String aidString,String ori_encoding,String new_encoding) {
    try {
    return new String(aidString.getBytes(ori_encoding),new_encoding);
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    }
    return null;
    } public static void main(String[] args) throws Exception {
    String argu = "D:\\NetBeansProjects\\CWordSeg\\file"; // 该路径指向Data文件夹(系统核心词库)
    // String system_charset = "UTF-8";
    int charset_type = 1; // UTF-8编码模式,其它的GBK对应0,BIG5对应2,含繁体字的GBK对应3
    int init_flag = CLibrary.Instance.NLPIR_Init(argu, charset_type, "0"); // 运行初始化函数,成功则返回1,失败返回0
    String nativeBytes; // 初始化失败提示
    if (0 == init_flag) {
    nativeBytes = CLibrary.Instance.NLPIR_GetLastErrorMsg(); // 获取错误信息
    System.err.println("初始化失败!原因:"+nativeBytes);
    return;
    } String sInput = "这是一本关于信息检索的书。"; // 手工输入的字符串sInput
    try {
    nativeBytes = CLibrary.Instance.NLPIR_ParagraphProcess(sInput, 1); // 运行分词函数
    System.out.println("分词结果为: " + nativeBytes); // 输出分词结果
    CLibrary.Instance.NLPIR_Exit(); // 退出
    } catch (Exception ex) {
    // TODO Auto-generated catch block
    ex.printStackTrace();
    }
    }
    }

运行结果

出错解决:找不到主类CWordSeg

在第2步中修改了类名,需要用正确的方法修改,或者通过重构修正。

1---------java调用NLPIR(ICTCLAS2016)实现分词功能的更多相关文章

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

    NLPIR工具 支持自定义词表: 可以离线使用: 下载地址:http://ictclas.nlpir.org/newsdownloads?DocId=389 在线演示:http://ictclas.n ...

  2. 2------------NLPIR(ICTCLAS2016)分词系统添加用户词典功能

    备注:win7 64位系统,netbeans编程 基本代码框架参见我的另一篇文章:NLPIR分词功能 代码实现: package cwordseg; import java.io.Unsupporte ...

  3. Atitit java c# php c++ js跨语言调用matlab实现边缘检测等功能attilax总结

    Atitit java c# php c++ js跨语言调用matlab实现边缘检测等功能attilax总结 1.1. 边缘检测的基本方法Canny最常用了1 1.2. 编写matlab边缘检测代码, ...

  4. 将封装了envi功能的IDL类导出成java类,方便java调用

    目的:     用IDL将ENVI的功能封装成为IDL的类,并使用IDL的对象导出功能把这些功能类导出为java类,方便java调用.(本来想直接通过GP工具调用的,但是没有授权文件)   操作步骤: ...

  5. xmlrpc实现bugzilla api调用(无会话保持功能,单一接口请求)

    xmlrpc实现bugzilla4   xmlrpc api调用(无会话保持功能,单一接口请求),如需会话保持,请参考我的另外一篇随笔(bugzilla4的xmlrpc接口api调用实现分享: xml ...

  6. Java调用C/C++编写的第三方dll动态链接库(zz)

    这里主要用的方法是JNI.在网上查资料时看到很多人说用JNI非常的复杂,不仅要看很多的文档,而且要非常熟悉C/C++编程.恐怕有很多人在看到诸如此类的评论时已经决定绕道用其他方法了.本文将做详细的介绍 ...

  7. Rsession让Java调用R更简单

    Rsession让Java调用R更简单 R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒. ...

  8. java 调用webservice的各种方法总结

    java 调用webservice的各种方法总结 几种流行的开源WebService框架Axis1,Axis2,Xfire,CXF,JWS比较 方法一:创建基于JAX-WS的webservice(包括 ...

  9. paip.java 调用c++ dll so总结

    paip.java 调用c++ dll so总结 ///////JNA (这个ms sun 的) 我目前正做着一个相关的项目,说白了JNA就是JNI的替代品,以前用JNI需要编译一层中间库,现在JNA ...

随机推荐

  1. php中数组遍历改值

    <?php $arr = array(100, 99, 88, 77, 55, 66); //方法1 foreach ($arr as &$v) { $v = 2; } print_r( ...

  2. Android 亮度调节

    最近在做一个App的设置项,亮度调节.真正做时,发现Android亮度调节比预想要复杂一些.其实目前网上已有不少这方面的资料,但有些博文具有一定误导性.在此将这块内容按照自己理解整理一下. 整体上看, ...

  3. .NET ORM 的 “SOD蜜”--零基础入门篇

    PDF.NET SOD框架不仅仅是一个ORM,但是它的ORM功能是独具特色的,我在博客中已经多次介绍,但都是原理性的,可能不少初学的朋友还是觉得复杂,其实,SOD的ORM是很简单的.下面我们就采用流行 ...

  4. Julius JS – 最流行的网页语音识别库

    JuliusJS 是用于在网页中的语音识别库.这是 Julius(由日本京都大学和日本IPA联合开发的一个实用高效双通道的大词汇连续语音识别引擎)的 JavaScript 实现.它实时侦听用户的语音并 ...

  5. Web安全攻防-----TCP/IP安全篇

    知识点: 掌握TCP/IP的体系分层结构 掌握TCP/IP的各一层功能特点 掌握TCP/IP的数据在各层的名称 掌握TCP/IP的体系数据的封装和解封装 1.TCP/IP协议的历史 TCP/IP的起源 ...

  6. Java Collection Framework概述

    文章出自:听云博客 Collection概述 Java collection是java提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映射等. Java集合主要可以划分为4个部分:Li ...

  7. C语言中的复合类型

    复合类型 一.掌握的类型 1. 指针数组 int * arr[10]; //arr是一个数组,有10个元素,每个元素都是一个指针,即arr是一个指针数组 int a,b,c,d; arr[0] = & ...

  8. ARC下内存泄露问题

    ARC下内存泄露问题 ARC下内存泄露问题,有需要的朋友可以参考下. iOS提供了ARC功能,很大程度上简化了内存管理的代码. 但使用ARC并不代表了不会发生内存泄露,使用不当照样会发生内存泄露. 下 ...

  9. iOS 杂笔-22(万年一遇~一张图片对代理的理解)

    iOS 杂笔-22(万年一遇~一张图片对代理的理解) 建议:本博客需要对代理有一定了解方可阅读(反正我也管不到) 图片 在图片之外设置协议(没有这东西这篇博客也就是夭折了) 下面我对图片中出现的形形色 ...

  10. [Android]proguard重新编译和如何不混淆第三方jar包

    转载自:http://glblong.blog.51cto.com/3058613/1536516 一.ant安装.环境变量配置及验证 (一)安装ant 到官方主页http://ant.apache. ...