在文件数据挖掘处理技术中,如何从文本数据中抽取有价值的信息和知识是一个重要的数据挖据分支,是机器学习、自然语言处理、数理统计的基础技术之一,是信息检索,机器学习,AI智能等高端技术的的底层技术支持之一。

Graccvs组件智能分析提取其他各种文件中文本,为自然语言信息检索,机器学习等高端技术提供底层支持的技术组件,是Lucene/CLucene, Elasticsearch, Sphinx等全文检索工具,OA, ERP, CRM,网盘,文件管理等其他系统提供文件摘要及搜索前置服务。同时也可以为安全网关,邮件内容监控,内网安全等系统提供文件搜索及监控服务底层技术支持。

组件支持常见各种文件格式”.pdf", ".doc", ".odt", ".docx", ".dotm", ".docm", ".wps", ".xls", ".xlsx", ".xlsm", ".xltm", ".et", ".ppt", ".pptx", ".potm", ".pptm", ".ppsm", ".dps", ".ofd"(电子发票版式文件), ".rtf",".html", ".htm", ".mht", ".mhtml", ".eml", ".emmx", "xmind", "gmind", ".chm", ".zip" 等。组件速度快,效率高,调用非常简单。

Graccvs组件是以so格式动态链接库方式调用的,点击这里下载So动态链接库 ,函数详细说明和调用示例点击这里参考或者下载工程包。

调用过程:

1:安装JAVA,设置系统路径。
2:下载 Native 包(jna-jpms-5.9.0.jar 和 jna-platform-jpms-5.9.0.jar)或者使用示例包中的jar文件。
    地址: https://github.com/java-native-access/jna。
    注意:版本不同,包的名称不同,以下载后的包名称为准。
3:创建测试文件夹。
    /lib, 保存jar包 jna-jpms-5.9.0.jar 和 jna-platform-jpms-5.9.0.jar。
    /src,放源码 LibGraccvs.java,testMain.java。
