AI文档智能助理都是如何处理pdf的?

2023-08-10 13:42:00 浏览数 (2)

一、前言

在AI盛行的当下,基于文档的本地知识库智能问答系统已经成为当下最受AI从业者欢迎的落地方式。本文旨在收集整理当下AI应用中使用较多的处理pdf的库和开源项目,喜欢的请点赞、收藏。

附上几篇之前整理过的pdf相关的AI应用:

如何打造本地知识库——那些与Chat Pdf相关的几款开源热门跑车级应用

pdfGPT——通过AI与上传的PDF文件进行聊天

localGPT——一款100%本地布署且支持LangChain的应用

Quivr - 你的第二个大脑,由AIGC赋能

privatGPT——私有化GPT模型的全新应用

二、常用pdf工具

对于可编辑PDF而言,可以使用pdfminer、tabula(可用于表格提取)、pdfplumber等组件,对于图片型的,我们可以先获取文件里面的图片,然后使用ppstructure进行图片处理。

1. PDFminer

PDFMiner内置pdf2txt.py和dumppdf.py。但是pdf2txt.py从PDF文件中提取所有文本内容。但不能识别画成图片的文本,这需要对图片特征进行识别。对于加密的PDF你需要提供一个密码才能解析,对于没有提取权限的PDF文档你得不到任何文本。

地址:https://pdfminersix.readthedocs.io

2. pdfplumber

pdfplumber库既可以按页处理 pdf ,也可以获取页面文字以及进行提取表格等操作。

地址:https://github.com/jsvine/pdfplumber

3. pypdf2

PyPDF2是一个纯Python PDF库,可以读取文档信息(标题,作者等)、写入、分割、合并PDF文档,它还可以对pdf文档进行添加水印、加密解密等。

地址:https://pythonhosted.org/PyPDF2

4. xpdf

这个文本介绍了Xpdf,一个免费的PDF浏览器和工具包。它包括文本提取器、图片转换器、HTML转换器等工具,大部分工具都是开源的。

地址:http://www.xpdfreader.com/

5. mupdf

一个轻量级的 PDF、XPS 和电子书阅读器。MuPDF 包括一个软件库、命令行工具和各种平台的查看器。MuPDF 中的渲染器专为高质量抗锯齿图形而设计。它通过度量和间距准确地呈现文本,以在屏幕上再现印刷页面的外观。查看器小巧、快速,支持众多文档格式,如 PDF、XPS、OpenXPS、CBZ、EPUB 和 FictionBook 2。您可以使用移动查看器注释 PDF 文档和填写表格(此功能即将在桌面查看器上推出)。命令行工具允许您注释、编辑和将文档转换为其他格式,如 HTML、SVG、PDF 和 CBZ。您还可以编写使用 JavaScript 操作文档的脚本。该库采用可移植的 C 模块化编写,因此集成商可以根据需要添加和删除功能。此外,还有一个使用 JNI 的 Java 库,可在 Oracle 的 Java 和 Android 上运行。

地址:https://mupdf.com/

6. pymupdf

PyMuPDF是支持MuPDF的Python绑定。使用PyMuPDF,可以访问扩展名为“.pdf”、“.xps”、“.oxps”、“.cbz”、“.fb2”或“.epub”。对“.png”,“.jpg”,“.bmp”,“.tiff”等大约10种流行的图像格式也可以像文档一样处理。

地址:https://pypi.org/project/PyMuPDF/

7. ppstructure

PP-Structure是百度飞桨系列之PaddleOCR团队自研的智能文档分析系统,旨在帮助开发者更好的完成版面分析、表格识别等文档理解相关任务。

PP-StructureV2的主要特性如下:

•支持对图片/pdf形式的文档进行版面分析,可以划分文字、标题、表格、图片、公式等区域;•支持通用的中英文表格检测任务;•支持表格区域进行结构化识别,最终结果输出Excel文件;•支持基于多模态的关键信息抽取(Key Information Extraction,KIE)任务-语义实体识别(Semantic Entity Recognition,SER)和关系抽取(Relation Extraction,RE);•支持版面复原,即恢复为与原始图像布局一致的word或者pdf格式的文件;•支持自定义训练及python whl包调用等多种推理部署方式,简单易用;•与半自动数据标注工具PPOCRLabel打通,支持版面分析、表格识别、SER三种任务的标注。

地址:https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/ppstructure

PDF2Word

其中PDF2Word是PaddleOCR社区开发者 whjdark[1] 基于PP-StructureV2版面分析与恢复模型实现的PDF转换Word应用程序。

地址:https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.6/ppstructure/pdf2word/README.md

8. iText PDF :

它是一个SDK(Software Development Kit)工具,为开发者提供了更好的文档引擎、高低级编程能力和创建、编辑和增强PDF文档的能力。PDF(Portable Document Format)是一种可移植的文档格式,可以在各种设备和操作系统上查看和打印。iText for Java可以提高工作流程的效率。其中使用的技术术语包括SDK、PDF、文档引擎和编程能力。

iText 5官网[2],已停止维护。iText5仓库地址[3] iText 7官网[4] 。iText7仓库地址[5] iText 7 与iText 5是两个不同的体系。iText 5已经暂停维护, iText 5与iText 7都分为商业版和社区版 itxt7和itext5对比[6] 开发文档[7]

地址:https://github.com/itext/itext7,商用时注意看一下开源协议。

9. Apache PDFBox

Apache PDFBox库是用于处理PDF文档的开源Java工具。该项目允许创建新的PDF文档,操纵现有文档以及从文档中提取内容的功能。Apache PDFBox还提供了几个命令行实用程序。

