PDF 转 Markdown 神器,精准且快速:支持 90 多种语言 OCR,还支持提取表格、图片和公式!


Marker[1] 是一个能快速、准确地将 PDF 转换为 Markdown 文档的工具,目前 Github 上的 Star 数是 9.4K。
近期热文
当 AI 遇上爬虫:让数据提取变得前所未有的简单!
超强 OCR 新秀:支持 90 多种语言,性能超越云服务!
7.8K Star RAG 引擎:基于深度文档理解,最大程度降低幻觉、无限上下文快速完成 “大海捞针” 测试!
Marker 主要特点
支持多种文档(针对书籍和科学论文进行了优化)
支持 90 几种语言
移除页眉/页脚/其他人工痕迹
格式化表格和代码块
支持提取和保存图片
将大多数方程转换为 latex
可在 GPU、CPU 或 MPS 上运行
Marker 性能

上图有关 marker 和 nougat 的测试,在 A6000 都需要大于 4GB 的 VRAM。
Marker 工作原理
Marker 是一个深度学习模型管道(pipeline):
提取文本,必要时进行 OCR,支持 heuristics、surya[2]、tesseract 等 OCR 引擎
检测页面布局并查找阅读顺序(基于 surya)
清理并格式化每个区块(heuristics、 texify[3])
合并区块并对完整文本进行后处理(heuristics、pdf_postprocessor)
它只在必要时使用模型,从而提高了速度和准确性。
Marker 局限性
PDF 是一种棘手的格式,因此 Marker 并不是完美的。以下是一些已知的限制:
Marker 程序不会将方程 100% 转换为 LaTeX 格式。这是因为它必须先检测,然后再转换。
表格的格式并不能始终保证正确 —— 文本可能位于错误的列中。
空白和缩进无法确保被完整保留。
并非所有 lines/spans 都能正确连接。
对于不需要大量 OCR 处理的 PDF,Marker 的效果较好。它对速度进行了优化,并使用有限的 OCR 来修复错误。
Marker 商业使用
Marker 允许研究和个人使用,但商业使用有一些限制。
模型的权重采用 cc-by-nc-sa-4.0 许可,但如果任何组织最近 12 个月的总收入低于 500 万美元,且一生中筹集的风险投资/天使投资低于 500 万美元,作者将放弃这一限制。如果您想取消 GPL 许可要求(双重许可)和/或在超过收入限制的情况下商业使用权重,请查看该文档[4]。
Marker 快速上手
前置条件
你需要 python 3.9+ 和 PyTorch。如果您使用的不是 Mac 或 GPU 机器,可能需要先安装 CPU 版本的 PyTorch。
pip install marker-pdf
成功安装完 marker-pdf 之后,你可以进行一些相关配置:
检查 marker/settings.py 中的设置。您可以使用环境变量覆盖任何设置。
你的 torch 设备会被自动检测到,但你可以覆盖它。比如,TORCH_DEVICE=cuda。
如果使用 GPU,请将 INFERENCE_RAM 设置为 GPU VRAM(每个 GPU)。例如,如果您有 16 GB 的 VRAM,则设置 INFERENCE_RAM=16。
根据文档类型的不同,Marker 每个任务的平均内存使用量也会略有不同。如果你发现任务失败时出现 GPU 内存不足的错误,可以通过配置 VRAM_PER_TASK 来进行调整。
默认情况下,Marker 会使用 Surya 进行 OCR 处理。Surya 在 CPU 上运行速度较慢,但比 tesseract 更准确。如果你想要更快的 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 支持的语言列表[5]。如果需要更多语言,只要将 OCR_ENGINE 设置为 ocrmypdf,就可以使用 Tesseract[6] 支持的任何语言。如果不需要 OCR,Marker 可以支持任何语言。
转换多个文件
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 的使用量增加。如果使用 GPU,并行性不会超过 INFERENCE_RAM / VRAM_PER_TASK。
--max 是要转换的 pdf 的最大数量。省略此项可转换文件夹中的所有 pdf。
--min_length(最小长度)是从 pdf 中提取的最小字符数,然后才会考虑对其进行处理。如果要处理大量 PDF 文件,我建议设置此项,以避免 OCR 处理大部分是图像的 PDF 文件。(会减慢处理速度)
--metadata_file 是一个可选路径,指向一个包含 pdf 元数据的 json 文件。如果提供了该文件,将用于设置每个 pdf 的语言。如果没有提供,将使用 DEFAULT_LANG。格式如下:
{  "pdf1.pdf": {"languages": ["English"]},  "pdf2.pdf": {"languages": ["Spanish", "Russian"]},  ...}
您可以使用语言名称或代码。确切的代码取决于 OCR 引擎。有关 surya 代码的完整列表,请参阅此处[7],有关 tesseract 的完整列表,请参阅此处[8]。
在多个 GPU 上转换多个文件
MIN_LENGTH=10000 METADATA_FILE=../pdf_meta.json NUM_DEVICES=4 NUM_WORKERS=15 marker_chunk_convert ../pdf_in ../md_out
METADATA_FILE 是一个可选路径,指向一个包含 pdf 元数据的 json 文件。格式见上文。
NUM_DEVICES 是要使用的 GPU 数量。应为 2 或更大。
NUM_WORKERS 是要在每个 GPU 上运行的并行进程数量。超过 INFERENCE_RAM / VRAM_PER_TASK后,每 GPU 并行性将不会增加。
MIN_LENGTH 是在考虑对 pdf 进行处理之前需要从 pdf 中提取的最小字符数。如果要处理大量 PDF 文件,我建议设置此值,以避免 OCR 处理大部分是图像的 PDF 文件。(这会减慢处理速度)
请注意,上述 env 变量是针对本脚本的,不能在 local.env 中设置。
Marker 故障排除
如果出现与预期不符的情况,你可以尝试以下设置:
OCR_ALL_PAGES - 设置为 “true ”可强制对所有页面进行 OCR。如果默认情况下无法正确识别表格布局,或者出现乱码文本,这将非常有用。
TORCH_DEVICE - 设置此项可强制 Marker 使用指定的 torch 设备进行推理。
OCR_ENGINE - 可以设置为 surya 或 ocrmypdf。
DEBUG - 设置为 “True” 可在转换多个 PDF 文件时显示日志。
确认语言设置是否正确,或是否传入了元数据(metadata)文件。
如果出现内存不足的错误,请减少 worker 数量(增加 VRAM_PER_TASK 设置)。也可以尝试将长 PDF 文件分割成多个文件。
一般来说,如果输出结果与预期不符,尝试对 PDF 进行 OCR 是很好的第一步。并非所有的 PDF 都嵌入了良好的 text/bboxes。
https://github.com/VikParuchuri/marker
往期文章
自动化爬虫神器:把网页转成大模型所需数据,助力 AI 应用与大模型训练全面优化!
3 款强大的开源低代码 LLM 编排工具,可视化定制专属 AI Agent 和 AI 工作流!
25.4K Star 低代码LLM编排工具:终于支持 Multi Agent,内置 5 大 Multi Agent 开箱即用!
Kimi+麦肯锡,5 秒摸透一个行业!
Kimi 10 秒生成流程图,别再手动绘图了!
万字长文秒变精华!Kimi 的超强提示词秘籍
欢迎您与我交流 AI 技术/工具

关注 AI 真好玩,带你玩转各类 AI 工具,掌控数字未来!
如果这篇文章对您有所帮助,请点赞、关注,并分享给您的朋友。感谢您的支持!
参考资料
[1] 
Marker: https://github.com/VikParuchuri/marker[2] 
surya: https://github.com/VikParuchuri/surya[3] 
texify: https://github.com/VikParuchuri/texify[4] 
文档: https://www.datalab.to/[5] 
语言列表: https://github.com/VikParuchuri/surya/blob/master/surya/languages.py[6] 
Tesseract: https://tesseract-ocr.github.io/tessdoc/Data-Files#data-files-for-version-400-november-29-2016[7] 
此处: https://github.com/VikParuchuri/surya/blob/master/surya/languages.py[8] 
此处: https://tesseract-ocr.github.io/tessdoc/Data-Files#data-files-for-version-400-november-29-2016
到顶部