4:拷贝 graccvs.so 到工程 执行文件输出位置,或者到操作系统 /usr/lib/ 文件夹下。
5、编译工程文件
    javac -d . -sourcepath src -cp lib/jna-jpms-5.9.0.jar src/*
6、运行class 文件
    java -cp .:lib/jna-jpms-5.9.0.jar graccvsTest/TestMain

主要代码单元 LibGraccvs.java (函数的定义):

package graccvsTest;import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Pointer;public interface LibGraccvs extends Library {@SuppressWarnings("deprecation")LibGraccvs INSTANCE = (LibGraccvs) Native.loadLibrary("graccvs.so", LibGraccvs.class);//----------------------以下为函数说明----------------------// 加载DLL,设置动态库需要的临时文件夹,且对此文件夹要有读写权限void Load(Pointer tempDir); /*注册软件:方式1:输入参数,corp为公司名称licText为注册码方式2:把授权文件grauth.lic保存到动态库相同文件夹,调用TAuth函数(corp, licText都为空)系统自动加载grauth.lic返回值:0:免费版本许可为空1:许可正常2:序列号(公司授权名称)错误3:加密数据格式错误4:许可过期5:许可验证错误6:无效的许可7:未知错误注1:如果注册失败,系统变为免费版本注2:免费版也需要调用此函数,corp和licText都为空*/int Auth(Pointer corp, Pointer licText);// 提供文件正文,并保存到目标文件// inFilePtr输入文件地址, outFilePtr为TXT目标文件文件地址int ToTextFile(Pointer inFilePtr, Pointer outFilePtr);//其他一个文件的正文,返回UTF-8字符串指针//注意,调用此函数需要使用FreeString释放指针内存Pointer ToString(Pointer inFilePtr);//得到最后错误日志Pointer LastErr(); //释放ToString函数返回的指针内存void FreeString(Pointer ptr); // 提取Http/Https文件,返回字符串数据指针// url=Http/Https地址// fileExt=文件类型(比如:".pdf"),// timeout=超时设置,超过此数值系统终止下载文件。单位为毫秒,默认为0(等待文件下载直到完成)// httpParams=JSON格式header数据和cookie数据,默认为空/*   JSON格式如下:{"headers":[{名称1: 值1},{名称2: 值2},...],"cookies":[{"name": 名称(字符串), "value": 值(字符串), "expires": 有效期(整数,单位毫秒),"path": 路径(字符串), "domain": 域名(字符串)},{"name": 名称(字符串), "value": 值(字符串), "expires": 有效期(整数,单位毫秒),"path": 路径(字符串), "domain": 域名(字符串)}...]}例如:{"headers":[{"client_id": "g01x9"}, {"client_secret": "e23c89cc9fe"}, {"client_index": 10092}],"cookies":[{"name": "ga", "value": "1020", "expires":36000000, "path": "/hx/", "domain":"www.gaya-soft.cn"},{"name": "xc3", "value": "10099", "expires":240000, "path": "", "domain":""}]}*/   // 返回UTF-8编码字符串数据指针(此指针需要使用FreeString函数释放内存)Pointer HttpToString(Pointer url, Pointer fileExt, int timeout, Pointer httpParams);// 下载Http文件,并提取文本,保存到目标文件u// outfile为TXT目标文件文件地址,其他参数和HTTPTOSTRING参数相同int HttpToTextFile(Pointer url, Pointer fileExt, Pointer outfile, int timeout, Pointer httpParams);//---------------------异步批量处理相关函数---------------------// 文件提取异步任务, inFilePtr输入文件地址, outTxtFilePtr为TXT目标文件文件// 如果提取某个文件错误,则 结果文本的内容如下格式: @ErrCode:错误代码, ErrMessage:错误提示void AddTask(Pointer inFilePtr, Pointer outTxtFilePtr);// 异步提取Http文件任务,参数同 HttpToTextFile 函数void AddHttpTask(Pointer url, Pointer fileExt, Pointer outTxtFile, int timeout, Pointer httpParams);// 开始执行异步任务,返回值=1开始执行, 其他值未识别// =2 免费版不支持此功能,=3 没有可以执行的任务 ,=4 当前任务未完成int AsyncStart(); // 停止任务void AsyncStop(); // 一直等待,直到全部异步任务结束void AsyncWait(); // 得到执行异步任务的状态, =0 没开始, =1 正在处理中,=2 已中断, =99 处理完成int AsyncState();// 设置执行异步任务的CPU数量(不大于软件授权数量),返回软件授权数量int AsyncMaxProcs(int num);//---------------------异步批量处理相关函数---------------------//程序结束前调用此函数,否则释放DLL会发生错误void Unload();
}

主要代码单元 TestMain.java (提取文件正文测试):

