集成NLPIR语义分析_第1页
集成NLPIR语义分析_第2页
集成NLPIR语义分析_第3页
集成NLPIR语义分析_第4页
集成NLPIR语义分析_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java集成NLPIR语义分析系统1 简介NLPIR是一套专门针对原始文本集进行处理和加工的软件,提供了中间件处理效果的可视化展示,也可以作为小规模数据的处理加工工具。用户可以使用该软件对自己的数据进行处理。NLPIR分词系统前身为2000年发布的ICTCLAS词法分析系统,从2009年开始,为了和以前工作进行大的区隔,并推广NLPIR自然语言处理与信息检索共享平台,调整命名为NLPIR分词系统。NLPIR 系统支持多种编码(GBK 编码、UTF8 编码、BIG5 编码)、多种操作系统(Windows, Linux, FreeBSD 等所有主流操作系统)、多种开发语言与平台(包括:C/C+/C

2、#,Java,Python,Hadoop 等)。本文中,我们讨论NLPIR与Java Web项目的集成使用。2 源码下载 out里输入地址:3 与web项目集成web项目的搭建与配置在这里不在累述。NLPIR2016版本可以使用配置文件配置需要读取的dll路径使用配置文件时,代码中初始化接口时需要修改读取dll文件的路径。如:图中的nlpirpathString需要读取dll_or_so_path来获得(避免又用配置文件,有放dll到tomcat bin目录下的问题)如果不用配置文件,则需要把用到的dll放到tomcat的bin目录下。我们以提取文本摘要为例,讲一下集成NLPIR。3.1 加入

3、jar包pom.xml里加入jna包的引用3.2 拷贝Data和win64两个文件夹把下载的源码中Data和win64两个文件夹拷贝到tomcat的bin目录下3.3 拷贝代码拷贝src下的文件到项目下,修改包路径3.4 对方法进行简单封装ClibraryDS.java类的代码如下,我把初始化接口的静态变量放到了自己的测试类中package com.springmvc.nlpir.summary.lingjoin.summary;import com.sun.jna.Library;/* * 生成摘要的组件,该组件可以自定义摘要的长度 * author lingjoin_zyp * */pub

4、lic interface CLibraryDS extends Library / 定义并初始化接口的静态变量/* * 功能:初始化 * param sPath Data目录的父目录,可以直接传入""来表示寻找项目下的Data目录 * param nEncoding 设置分词编码,只能处理相应初始编码的文件.默认为GBK。 * 0:GBK;1:UTF-8;2:BIG5;3:GBK_FANTI * param sLicenseCode 授权码,这里直接用"0",就可以了 * return true - 成功;false - 失败 * 备注:在进程中此函数

5、必须在其他函数之前调用(只需执行一次) */public boolean DS_Init(String sPath, int nEncoding, String sLicenseCode);/* * 功能:生成单文档摘要 * param sText 文档内容 * param fSumRate 文档摘要占原文百分比,该值最大不能超过1.00 * param iSumLen 用户限定的摘要长度 * param bHtmlTagRemove-IN 是否需要对原文进行Html标签的去除 * return * 备注:fSumRate和iSumLen这个两个参数设置一个就可以了,例如: * DS_Sing

6、leDoc(sText, 0.00f, 80); * DS_SingleDoc(sText, 0.50f, 0); */public String DS_SingleDoc(String sText, float fSumRate, int iSumLen, boolean bHtmlTagRemove);/* * 退出,释放资源;进程结束前须调用它释放所占用的内存资源 * 备注:如果需要频繁的生成摘要,那么不要调用这个方法 */public void DS_Exit();/* * 获得错误消息 * return 错误消息 * 备注:如果初始化失败,可以用该方法输出初始化失败原因 */publ

7、ic String DS_GetLastErrMsg();新建一个测试类,封装接口方法package com.springmvc.nlpir.impl;import java.math.BigDecimal;import com.springmvc.nlpir.keyword.CLibrary;import com.springmvc.nlpir.summary.lingjoin.deepClassify.DeepClassifierLibrary;import com.springmvc.nlpir.summary.lingjoin.fileutil.OSinfo;import com.sp

8、ringmvc.nlpir.summary.lingjoin.summary.CLibraryDS;import com.springmvc.utils.DoProperties;import com.sun.jna.Native;public class MyTest private CLibrary instance;private CLibraryDS dsInstance;private DeepClassifierLibrary dcInstance;public MyTest()CLibraryDS dsInstance = (CLibraryDS) Native.loadLibr

9、ary(OSinfo.getSysAndBit("LJSummary"), CLibraryDS.class);boolean flag = dsInstance.DS_Init("", 1, "0");if (flag = false) / 如果初始化失败,就打印出失败原因System.out.println(dsInstance.DS_GetLastErrMsg();String nlpirpathString = DoPperties.getProperty("dll_or_so_path&q

10、uot;); nlpirpathString = nlpirpathString.substring(0, nlpirpathString.lastIndexOf("."); System.out.println(nlpirpathString); this.dsInstance = dsInstance; CLibrary instance = (CLibrary)Native.loadLibrary(nlpirpathString, CLibrary.class);int init_flag = instance.NLPIR_Init("", 1,

11、"0");if (0 = init_flag) String resultString = instance.NLPIR_GetLastErrorMsg(); System.err.println("初始化失败!n"+resultString); this.instance = instance;DeepClassifierLibrary dcInstance = (DeepClassifierLibrary)Native.loadLibrary(OSinfo.getSysAndBit("DeepClassifier"), DeepC

12、lassifierLibrary.class);boolean dcflag = dcInstance.DC_Init("", 1, 800, "");if (dcflag) System.out.println("deepClassifier初始化成功"); else System.out.println("deepClassifier初始化失败:" + dcInstance.DC_GetLastErrorMsg();System.exit(1);this.dcInstance = dcInstance;/Sys

13、tem.out.println(System.getProperty("user.dir");public void setInstance(CLibrary instance) this.instance = instance;public void setDsInstance(CLibraryDS dsInstance) this.dsInstance = dsInstance;public CLibraryDS getDsInstance()return this.dsInstance;public CLibrary getInstance()return this.

14、instance;public DeepClassifierLibrary getDcInstance() return dcInstance;public void setDcInstance(DeepClassifierLibrary dcInstance) this.dcInstance = dcInstance;/* * 分词 * param txt 需要分词的字符串 * param bPOSTagged 是否输出词性 1:输出;0:不输出 */public String NLPIR_ParagraphProcess(String txt,int bPOSTagged)String r

15、esultString = this.instance.NLPIR_ParagraphProcess(txt, bPOSTagged);String arrStrings = resultString.split(" ");return arrStrings;/* * 词频 * 方法名称 :NLPIR_WordFreqStat * 功能描述 : * 逻辑描述 : * param txt * return :String * throws :无 * since :Ver 1.00 */public String NLPIR_WordFreqStat(String txt)St

16、ring nativeBytes = this.instance.NLPIR_WordFreqStat(txt);return nativeBytes;/* * 添加自定义词典 * param strings 用户词组 * param flag 是否持久化 true:yes;false:no */public void NLPIR_AddUserWord(String strings, boolean flag)if(strings != null)if(strings.length > 0)for(int i=0; i<strings.length; i+)this.instan

17、ce.NLPIR_AddUserWord(stringsi);if(flag)this.instance.NLPIR_SaveTheUsrDic();elseSystem.out.println("没有需要添加的用户词典!");elseSystem.out.println("要添加的用户词典为空!");/* * 删除自定义词典 * param strings 删除数组 * param flag 是否持久化 1:yes; 0:no */public void NLPIR_DelUsrWord(String strings, boolean flag)if(

18、strings != null)if(strings.length > 0)for(int i=0; i<strings.length; i+)this.instance.NLPIR_DelUsrWord(stringsi);if(flag)this.instance.NLPIR_SaveTheUsrDic();elseSystem.out.println("没有需要删除的用户词典!");elseSystem.out.println("要删除的用户词典为空!");/* * 导入用户词典 * param path 文件路径 * param fl

19、ag 是否持久化 */public void NLPIR_ImportUserDict(String path, boolean flag)if(path != null && !"".equals(path)this.instance.NLPIR_ImportUserDict(path);if(flag)this.instance.NLPIR_SaveTheUsrDic();/* * 提取关键词 * param sLine 需要提取关键字字符串 * param nMaxKeyLimit 关键字最大长度 * param bWeightOut 是否输出权重 *

20、/public String NLPIR_GetKeyWords(String sLine, int nMaxKeyLimit, boolean bWeightOut)String resultString = this.instance.NLPIR_GetKeyWords(sLine,nMaxKeyLimit,bWeightOut);String arrStrings = resultString.split("#");return arrStrings;/* * 提取新词 * param sLine * param nMaxKeyLimit * param bWeigh

21、tOut * return */public String NLPIR_GetNewWords(String sLine, int nMaxKeyLimit, boolean bWeightOut)String resultString = this.instance.NLPIR_GetNewWords(sLine,nMaxKeyLimit,bWeightOut);String arrStrings = resultString.split("#");return arrStrings;/* * 处理文件分词 * param resourcefile 源文件 * param

22、 resultfile 存储结果文件 * param bPOStagged 判断是否需要位置标记,0:无标记;1:有标记。默认值为1。 * return */public double NLPIR_FileProcess(String resourcefile, String resultfile,int bPOStagged)double double1 = this.instance.NLPIR_FileProcess(resourcefile, resultfile, bPOStagged);if(double1 > 0)BigDecimal b = new BigDecimal(

23、double1); System.out.println(b.divide(new BigDecimal(1000), 2, BigDecimal.ROUND_HALF_UP)+"秒"); elseSystem.out.println("无结果");return double1;/* * 从文件中提取关键词 * param sTxtFile * param nMaxKeyLimit * param bWeightOut * return */public String NLPIR_GetFileKeyWords(String sTxtFile,int n

24、MaxKeyLimit, boolean bWeightOut)String resultString = this.instance.NLPIR_GetFileKeyWords(sTxtFile,nMaxKeyLimit,bWeightOut);String arrStrings = null;if(resultString != null && resultString.length() > 0)arrStrings = resultString.split("#");return arrStrings;/* * 退出程序并释放所有资源和NLPIR

25、使用的缓存数据。 */public void NLPIR_Exit()this.instance.NLPIR_Exit();/* * 功能:生成单文档摘要 * param sText 文档内容 * param fSumRate 文档摘要占原文百分比,该值最大不能超过1.00 * param iSumLen 用户限定的摘要长度 * param bHtmlTagRemove-IN 是否需要对原文进行Html标签的去除 * return * 备注:fSumRate和iSumLen这个两个参数设置一个就可以了,例如: * DS_SingleDoc(sText, 0.00f, 80); * DS_SingleDoc(sText, 0.50f, 0); */public String DS_SingleDoc(String sText, float fSumRate, int iSumLen, boolean bHtmlTagRemove)String summary = this.dsInstance.DS_SingleDoc(sText, fSumRate, iSumLen, bHtmlTagRemove);/CLibraryDS.Instance.DS_Exit();return summary;/* * * 方法名称 :DS_Exit *

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论