在此之前我们分享过关于PDF工具箱的文章:《一个本地部署的PDF工具箱,功能丰富、操作简单,还支持OCR扫描,Star 25.K+!》。此工具箱提供了处理PDF格式的很多功能,可惜的是唯独少了PDF转Markdown的能力。
现在LLM(大型语言模型)应用的普遍使用和落地,Markdown格式的文档是各种LLM和RAG(检索增强生成)偏爱,主要体现在以下两个方面:
•首先,Markdown是一种轻量级的标记语言,具备简洁性和易读易写的特点,使得它成为编写和存储文档的理想选择,特别是当这些文档需要通过LLM进行处理或通过RAG模型进行增强时。
•其次,Markdown的结构化特性使其在进行文本处理时更加高效。例如,向量化文档时,需要根据标题层级对Markdown文件进行结构化分割,这种规范的结构化分割保留了文本的上下文和结构信息,这对于RAG模型来说非常重要,有助于提升文本向量化和RAG检索的效果。
不同于Markdown,PDF格式无论在日常办公处理,还是在大模型、RAG场景处理下,都不太受“欢迎”。所以,很多时候,我们需要将PDF先做Markdown格式转换后,再在RAG或者大模型中使用。所以今天给大家介绍的就是一个能够将PDF格式文档快速高精度的转成Markdown格式的工具-Marker
Marker 介绍
一个开源、先进的PDF转换工具,它利用深度学习技术将PDF文件高保真地转换成Markdown格式。能够处理多种语言,自动去除页眉页脚等非内容元素,并支持表格、代码块和图像的格式化。Marker在保持原有文档结构的同时,提供了快速准确的转换效果。
🏠 项目信息
#Github地址
https://github.com/VikParuchuri/marker
#项目官网地址
https://www.datalab.to/marker
🚀功能特性
•多格式支持:能够将PDF文件转换为Markdown格式,同时支持书籍、科学论文等多种文档类型。
•全语言支持:不限制语言,可以处理所有语言的文档。
•自动化清理:自动去除PDF中的页眉、页脚和其他非内容元素,提高Markdown输出的清洁度。
•表格和代码格式化:能够识别并格式化PDF中的表格和代码块,保持原有结构。
•图像提取:在转换过程中,能够提取PDF中的图像,并将它们保存为Markdown支持的格式。
•公式转换:将PDF中的大多数数学方程转换为LaTeX格式,便于在Markdown中展示。
•硬件兼容性:支持在GPU、CPU或MPS(Metal Performance Shaders)上运行,以适应不同用户的硬件环境。
•性能优化:仅在必要时使用深度学习模型,以提高转换速度并优化准确率。
•API服务:提供托管API服务,支持PDF、Word文档和PowerPoint的转换。
🛠 处理过程
1.文本提取:Marker首先使用OCR技术提取PDF文件中的文本。如果PDF文件包含图像,将使用Tesseract或SURYA等OCR工具进行文本识别。
2.页面布局检测:使用SURYA等深度学习模型来检测页面布局和确定阅读顺序。这有助于Marker理解文档的结构,例如区分标题、正文、表格等。
3.内容清洗与格式化:通过一系列启发式规则和深度学习模型(如texify)对提取的文本进行清洗和格式化。这包括去除不需要的元素、格式化文本块、处理表格和代码块等。
4.表格和代码块处理:Marker能够识别PDF中的表格并将其转换为Markdown格式的表格。同时,它也能识别和格式化代码块。
5.图像提取与保存:Marker会提取PDF中的图像,并将它们保存为与Markdown兼容的格式。
6.公式转换:Marker将PDF中的数学公式转换为LaTeX格式,以便于在Markdown中展示。
7.组合与后处理:在完成上述步骤后,Marker将各个部分组合起来,并进行后处理,以确保最终的Markdown文件格式正确、整洁。
Marker 安装和使用
一、环境要求
需要 Python 3.9+ 和 PyTorch。如果没有CPU,需要先安装 CPU 版本的 torch。
pip3 install torch torchvision torchaudio
二、安装 Marker
pip install marker-pdf
可选安装:如果想使用可选的ocrmypdfOCR 后端,需要安装OCRMyPDF。
三、配置(可选,默认也可)
•设置环境变量:可以在marker/settings.py中检查和配置设置,也可以使用环境变量来覆盖设置。
•自动检测设备:marker会自动检查部署的服务器,但是可以覆盖此设置。例如,TORCH_DEVICE=cuda。
◦如果使用 GPU,请设置INFERENCE_RAM为 GPU VRAM(每个 GPU)。例如,有 16 GB 的 VRAM,设置INFERENCE_RAM=16。
◦根据文档类型,marker 每个任务的平均内存使用量可能会略有不同。如果发现任务因GPU不足错误而失败,可以调整VRAM_PER_TASK此值。
•设置 OCR 引擎:默认情况下,Marker 使用 suryaOCR。如果想要更快的 OCR,可以设置OCR_ENGINE为ocrmypdf。如果不需要 OCR,可以设置OCR_ENGINE为None。
四、使用
•转换单个文件
marker_single /path/to/file.pdf /path/to/output/folder --batch_multiplier 2 --max_pages 10 --langs English
•--batch_multiplier是如果有额外的 VRAM,默认批处理大小要乘以的数值。数字越大,占用的 VRAM 越多,但处理速度越快。默认设置为 2。默认批处理大小将占用约 3GB 的 VRAM。
•--max_pages是要处理的最大页数。忽略此项可转换整个文档。
•--langs是文档中用于 OCR 的语言的逗号分隔列表确保DEFAULT_LANG设置适合文档。OCR 支持的语言列表见下方链接。如果需要 OCR,标记可以使用任何语言。
#支持的语言连接说明
https://github.com/VikParuchuri/surya/blob/master/surya/languages.py
•转换多个文件
marker /path/to/input/folder /path/to/output/folder --workers 10 --max 10 --metadata_file /path/to/metadata.json --min_length 10000
•--workers是一次要转换的 PDF 数量。默认情况下,此值设置为 1,但可以增加此值以增加并发,但代价是增加 CPU/GPU 使用率。
•--max是要转换的 PDF 的最大数量。省略此项可转换文件夹中的所有 PDF。
•--min_length是需要从 PDF 中提取的最少字符数,然后才进行处理。如果要处理大量 PDF,建议设置此项,以避免对大部分是图像的 PDF 进行 OCR。
•--metadata_file是存放有关 PDF元数据的JSON文件的可选路径。如果没有使用默认即可。
Marker 实际效果展示
本文部署Marker的机器为Ubuntu操作系统,4C8G配置(设置--batch_multiplier
为1),无GPU。测试了一个60页的PDF文档。整体转换时间花费了15分钟左右。
•转换前的PDF原文件截图:
•转换后Markdown文件截图:
基本可见以下几点转换后的效果:
•页眉页脚的信息都已经去除;
•文档中的水印也自动去除(图片中的水印无法去除);
•PDF论文模式的左右编排,自动提取并且整合为上下编排,可读性更好;
提取后的Markdown文件夹包含了PDF文件中的图片,转换后的json文件,md文件:
最后
综上所述,Marker确实是一个功能强大的PDF到Markdown转换工具,它不仅能够精确地识别表格、进行方程式的OCR,还能够去除PDF中的页眉页脚、水印等不必要的元素,并且支持在GPU、CPU或MPS上运行,处理速度和效率也很不错。如果正好你也有这方面的需求化,不妨试试吧!
暂无匹配数据