package graccvsTest;import java.io.UnsupportedEncodingException;
import java.util.*;
import com.sun.jna.Memory;
import com.sun.jna.Pointer; public class TestMain {public enum DllErrCode { TFE_OK,TFE_UNKNOW,TFE_FILE_NOTEXIST,TFE_SAVE_ERROR,TFE_OUTSIZE,TFE_UNSUPPORTED ,TFE_ERROR_INTERFACE ,TFE_HTTP_ERR,TFE_HTTP_FILE_NULL ,TFE_LICENCE_ERR;} // 根据错误类型返回错误信息public static String codeText(DllErrCode code){ switch (code){case TFE_OK:return "ok";case TFE_UNKNOW:return "未知错误";case TFE_FILE_NOTEXIST:return "提取源文件不存在";case TFE_SAVE_ERROR:return "保存目标文件失败";case TFE_OUTSIZE:return "提取的源文件超出设置的大小范围"; case TFE_UNSUPPORTED:return "不支持的提取文件格式";case TFE_ERROR_INTERFACE:return "得到接口失败";case TFE_HTTP_ERR :return "HTTP下载文件失败";case TFE_HTTP_FILE_NULL :return "HTTP文件为空";case TFE_LICENCE_ERR:return "软件许可错误"; default:return "未知错误2";}}//字符串转指针public static Pointer getUtf8Pointer(String str){  try {byte[] data = str.getBytes("UTF-8");Pointer p = new Memory(data.length + 1);p.write(0, data, 0, data.length);p.setByte(data.length, (byte)0);return p;}catch (UnsupportedEncodingException e) {return null;}}//utf8指针转换为字符串public static String utf8pointerToString(Pointer p){  String str = p.getString(0);try {return new String(str.getBytes(), "UTF-8");  }catch (UnsupportedEncodingException e){return str;}}// ------------------------提取正文并保存为文本文件------------------------public static void testToTextFile(){  Pointer prtInFile = getUtf8Pointer("test/graccvs文件正文提取接口.pdf"); Pointer prtOutFile = getUtf8Pointer("test/grcv001.txt");  //int r = LibGraccvs.INSTANCE.ToTextFile(prtInFile, prtOutFile);  DllErrCode code = DllErrCode.values()[r];  if (code != DllErrCode.TFE_OK){// 得到错误方式1: 根据R值调用函数ErrText得到具体错误信息, 此方式速度快 String err = codeText(code);System.out.println("error from code:" + err); // 方式2:调用DLL函数,得到具体错误信息, 此方式错误信息更加准确Pointer p = LibGraccvs.INSTANCE.LastErr();String err2 = utf8pointerToString(p);System.out.println("error from dll lastErr:" + err2);}System.out.println("to text ok!");}// ------------------------提取正文,返回字符串指针------------------------public static void testToString(){  Pointer prtInFile = getUtf8Pointer("test/简可信模板OCR识别工具帮助.docx");   Pointer prtOutStr = LibGraccvs.INSTANCE.ToString(prtInFile); try{String s = utf8pointerToString(prtOutStr);System.out.println(s);}finally{LibGraccvs.INSTANCE.FreeString(prtOutStr); //调用此函数释放字符串内存,否则会导致内存泄漏}}// ------------------------HTTP提取正文并保存为文本文件------------------------public static void testHttpToTextFile(){  Pointer prtUrl = getUtf8Pointer("https://www.gaya-soft.cn/dfs/v2/简可信模板OCR识别工具帮助.docx"); Pointer prtExt = getUtf8Pointer(".docx"); Pointer prtOutFile = getUtf8Pointer("test/out002.txt");// 调用DLL函数得到文件正文int r = LibGraccvs.INSTANCE.HttpToTextFile(prtUrl, prtExt, prtOutFile, 0, null);DllErrCode code = DllErrCode.values()[r];//TFE_OK为提取完成,其他code调用codeText返回相同错误if (code != DllErrCode.TFE_OK){  System.out.println("error from code, " + codeText(code)); }else{ System.out.println("testHttpToTextFile end"); }}// ------------------------HTTP提取正文,返回字符串指针------------------------public static void testHttpToString(){ Pointer prtUrl = getUtf8Pointer("https://www.gaya-soft.cn/dfs/v2/graccvs文件正文提取接口.pdf"); Pointer prtExt = getUtf8Pointer(".pdf"); String  params = "{\"headers\":[{\"client_id\": \"g01x9\"}, {\"client_secret\": \"e23c89cc9fe\"}], \"cookies\":[{\"name\": \"ga\", \"value\": \"1020\", \"expires\":36000000, \"path\": \"/\"}]}";Pointer prtParams = getUtf8Pointer(params); int timeout = 60 * 1000; //超时设置,单位毫秒, 默认为0//Pointer prtOutStr = LibGraccvs.INSTANCE.HttpToString(prtUrl, prtExt, timeout, prtParams);try{ String s = utf8pointerToString(prtOutStr);System.out.println(s); }finally{LibGraccvs.INSTANCE.FreeString(prtOutStr); // 务必调用函数释放字符串内存}}// ---------------异步批量文件提取,适合多线程处理很多文件---------------// 文件提取任务 public static void asyncAddTask(){   // -----可以增加N个任务    Pointer prtInFile = getUtf8Pointer("test/graccvs文件正文提取接口.pdf"); Pointer prtOutFile = getUtf8Pointer("test/asyncOut001.txt"); LibGraccvs.INSTANCE.AddTask(prtInFile, prtOutFile); // 一个文件任务Pointer prtInFile2 = getUtf8Pointer("test/Adobe Intro.ofd"); Pointer prtOutFile2 = getUtf8Pointer("test/asyncOut002.txt"); LibGraccvs.INSTANCE.AddTask(prtInFile2, prtOutFile2); // 一个文件任务}// Http文件提取任务 public static void asyncAddHttpTask(){// 可以增加N个任务 Pointer prtUrl = getUtf8Pointer("https://www.gaya-soft.cn/dfs/v2/简可信模板OCR识别工具帮助.docx");Pointer prtExt = getUtf8Pointer(".docx"); Pointer prtOutFile = getUtf8Pointer("test/asyncOut003.txt");  int timeout = 90 * 1000; //超时设置,单位毫秒, 默认为0LibGraccvs.INSTANCE.AddHttpTask(prtUrl, prtExt, prtOutFile, timeout, null);}// 方式1:开始任务,等待全部任务完成public static void asyncRun1(){  // 开始任务int r = LibGraccvs.INSTANCE.AsyncStart(); if (r == 1){  LibGraccvs.INSTANCE.AsyncWait(); // 等待任务全部结束System.out.println("方式1 -- 任务完成"); }else if (r == 2){System.out.println("免费版不支持此功能");}else if (r == 3){System.out.println("没有可以执行的任务");}else if (r == 4){System.out.println("当前任务未完成");}}// 方式2:判断执行情况,超时退出,主动结束任务public static void asyncRun2()  {// 开始任务boolean isOver = false;int r = LibGraccvs.INSTANCE.AsyncStart(); if (r == 1){Date startDt = new Date(); // 5分钟后结束任务while((new Date()).getTime() - startDt.getTime() < 5 * 60 * 1000){ // 判断任务情况, =0 没开始, =1 正在处理中,=2 已中断, =99 处理完成int x = LibGraccvs.INSTANCE.AsyncState();if (x == 1){try{Thread.sleep(500); }catch(InterruptedException e){ }}else if (x == 99){isOver = true; // 处理完成break;}else{break;}}//if (!isOver){LibGraccvs.INSTANCE.AsyncStop(); // 结束任务 }   System.out.println("方式2 -- 任务完成"); }else if (r == 2){System.out.println("免费版不支持此功能");}else if (r == 3){System.out.println("没有可以执行的任务");}else if (r == 4){System.out.println("当前任务未完成");}}public static void asyncTest(){//LibGraccvs.INSTANCE.AsyncMaxProcs(8); // 同时运行8个任务//asyncAddTask();     // 文件提取任务 asyncAddHttpTask(); // Http文件提取任务// 执行任务--方式1asyncRun1();// 执行任务--方式2asyncAddTask();asyncAddHttpTask();asyncRun2();}// ---------------异步批量文件提取,适合多线程处理很多文件---------------//public static void main(String[] args) { Pointer prtPath = getUtf8Pointer("test");// 提取文本需要的临时文件夹,且对此文件夹要有读写权限LibGraccvs.INSTANCE.Load(prtPath);// 设置软件许可,免费版都为空Pointer corp = getUtf8Pointer("gaya-soft.cn");Pointer licTxt = getUtf8Pointer("f5683cade1696ad3a1");LibGraccvs.INSTANCE.Auth(corp, licTxt);// 提取正文并保存为文本文件testToTextFile(); //// 提取正文,返回字符串指针testToString();// 提取HTTP提取正文, 并保存为文本文件testHttpToTextFile();// 提取HTTP提取正文, 返回字符串指针testHttpToString();// 异步批量文件提取测试asyncTest();//LibGraccvs.INSTANCE.Unload();//String s2 = "over!";System.out.println(s2);}
}

