java实现NLPIR(ICTCLAS)分词

1、NLPIR简介

        NLPIR汉语分词系统(又名ICTCLAS2013),主要功能包括中文分词;词性标注;命名实体识别;用户词典功能;支持GBK编码、UTF8编码、BIG5编码。新增微博分词、新词发现与关键词提取;张华平博士先后倾力打造十余年,内核升级10次。

    下载地址:http://ictclas.nlpir.org/downloads

 

2、目录介绍

    

     ReadMe:介绍

     Data:  系统核心词库

     doc:  文档,用法介绍

     include:系统头文件

     sample:NLPIR示例程序

     lib:   不同环境下的支撑库

     test:  测试数据

     bin:  ICTCLAS2014----------->分词系统
                           ICTCLAS-tools.exe-->分词的支撑工具,可用于测试,本处主要用来做用户词典导入
                           importuserdict.bat-->可将用户词典自动导入到系统内
                           NLPIR.dll-->Win32下的支撑动态链接库,其他环境的库,可以访问lib对应环境的库文件
                           NLPIR.lib
                           NLPIR_WinDemo.exe-->Win32下的演示程序,在Win8 32位下编译而成,部分环境可能不支持,或者显示异常

                          userdic.txt-->用户词典,用户可以自行编辑

 

 3、java代码  

       3.1  新建工程fenci导入lib库文件(sample\JnaTest_NLPIR\lib\jna-4.0.0.jar) 

       3.2  将sample\JnaTest_NLPIR\src\目录下文件复制到工程src直接使用

       

       3.3  修改代码        

       
package com.code;

import java.io.UnsupportedEncodingException;

import utils.SystemParas;

import com.sun.jna.Library;
import com.sun.jna.Native;

public class test1 {

	// 定义接口CLibrary,继承自com.sun.jna.Library
	public interface CLibrary extends Library {
		// 定义并初始化接口的静态变量 这一个语句是来加载 dll 的, 注意 dll 文件的路径
		//可以是绝对路径也可以是相对路径,只需要填写 dll 的文件名,不能加后缀
		CLibrary Instance = (CLibrary) Native.loadLibrary(
				"E:\\ICTCLAS2015\\bin\\ICTCLAS2015\\NLPIR", CLibrary.class);
		// 初始化函数声明
		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_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();
		//文件分词声明
		public void NLPIR_FileProcess(String utf8File, String utf8FileResult, int i);
	}

	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 = "E:\\ICTCLAS2015";
		//String system_charset = "GBK";//GBK----0
		String system_charset = "UTF-8";
		int charset_type = 1;
		//文件分词的输入和输出
		String utf8File = "test/屌丝,一个字头的诞生.TXT.TXT";
		String utf8FileResult = "test/屌丝,一个字头的诞生.TXT_result.TXT";

		
		int init_flag = CLibrary.Instance.NLPIR_Init(argu, charset_type, "0");
		String nativeBytes = null;

		if (0 == init_flag) {
			nativeBytes = CLibrary.Instance.NLPIR_GetLastErrorMsg();
			System.err.println("初始化失败!fail reason is "+nativeBytes);
			return;
		}

		String sInput = "去年开始,打开百度李毅吧,满屏的帖子大多含有“屌丝”二字,一般网友不仅不懂这词什么意思,更难理解这个词为什么会这么火。然而从下半年开始,“屌丝”已经覆盖网络各个角落,人人争说屌丝,人人争当屌丝。
从遭遇恶搞到群体自嘲,“屌丝”名号横空出世";

		//String nativeBytes = null;
		try {
			//参数0表示不带词性,参数1表示带有词性
			nativeBytes = CLibrary.Instance.NLPIR_ParagraphProcess(sInput, 0);

			System.out.println("分词结果为: " + nativeBytes);

			//增加用户词典后
			CLibrary.Instance.NLPIR_AddUserWord("满屏的帖子 n");
			CLibrary.Instance.NLPIR_AddUserWord("更难理解 n");
			nativeBytes = CLibrary.Instance.NLPIR_ParagraphProcess(sInput, 1);
			System.out.println("增加用户词典后分词结果为: " + nativeBytes);
			//删除用户词典后
			CLibrary.Instance.NLPIR_DelUsrWord("更难理解");
			nativeBytes = CLibrary.Instance.NLPIR_ParagraphProcess(sInput, 1);
			System.out.println("删除用户词典后分词结果为: " + nativeBytes);
			//
			//CLibrary.Instance.NLPIR_FileProcess(utf8File, utf8FileResult,0);
			CLibrary.Instance.NLPIR_FileProcess(utf8File, utf8FileResult,1);
					
					
			int nCountKey = 0;
			String nativeByte = CLibrary.Instance.NLPIR_GetKeyWords(sInput, 10,false);

			System.out.print("关键词提取结果是:" + nativeByte);

			nativeByte = CLibrary.Instance.NLPIR_GetFileKeyWords("test\\屌丝,一个字头的诞生.TXT.txt", 10,false);

			System.out.print("关键词提取结果是:" + nativeByte);

			

			CLibrary.Instance.NLPIR_Exit();

		} catch (Exception ex) {
			// TODO Auto-generated catch block
			ex.printStackTrace();
		}

	}
}

 


 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值