前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >用 Python 把 PDF 玩的明明白白

用 Python 把 PDF 玩的明明白白

作者头像
统计学家
发布于 2024-11-22 05:23:33
发布于 2024-11-22 05:23:33
33105
代码可运行
举报
运行总次数:5
代码可运行

大家好,我是章北海

PDF 无处不在,无论是在线形式还是印刷形式,但很少有人利用这些有用的功能或掌握这种格式的细微差别。

PDF 文档解析更不是什么新东西了,但是最近大模型、RAG 兴起,把这一块又带火了。

本文,梳理 7 个很常用的 pdf 处理、解析、翻译库、项目和资料。

如有帮助,欢迎点个 【在看】

unsetunset1、PDFMathTranslate:文档翻译神器,公式、图表都不在话下unsetunset

项目地址:`https://github.com/Byaidu/PDFMathTranslate/

简介

功能

PDF 文档翻译及双语对照

  • 📊 保留公式和图表
  • 📄 保留可索引目录
  • 🌐 支持多种翻译服务

安装

要求 Python 版本 >=3.8, <=3.12

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install pdf2zh

使用

命令行中执行翻译指令,在工作目录下生成翻译文档 example-zh.pdf 和双语对照文档 example-dual.pdf,默认使用 Google 作为翻译服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 翻译完整文档
pdf2zh example.pdf
# 翻译部分文档
pdf2zh example.pdf -p 1-3,5
# 使用指定语言翻译
pdf2zh example.pdf -li en -lo ja


# 使用 DeepL/DeepLX 翻译
# 参考 [DeepLX](https://github.com/OwO-Network/DeepLX)
# 设置环境变量构建接入点:`{DEEPL_SERVER_URL}/translate`
# - `DEEPL_SERVER_URL`(可选), e.g., `export DEEPL_SERVER_URL=https://api.deepl.com`
# - `DEEPL_AUTH_KEY`, e.g., `export DEEPL_AUTH_KEY=xxx`
pdf2zh example.pdf -s deepl



# 使用 Ollama 翻译
# 参考 [Ollama](https://github.com/ollama/ollama)
# 设置环境变量构建接入点:`{OLLAMA_HOST}/api/chat`
# - `OLLAMA_HOST`(可选), e.g., `export OLLAMA_HOST=https://localhost:11434`
pdf2zh example.pdf -s ollama:gemma2


# 使用 OpenAI/SiliconCloud/Zhipu 翻译
# 参考 [SiliconCloud](https://docs.siliconflow.cn/quickstart), [Zhipu](https://open.bigmodel.cn/dev/api/thirdparty-frame/openai-sdk)
# 设置环境变量构建接入点:`{OPENAI_BASE_URL}/chat/completions`
# - `OPENAI_BASE_URL`(可选), e.g., `export OPENAI_BASE_URL=https://api.openai.com/v1`
# - `OPENAI_API_KEY`, e.g., `export OPENAI_API_KEY=xxx`
pdf2zh example.pdf -s openai:gpt-4o



# 使用正则表达式指定需要保留样式的字体和字符
pdf2zh example.pdf -f "(CM[^RT].*|MS.*|.*Ital)" -c "(\(|\||\)|\+|=|\d|[\u0080-\ufaff])"

unsetunset2、pdf2htmlEX:PDF 转换为 HTMLunsetunset

简介

项目地址:https://github.com/pdf2htmlEX/pdf2htmlEX基于 pdf2htmlEX 的分支,将 PDF 转换为 HTML,其转换效果非常好,生成的网页和原始 PDF 几乎完全一致。

原理是利用 Chrome Headless 来渲染 PDF,然后导出为 HTML 格式,甚至连图片也被转换为了 base64 编码,因此生成的网页可以完整包含文本、字体和图片等所有内容。

功能

  • 原生 HTML 文本,具有精确的字体和位置。
  • 灵活的输出:一体化 HTML 或按需页面加载(需要 JavaScript)。
  • 文件大小适中,有时甚至比 PDF 还小。
  • 支持链接、大纲(书签)、打印、SVG 背景、Type 3 字体

安装

安装还是蛮麻烦的,照着文档一步一步操作吧

https://github.com/pdf2htmlEX/pdf2htmlEX/releases

使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pdf2htmlEX /path/to/foobar.pdf

pdf2htmlEX --help

pdf2htmlEX --zoom 1.3 pdf/test.pdf

unsetunset3、文档合并:PyMuPDFunsetunset

简介

PyMuPDF 是一个高性能的 Python 库,用于对 PDF(及其他)文档进行数据提取、分析、转换和操作。

项目地址:https://github.com/pymupdf/PyMuPDF

功能