•地址:https://pdfbox.apache.org/•github地址:GitHub - apache/pdfbox: Mirror of Apache PDFBox[8]•中文文档:PDFBox阅读文本[9]•示例:java解析pdf获取pdf中内容信息 - 掘金[10]

10. OpenPDF

OpenPDF[11]

OpenPDF是一个Java库,使用LGPL和MPL开源许可证。可以拥有创建和编辑PDF文件。 OpenPDF是iText的LGPL/MPL开源后继产品,它基于iText 4 svn标签的一个分支。

地址:https://github.com/LibrePDF/OpenPDF

11. x-easypdf

x-easypdf[12]

x-easypdf基于pdfbox构建而来,极大降低使用门槛,以组件化的形式进行pdf的构建。 简单易用,仅需一行代码,便可完成pdf的操作。是国人开源的一个基于Apache PDFBox的JAR包。

地址:https://gitee.com/xsxgit/x-easypdf

12. pdffigures2

它是一个基于Scala语言构建的工具,用于从学术文档中提取图形、标题、表格和章节标题,尤其专注于计算机科学领域的文档。

地址:https://github.com/allenai/pdffigures2

13. 其他

1.Jasper Report :是一个强大、灵活的报表生成工具,能够展示丰富的页面内容,并将之转换成 PDF2.Openoffice :openoffice是开源软件且能在windows和linux平台下运行,可以灵活的将word或者Excel转化为PDF文档。3.freemarker[13]:FreeMarker是一款模板引擎,可根据模板渲染内容生成pdf。

三、 Word转换为Pdf的几种方式

利用各种Office应用进行转换

•JobConverter[14] OpenOffice[15] ,支持跨平台,免费 (一般格式实现效果还行,复杂格式容易有错位)•SaveAsPDFandXPS[16] msOfficeWord jacob[17] ,仅支持Windows,免费 (完美保持原doc格式,效率最慢)

利用jar进行转换

•poi读取doc Jsoup格式化Html itext生成pdf (实现最方便,效果最差,跨平台)•jdoctopdf - Dead as of 2016-02-11 Uses Apache POI to read the Word document and iText to write the PDF•Docx4j[18] 一个基于JAXB技术的Java库,用于处理Word docx、Powerpoint pptx和Excel xlsx文件。JAXB是Java架构用于XML绑定的技术,它允许Java对象与XML数据之间进行转换。docx、pptx和xlsx是Microsoft Office套件中的文件格式,用于分别存储Word文档、Powerpoint演示文稿和Excel电子表格。该库可以帮助开发人员读取、修改和创建这些类型的文件。•docx4j-export-FO[19] ,需要依赖 plutext[20] ,已经停止对外服务。•Spire.Doc for Java[21] ,收费(免费的有限制)•itext-7-pdfoffice[22] ,收费•Aspose.Words[23] ,收费(免费的有限制)

命令行及图形工具

•OfficeToPDF[24] 这个文本是在描述一个命令行工具,可以将Microsoft Office文档转换为PDF格式。命令行工具是一种在计算机上通过命令行界面执行操作的工具。•docx2pdf[25] 这段文本介绍了如何使用Microsoft Word直接在Windows或macOS上将docx文件转换为pdf格式。在Windows上,这是通过win32com实现的,而在macOS上,则是通过JXA(JavaScript for Automation,即JS中的AppleScript)实现的。声明:上面部分内容整理自:https://mp.weixin.qq.com/s/e36JQiwKK5UaJpxgt_tajA和https://www.cnblogs.com/imzdong/p/15765737.html

References

[1] whjdark: https://github.com/whjdark [2] iText 5官网: https://kb.itextpdf.com/home/it5kb [3] iText5仓库地址: https://github.com/itext/itextpdf [4] iText 7官网: https://kb.itextpdf.com/home/it7kb [5] iText7仓库地址: https://github.com/itext/itext7 [6] itxt7和itext5对比: https://itextpdf.com/en/products/features [7] 开发文档: https://itextpdf.com/en/resources/api-documentation [8] GitHub - apache/pdfbox: Mirror of Apache PDFBox: https://github.com/apache/pdfbox [9] PDFBox阅读文本: http://www.vue5.com/pdfbox/pdfbox_reading_text.html [10] java解析pdf获取pdf中内容信息 - 掘金: https://juejin.cn/post/7231795067072954429 [11] OpenPDF: https://github.com/LibrePDF/OpenPDF [12] x-easypdf: https://gitee.com/xsxgit/x-easypdf [13] freemarker: http://freemarker.foofun.cn/ [14] JobConverter: https://sourceforge.net/projects/jodconverter/ [15] OpenOffice: https://www.openoffice.org/download/ [16] SaveAsPDFandXPS: https://www.microsoft.com/en-us/download [17] jacob: https://sourceforge.net/projects/jacob-project/ [18] Docx4j: https://github.com/plutext/docx4j [19] docx4j-export-FO: https://github.com/plutext/docx4j-export-FO [20] plutext: https://converter-eval.plutext.com/ [21] Spire.Doc for Java: https://www.e-iceblue.cn/spiredocforjavaconversion/java-convert-word-to-pdf.html [22] itext-7-pdfoffice: https://kb.itextpdf.com/home/it7kb/installation-guidelines/installing-itext-7-pdfoffice-for-java-developers [23] Aspose.Words: https://www.aspose.com/ [24] OfficeToPDF: https://github.com/cognidox/OfficeToPDF [25] docx2pdf: https://github.com/AlJohri/docx2pdf

[26] https://www.cnblogs.com/imzdong/p/15765737.html

0 人点赞