集成NLPIR语义分析汇总.docx
- 文档编号:20250583
- 上传时间:2023-04-25
- 格式:DOCX
- 页数:20
- 大小:502.54KB
集成NLPIR语义分析汇总.docx
《集成NLPIR语义分析汇总.docx》由会员分享,可在线阅读,更多相关《集成NLPIR语义分析汇总.docx(20页珍藏版)》请在冰豆网上搜索。
集成NLPIR语义分析汇总
Java集成NLPIR语义分析系统
1简介
NLPIR是一套专门针对原始文本集进行处理和加工的软件,提供了中间件处理效果的可视化展示,也可以作为小规模数据的处理加工工具。
用户可以使用该软件对自己的数据进行处理。
NLPIR分词系统前身为2000年发布的ICTCLAS词法分析系统,从2009年开始,为了和以前工作进行大的区隔,并推广NLPIR自然语言处理与信息检索共享平台,调整命名为NLPIR分词系统。
NLPIR系统支持多种编码(GBK编码、UTF8编码、BIG5编码)、多种操作系统(Windows,Linux,FreeBSD等所有主流操作系统)、多种开发语言与平台(包括:
C/C++/C#,Java,Python,Hadoop等)。
本文中,我们讨论NLPIR与JavaWeb项目的集成使用。
2源码下载
在下载时需要用TortoiseSVN工具,在checkout里输入地址:
3与web项目集成
web项目的搭建与配置在这里不在累述。
NLPIR2016版本可以使用配置文件配置需要读取的dll路径
使用配置文件时,代码中初始化接口时需要修改读取dll文件的路径。
如:
图中的nlpirpathString需要读取dll_or_so_path来获得(避免又用配置文件,有放dll到tomcatbin目录下的问题)
如果不用配置文件,则需要把用到的dll放到tomcat的bin目录下。
我们以提取文本摘要为例,讲一下集成NLPIR。
3.1加入jar包
pom.xml里加入jna包的引用
3.2拷贝Data和win64两个文件夹
把下载的源码中Data和win64两个文件夹拷贝到tomcat的bin目录下
3.3拷贝代码
拷贝src下的文件到项目下,修改包路径
3.4对方法进行简单封装
ClibraryDS.java类的代码如下,我把初始化接口的静态变量放到了自己的测试类中
packagecom.springmvc.nlpir.summary.lingjoin.summary;
importcom.sun.jna.Library;
/**
*生成摘要的组件,该组件可以自定义摘要的长度
*@authorlingjoin_zyp
*
*/
publicinterfaceCLibraryDSextendsLibrary{
//定义并初始化接口的静态变量
/**
*功能:
初始化
*@paramsPathData目录的父目录,可以直接传入""来表示寻找项目下的Data目录
*@paramnEncoding设置分词编码,只能处理相应初始编码的文件.默认为GBK。
*0:
GBK;1:
UTF-8;2:
BIG5;3:
GBK_FANTI
*@paramsLicenseCode授权码,这里直接用"0",就可以了
*@returntrue-成功;false-失败
*备注:
在进程中此函数必须在其他函数之前调用(只需执行一次)
*/
publicbooleanDS_Init(StringsPath,intnEncoding,StringsLicenseCode);
/**
*功能:
生成单文档摘要
*@paramsText文档内容
*@paramfSumRate文档摘要占原文百分比,该值最大不能超过1.00
*@paramiSumLen用户限定的摘要长度
*@parambHtmlTagRemove-[IN]是否需要对原文进行Html标签的去除
*@return
*备注:
fSumRate和iSumLen这个两个参数设置一个就可以了,例如:
*DS_SingleDoc(sText,0.00f,80);
*DS_SingleDoc(sText,0.50f,0);
*/
publicStringDS_SingleDoc(StringsText,floatfSumRate,intiSumLen,booleanbHtmlTagRemove);
/**
*退出,释放资源;进程结束前须调用它释放所占用的内存资源
*备注:
如果需要频繁的生成摘要,那么不要调用这个方法
*/
publicvoidDS_Exit();
/**
*获得错误消息
*@return错误消息
*备注:
如果初始化失败,可以用该方法输出初始化失败原因
*/
publicStringDS_GetLastErrMsg();
}
新建一个测试类,封装接口方法
packagecom.springmvc.nlpir.impl;
importjava.math.BigDecimal;
importcom.springmvc.nlpir.keyword.CLibrary;
importcom.springmvc.nlpir.summary.lingjoin.deepClassify.DeepClassifierLibrary;
importcom.springmvc.nlpir.summary.lingjoin.fileutil.OSinfo;
importcom.springmvc.nlpir.summary.lingjoin.summary.CLibraryDS;
importcom.springmvc.utils.DoProperties;
importcom.sun.jna.Native;
publicclassMyTest{
privateCLibraryinstance;
privateCLibraryDSdsInstance;
privateDeepClassifierLibrarydcInstance;
publicMyTest(){
CLibraryDSdsInstance=(CLibraryDS)Native.loadLibrary(OSinfo.getSysAndBit("LJSummary"),CLibraryDS.class);
booleanflag=dsInstance.DS_Init("",1,"0");
if(flag==false){//如果初始化失败,就打印出失败原因
System.out.println(dsInstance.DS_GetLastErrMsg());
}
StringnlpirpathString=DoProperties.properties.getProperty("dll_or_so_path");
nlpirpathString=nlpirpathString.substring(0,nlpirpathString.lastIndexOf("."));
System.out.println(nlpirpathString);
this.dsInstance=dsInstance;
CLibraryinstance=(CLibrary)Native.loadLibrary(nlpirpathString,CLibrary.class);
intinit_flag=instance.NLPIR_Init("",1,"0");
if(0==init_flag){
StringresultString=instance.NLPIR_GetLastErrorMsg();
System.err.println("初始化失败!
\n"+resultString);
}
this.instance=instance;
DeepClassifierLibrarydcInstance=
(DeepClassifierLibrary)Native.loadLibrary(OSinfo.getSysAndBit("DeepClassifier"),DeepClassifierLibrary.class);
booleandcflag=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;
}
//System.out.println(System.getProperty("user.dir"));
publicvoidsetInstance(CLibraryinstance){
this.instance=instance;
}
publicvoidsetDsInstance(CLibraryDSdsInstance){
this.dsInstance=dsInstance;
}
publicCLibraryDSgetDsInstance(){
returnthis.dsInstance;
}
publicCLibrarygetInstance(){
returnthis.instance;
}
publicDeepClassifierLibrarygetDcInstance(){
returndcInstance;
}
publicvoidsetDcInstance(DeepClassifierLibrarydcInstance){
this.dcInstance=dcInstance;
}
/**
*分词
*@paramtxt需要分词的字符串
*@parambPOSTagged是否输出词性1:
输出;0:
不输出
*/
publicString[]NLPIR_ParagraphProcess(Stringtxt,intbPOSTagged){
StringresultString=this.instance.NLPIR_ParagraphProcess(txt,bPOSTagged);
String[]arrStrings=resultString.split("");
returnarrStrings;
}
/**
*词频
*方法名称:
NLPIR_WordFreqStat
*功能描述:
*逻辑描述:
*@paramtxt
*@return:
String
*@throws:
无
*@since:
Ver1.00
*/
publicStringNLPIR_WordFreqStat(Stringtxt){
StringnativeBytes=this.instance.NLPIR_WordFreqStat(txt);
returnnativeBytes;
}
/**
*添加自定义词典
*@paramstrings用户词组
*@paramflag是否持久化true:
yes;false:
no
*/
publicvoidNLPIR_AddUserWord(String[]strings,booleanflag){
if(strings!
=null){
if(strings.length>0){
for(inti=0;i this.instance.NLPIR_AddUserWord(strings[i]); } if(flag){ this.instance.NLPIR_SaveTheUsrDic(); } }else{ System.out.println("没有需要添加的用户词典! "); } }else{ System.out.println("要添加的用户词典为空! "); } } /** *删除自定义词典 *@paramstrings删除数组 *@paramflag是否持久化1: yes;0: no */ publicvoidNLPIR_DelUsrWord(String[]strings,booleanflag){ if(strings! =null){ if(strings.length>0){ for(inti=0;i this.instance.NLPIR_DelUsrWord(strings[i]); } if(flag){ this.instance.NLPIR_SaveTheUsrDic(); } }else{ System.out.println("没有需要删除的用户词典! "); } }else{ System.out.println("要删除的用户词典为空! "); } } /** *导入用户词典 *@parampath文件路径 *@paramflag是否持久化 */ publicvoidNLPIR_ImportUserDict(Stringpath,booleanflag){ if(path! =null&&! "".equals(path)){ this.instance.NLPIR_ImportUserDict(path); if(flag){ this.instance.NLPIR_SaveTheUsrDic(); } } } /** *提取关键词 *@paramsLine需要提取关键字字符串 *@paramnMaxKeyLimit关键字最大长度 *@parambWeightOut是否输出权重 */ publicString[]NLPIR_GetKeyWords(StringsLine,intnMaxKeyLimit,booleanbWeightOut){ StringresultString=this.instance.NLPIR_GetKeyWords(sLine,nMaxKeyLimit,bWeightOut); String[]arrStrings=resultString.split("#"); returnarrStrings; } /** *提取新词 *@paramsLine *@paramnMaxKeyLimit *@parambWeightOut *@return */ publicString[]NLPIR_GetNewWords(StringsLine,intnMaxKeyLimit,booleanbWeightOut){ StringresultString=this.instance.NLPIR_GetNewWords(sLine,nMaxKeyLimit,bWeightOut); String[]arrStrings=resultString.split("#"); returnarrStrings; } /** *处理文件分词 *@paramresourcefile源文件 *@paramresultfile存储结果文件 *@parambPOStagged判断是否需要位置标记,0: 无标记;1: 有标记。 默认值为1。 *@return */ publicdoubleNLPIR_FileProcess(Stringresourcefile,Stringresultfile,intbPOStagged){ doubledouble1=this.instance.NLPIR_FileProcess(resourcefile,resultfile,bPOStagged); if(double1>0){ BigDecimalb=newBigDecimal(double1); System.out.println(b.divide(newBigDecimal(1000),2,BigDecimal.ROUND_HALF_UP)+"秒"); }else{ System.out.println("无结果"); } returndouble1; } /** *从文件中提取关键词 *@paramsTxtFile *@paramnMaxKeyLimit *@parambWeightOut *@return */ publicString[]NLPIR_GetFileKeyWords(StringsTxtFile,intnMaxKeyLimit,booleanbWeightOut){ StringresultString=this.instance.NLPIR_GetFileKeyWords(sTxtFile,nMaxKeyLimit,bWeightOut); String[]arrStrings=null; if(resultString! =null&&resultString.length()>0){ arrStrings=resultString.split("#"); } returnarrStrings; } /** *退出程序并释放所有资源和NLPIR使用的缓存数据。 */ publicvoidNLPIR_Exit(){ this.instance.NLPIR_Exit(); } /** *功能: 生成单文档摘要 *@paramsText文档内容 *@paramfSumRate文档摘要占原文百分比,该值最大不能超过1.00 *@paramiSumLen用户限定的摘要长度 *@parambHtmlTagRemove-[IN]是否需要对原文进行Html标签的去除 *@return *备注: fSumRate和iSumLen这个两个参数设置一个就可以了,例如: *DS_SingleDoc(sText,0.00f,80); *DS_SingleDoc(sText,0.50f,0); */ publicStringDS_SingleDoc(StringsText,floatfSumRate,intiSumLen,booleanbHtmlTagRemove){ Stringsummary=this.dsInstance.DS_SingleDoc(sText,fSumRate,iSumLen,bHtmlTagRemove); //CLibraryDS.Instance.DS_Exit(); returnsummary; } /** * *方法名称: DS_Exit *功能描述: *逻辑描述: *@return: void *@throws: 无 *@since: Ver1.00 */ publicvoidDS_Exit(){ this.dsInstance.DS_Exit(); } /** *文本分类 *方法名称: DC_Classify *功能描述: *逻辑描述: *@paramtxt *@return: String *@throws: 无 *@since: Ver1.00 */ publicStringDC_Classify(Stringtxt){ returnthis.dcInstance.DC_Classify(txt); } /** *加载训练结果集 *方法名称: DC_LoadTrainResult *功能描述: *逻辑描述: *@return: void *@throws: 无 *@since: Ver1.00 */ publicvoidDC_LoadTrainResult(){ this.dcInstance.DC_LoadTrainResult(); } /** *退出 *方法名称: DC_Exit *功能描述: *逻辑描述: *@return: void *@throws: 无 *@since: Ver1.00 */ publicvoidDC_Exit(){ this.dcInstance.DC_Exit(); } //退出 publicvoidexit(){ this.instance.NLPIR_Exit(); this.dsInstance.DS_Exit(); this.dcInstance.DC_Exit(); } } 3.5创建controller和service 返回jsp页面 获取摘要的controller方法,content为文本字符串 获取摘要的service方法 3.6jsp页面 textarea文本输入域 btn为功能按钮 result为结果展现区域 4测试 在上一个输入框中输入文本,点击提取摘要,结果展现为下边输入框的内容。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 集成 NLPIR 语义 分析 汇总