PyMuPDF 支持多种文档格式,如 PDF、XPS、EPUB 等,而其他软件如 pikepdf、PyPDF2、pdfrw、pdfplumber/pdfminer 支持的格式相对较少。PyMuPDF 在渲染文档页面、提取文本、提取表格、提取矢量图形、绘制矢量图形、OCR 集成等方面具有优势。

安装

pip install PyMuPDF

使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pymupdf # imports the pymupdf library
doc = pymupdf.open("example.pdf") # open a document
for page in doc: # iterate the document pages
  text = page.get_text() # get plain text encoded as UTF-8

unsetunset4、文档解析:Pdfminer.sixunsetunset

简介

项目地址:https://github.com/pdfminer/pdfminer.six

功能

完全用 Python 编写。解析、分析和转换 PDF 文档。提取内容为文本、图像、html 或 hOCR。支持 PDF-1.7 规范。(差不多吧)。支持中日韩语言和竖排书写脚本。支持各种字体类型(Type1、TrueType、Type3 和 CID)。支持提取图像(JPG、JBIG2、位图)。支持各种压缩方式(ASCIIHexDecode、ASCII85Decode、LZWDecode、FlateDecode、RunLengthDecode、CCITTFaxDecode)。支持 RC4 和 AES 加密。支持 AcroForm 交互式表单提取。目录提取。标记内容提取。自动布局分析。

安装

pip install pdfminer.six

使用

pdf2txt.py example.pdf

或者

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from pdfminer.high_level import extract_text

text = extract_text("example.pdf")
print(text)

unsetunset5、文档提取:MinerUunsetunset

简介

一站式开源高质量数据提取工具,将 PDF 转换成 Markdown 和 JSON 格式。项目地址:https://github.com/opendatalab/MinerU

功能

  • 删除页眉、页脚、脚注、页码等元素,确保语义连贯
  • 输出符合人类阅读顺序的文本,适用于单栏、多栏及复杂排版
  • 保留原文档的结构,包括标题、段落、列表等
  • 提取图像、图片描述、表格、表格标题及脚注
  • 自动识别并转换文档中的公式为 LaTeX 格式
  • 自动识别并转换文档中的表格为 HTML 格式
  • 自动检测扫描版 PDF 和乱码 PDF,并启用 OCR 功能
  • 支持多种输出格式,如多模态与 NLP 的 Markdown、按阅读顺序排序的 JSON、含有丰富信息的中间格式等
  • 支持多种可视化结果,包括 layout 可视化、span 可视化等,便于高效确认输出效果与质检
  • 支持 CPU 和 GPU 环境
  • 兼容 WindowsLinux 和 Mac 平台

安装

1、安装 magic-pdf

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda create -n MinerU python=3.10
conda activate MinerU
pip install -U magic-pdf[full] --extra-index-url https://wheels.myhloli.com -i https://mirrors.aliyun.com/pypi/simple
  1. 下载模型权重文件 详细参考 https://github.com/opendatalab/MinerU/blob/master/docs/how_to_download_models_zh_cn.md
  2. 修改配置文件以进行额外配置 完成 2. 下载模型权重文件步骤后,脚本会自动生成用户目录下的 magic-pdf.json 文件,并自动配置默认模型路径。您可在【用户目录】下找到 magic-pdf.json 文件。

Tip

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
windows 的用户目录为 "C:\Users\用户名",
linux 用户目录为 "/home/用户名"
macOS 用户目录为 "/Users/用户名"

您可修改该文件中的部分配置实现功能的开关,如表格识别功能:

如 json 内没有如下项目,请手动添加需要的项目,并删除注释内容(标准 json 不支持注释)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    // other config
    "layout-config": {
        "model": "layoutlmv3" // 使用 doclayout_yolo 请修改为“doclayout_yolo"
    },
    "formula-config": {
        "mfd_model": "yolo_v8_mfd",
        "mfr_model": "unimernet_small",
        "enable": true  // 公式识别功能默认是开启的,如果需要关闭请修改此处的值为"false"
    },
    "table-config": {
        "model": "rapid_table",  // 默认使用"rapid_table",可以切换为"tablemaster"和"struct_eqtable"
        "enable": false, // 表格识别功能默认是关闭的,如果需要开启请修改此处的值为"true"
        "max_time": 400
    }
}

使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
magic-pdf --help
Usage: magic-pdf [OPTIONS]