以上为调用的示例代码,输入的文件名称变量修改为程序需要的文件名称即可。具体参考网站详细帮助。

Linux + JAVA得到各种格式的文件正文(office文件,PDF,邮件,html,zip等)相关推荐

  1. Linux 平台下如何使用GCC得到各种格式的文件正文(office文件,PDF,邮件,html,zip等)

    在文件数据挖掘处理技术中,如何从文本数据中抽取有价值的信息和知识是一个重要的数据挖据分支,是机器学习.自然语言处理.数理统计的基础技术之一,是信息检索,机器学习,AI智能等高端技术的的底层技术支持之一 ...

  2. Android系统中如何得到各种格式的文件正文(office文件,PDF,邮件,html,zip等)

    在Android平台下,办公系统,ERP,CRM等开发过程中,需要对Doc, docx, xls, xlsx, ppt, ppts, pdf, html等各种格式的文件内容进行搜索和查找,实现这些格式 ...

  3. Windows+GCC得到各种格式的文件正文(office文件,PDF,邮件,html,zip等)

    Graccvs组件智能分析提取其他各种文件中文本,为自然语言信息检索,机器学习等高端技术提供底层支持的技术组件,是Lucene/CLucene, Elasticsearch, Sphinx等全文检索工 ...

  4. 苹果IOS平台如何得到各种格式的文件正文(office文件,PDF,邮件,html,zip等)

    在文件数据挖掘处理技术中,如何从文本数据中抽取有价值的信息和知识是一个重要的数据挖据分支,是机器学习.自然语言处理.数理统计的基础技术之一,是信息检索,机器学习,AI智能等高端技术的的底层技术支持之一 ...

  5. JAVA文件搜索过程中如何得到各种文件内容(office文件,PDF,邮件,mht,思维导图等)

    现在流行的搜索引擎 Lucene, Elasticsearch处理文件搜索时一般使用 tika,使用tika 处理文件正文搜索还好,但搜索结果显示正文等操作不是很方便,并且tika提取正文的速度比较慢 ...

  6. xp文件夹怎么设置密码?压缩文件及Office文件加密方法

    怎么给文件夹设置密码?相信很多朋友都说使用专门的加密软件吧,今天小编教大家不需使用任何软件就可对文件夹进行加密设置,下面一起来看看是如何对文件夹进行加密的吧! 文件夹设置密码方法: 1.进入要进行加密 ...

  7. java 将doc格式的文档转化为pdf格式(实现Word文件预览)

    doc格式的文档要实现预览功能,首先要将文档转化为pdf格式的文档 doc文档转pdf文档步骤 导入jar包 将aspose-words-jdk16-14.6.0.0.jar包导入项目中: 创建一个格 ...

  8. java 产生p10证书_【国密SM2算法】JAVA创建pkcs10格式的csr证书请求文件

    代码: public static void main(String[] args) throws Exception { Security.addProvider(new org.bouncycas ...

  9. VC语言文件正文分析器--支持格式常用文件格式

    Graccvs文件正文提取开发组件支持各种文件提取正文,为OA,ERP,CRM系统使用文件提供文件正文使用和搜索,支持常见各种文件格式".pdf", ".doc" ...

最新文章

  1. Apache,Nginx,Lighttpd分别使用X-sendfile功能提升文件下载性能
  2. Python语言程序设计之Python3 SMTP发送邮件
  3. ipad能安装python么_ipad能下载python么
  4. python 递归函数_Python尚学堂高淇|P82P86面向对象和面向过程的区别LEGB规则nonlocal_global递归函数阶乘计算案例...
  5. JAVA的嵌入式脚本开发(中)
  6. python课程笔记_Python课程笔记(一)
  7. 1.2 如何在visual studio 中建立C#程序
  8. python软件是什么原因引起的_Python对程序员重要的原因在哪里?
  9. 人工智能之语音识别技术【科普】
  10. ZMQ源码阅读 ---- zmq创建线程的过程
  11. python最简单的爬取邮箱地址怎么写_用python60行代码写一个简单的笔趣阁爬虫!三分一章?...
  12. 绝地求生透视辅助视频
  13. ArcGIS | 02小技巧-三调地类转换
  14. 001 第一季:SpringBoot2核心技术
  15. CH340国产USB转异步串口芯片替代CP2102对比CH340C与CH340G
  16. Electron使用sqlite3 出现install aws-sdk和_handle的解决方案!
  17. 王者荣耀用什么开发的
  18. 想进国企央企,一定要保存好所有工作履历证明材料,包括劳动合同、离职证明、社保记录等!...
  19. 人人都在用的机器学习算法-决策树
  20. 记录一次net.ipv4.tcp_tw_recycl快速回收机制导致的tcp连接失败问题

热门文章

  1. 爱科赛博冲刺科创板:拟募资3.8亿 陕西集成电路与达晨是股东
  2. 内容推荐场景中自监督学习的应用
  3. 【MySQL基础攻难1】聚集函数和分组查询
  4. 华为注册“花瓣编程”,释放了什么信号?
  5. poj_1363_Rai
  6. 笔记本电脑开wifi设置
  7. 「小程序JAVA实战」微信小程序简介(一)
  8. CNN的Python实现——第四章:卷积神经网络的结构
  9. safari隐私模式下LocalStorage无法使用
  10. 手写签名更改为透明背景png图片