Options:
  -v, --version                display the version and exit
  -p, --path PATH              local pdf filepath or directory  [required]
  -o, --output-dir PATH        output local directory  [required]
  -m, --method [ocr|txt|auto]  the method for parsing pdf. ocr: using ocr
                               technique to extract information from pdf. txt:
                               suitable for the text-based pdf only and
                               outperform ocr. auto: automatically choose the
                               best method for parsing pdf from ocr and txt.
                               without method specified, auto will be used by
                               default.
  -l, --lang TEXT              Input the languages in the pdf (if known) to
                               improve OCR accuracy.  Optional. You should
                               input "Abbreviation" with language form url: ht
                               tps://paddlepaddle.github.io/PaddleOCR/latest/en
                               /ppocr/blog/multi_languages.html#5-support-languages-
                               and-abbreviations
  -d, --debug BOOLEAN          Enables detailed debugging information during
                               the execution of the CLI commands.
  -s, --start INTEGER          The starting page for PDF parsing, beginning
                               from 0.
  -e, --end INTEGER            The ending page for PDF parsing, beginning from
                               0.
  --help                       Show this message and exit.


## show version
magic-pdf -v

## command line example
magic-pdf -p {some_pdf} -o {some_output_dir} -m auto

unsetunset6、布局解析:DocLayout-YOLOunsetunset

简介

基于 YOLO-v10,通过提供多样性文档预训练及适配文档检测的模型结构优化,可针对多样性文档进行实时鲁棒的检测。

项目地址:https://github.com/opendatalab/DocLayout-YOLO

安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda create -n doclayout_yolo python=3.10
conda activate doclayout_yolo
pip install -e .

注意:如果只想使用 DocLayout-YOLO 的推理功能,直接通过 pip 进行安装:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install doclayout-yolo

使用

可以通过脚本的方式或者 SDK 的方式进行推理:

脚本推理

通过以下命令运行推理脚本 demo.py 来进行推理:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python demo.py --model path/to/model --image-path path/to/image

SDK 推理

直接通过 SDK 进行模型推理:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import cv2
from doclayout_yolo import YOLOv10

# Load the pre-trained model
model = YOLOv10("path/to/provided/model")

# Perform prediction
det_res = model.predict(
    "path/to/image",   # Image to predict
    imgsz=1024,        # Prediction image size
    conf=0.2,          # Confidence threshold
    device="cuda:0"    # Device to use (e.g., 'cuda:0' or 'cpu')
)

# Annotate and save the result
annotated_frame = det_res[0].plot(pil=True, line_width=5, font_size=20)
cv2.imwrite("result.jpg", annotated_frame)

unsetunset7、pdf 文档标准:PDF Explained、PDF Cheat Sheetsunsetunset

最后再推荐俩资料,非常适合入门 PDF 及加深对其的理解

《PDF-Explained》为程序员,高级用户提供了世界领先的页面描述语言 (pdf) 的动手实践。以及搜索,电子出版和印刷行业的专业人士,有大量示例,本书是你完全理解 PDF 所需的文档。

项目地址:https://zxyle.github.io/PDF-Explained

pdf 知识卡片速查表

项目地址:https://pdfa.org/resource/pdf-cheat-sheets/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-11-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习与统计学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
SpringBoot 使用WebSocket打造在线聊天室(基于注解)
例如:webSocket.onmessage = function (event) {console.log('WebSocket收到消息:' + event.data);
好好学java
2018/10/18
2.6K0
springboot整合篇-springboot整合websocket
ServerEndpoint的实现主要针对业务领域对websocket消息进行处理,主要使用@OnOpen对websocket连接建立时需要实现的逻辑,@OnClose对websocket连接关闭时需要实现的逻辑,@OnMessage对websocket收到消息时的处理以及@OnError对websocket发生错误时的处理方式。
Java开发者之家
2021/06/17
1.9K0
SpringBoot整合WebSocket打造在线聊天室实战!!!
1、WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。
用户5224393
2019/08/13
2.5K0
SpringBoot整合WebSocket打造在线聊天室实战!!!
springboot整合websocket技术
简单来说就是一个基于TCP的持久化的网络通信协议。主要作用就是:服务端可以主动推送信息给客户端,不需要客户端重复的向服务端发请求查询。
海加尔金鹰
2020/06/09
1.1K0
性能工具之Jmeter压测WebSocket接口(一)
WebSocket是web客户端和服务器之间新的通讯方式,依然架构在HTTP协议之上。使用WebSocket连接,web应用程序可以执行实时的交互,而不是以前的poll方式。
高楼Zee
2019/07/17
3.7K0
性能工具之Jmeter压测WebSocket接口(一)
SprinBoot——SpringBoot项目WebSocket推送
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/106472.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/04
9230
netty-websocket
今天用了这个netty-websocket-spring-boot-starter
阿超
2022/08/17
8880
netty-websocket
集成websocket实现实时通信(ruoyi 使用笔记)
客户端向服务器发起 WebSocket 握手请求; 服务器返回确认信息给客户端,完成握手; 握手成功后,客户端和服务器就可以通信了; 双方可以随时发送消息到对方,也可以关闭连接。
默 语
2024/11/20
7800
集成websocket实现实时通信(ruoyi 使用笔记)
Spring Boot 集成 WebSocket,轻松实现信息推送!
在一次项目开发中,使用到了Netty 网络应用框架,以及 MQTT 进行消息数据的收发,这其中需要后台来将获取到的消息主动推送给前端,于是就使用到了MQTT,特此记录一下。
Java技术栈
2021/04/21
1.1K0
从零玩转Websocket实时通讯服务之前后端分离版本
前言 公司项目需要用到消息提示,那么WebSocket它来了经过我面向百度的学习,废话不多说直接开干. 后端搭建 一、依赖导入 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> 二、搭建websocket服务 1.WebSocke
杨不易呀
2022/01/19
1.2K0
万字详解,带你彻底掌握 WebSocket 用法(至尊典藏版)
WebSocket是一种协议,用于在Web应用程序和服务器之间建立实时、双向的通信连接。
程序员蜗牛
2024/03/29
6.3K0
万字详解,带你彻底掌握 WebSocket 用法(至尊典藏版)
SpringBoot、Vue3 整合 WebSocket
WebSocket 是一种计算机通信协议,用于在Web应用程序中实现双向通信。它允许服务器和客户端之间建立持久连接,并且可以通过单个网络套接字进行全双工通信。与传统的HTTP请求-响应模型不同,WebSocket 使用事件驱动的模式,可以实时地在服务器和客户端之间传输数据。
默存
2023/09/13
1.4K0
SpringBoot、Vue3 整合 WebSocket
WebSocket 教程 转
初次接触 WebSocket 的人,都会问同样的问题:我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处?
wuweixiang
2018/08/14
5240
WebSocket 教程
                                                                            转
服务端常用的WebSocket框架
输入命令 需要修改的 url、groupId、artifactId、version
码客说
2021/01/20
1.4K0
SpringBoot2整合WebSocket,实现后台向前端推送信息
WebSocket 协议是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。
Li_XiaoJin
2022/06/12
2.8K0
SpringBoot2整合WebSocket,实现后台向前端推送信息
WebSocket的核心事件
WebSocket整体通讯的流程就是 建立链接->发送消息->关闭链接/终止链接,这几步需要的事件Api主要就是以下几个
余生大大
2022/11/02
1.2K0
WebSocket的核心事件
传统@ServerEndpoint方式开发WebSocket应用和SpringBoot构建WebSocket应用程序
通过websocket的两种使用方式,让你更加深入理解用法。很多人不懂websocket怎么辨别是谁发送过来的,文中说到实现WebSocketConfigurer接口,定义拦截器可以绑定用户信息,还有其他很多,细细品,对比看比较好!
java思维导图
2020/05/20
9.4K0
WebSocket 双向通信
在浏览器中,JavaScript提供了WebSocket API,它使开发人员能够创建WebSocket连接、发送和接收消息。基本的WebSocket客户端API包括以下几个主要接口和方法:
.29.
2024/01/21
4110
WebSocket 双向通信
SpringBoot整合websocket
WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。
用户3467126
2019/09/04
2.2K1
SpringBoot整合websocket
Spring boot+VUE+websocket 实现消息推送
        最近涉及消息通知功能,在管理员创建发送消息时,登陆用户可以实时接收到新增消息的提醒,避免频繁刷新,通过websocket取代轮询setInterval。
用户1409099
2019/05/14
6K0
相关推荐
SpringBoot 使用WebSocket打造在线聊天室(基于注解)
更多 >
LV.1
这个人很懒,什么都没有留下~
目录
  • unsetunset1、PDFMathTranslate:文档翻译神器,公式、图表都不在话下unsetunset
    • 简介
    • 功能
    • 安装
    • 使用
  • unsetunset2、pdf2htmlEX:PDF 转换为 HTMLunsetunset
    • 简介
    • 功能
    • 安装
    • 使用
  • unsetunset3、文档合并:PyMuPDFunsetunset
    • 简介
    • 功能
    • 安装
    • 使用
  • unsetunset4、文档解析:Pdfminer.sixunsetunset
    • 简介
    • 功能
    • 安装
    • 使用
  • unsetunset5、文档提取:MinerUunsetunset
    • 简介
    • 功能
    • 安装
    • 使用
  • unsetunset6、布局解析:DocLayout-YOLOunsetunset
    • 简介
    • 安装
    • 使用
  • unsetunset7、pdf 文档标准:PDF Explained、PDF Cheat Sheetsunsetunset
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档