15K star!高效PDF转markdown,AI实用工具

文摘   科技   2024-08-01 11:50   北京  

点击上方蓝字关注我们

IT 咖啡馆,探索无限可能!

恭喜你发现了这个宝藏,这里你会发现优质的开源项目、IT知识和有趣的内容。

 

PDF是工作中非常常用的文件格式,如果想把它转成Markdown,一般我们需要先将 PDF 文档先 OCR 识别一下,然后再转换成 markdown。

今天我们分享一个开源项目,它可以帮助你快速将PDF转成markdown,并且精度很高,它就是:Marker



Marker 是什么



marker 是一款基于深度学习模型的将 PDF 转换成 Markdown 格式的工具。marker 的原理是利于深度学习模型,检测页面布局,阅读顺序,然后格式化文本块并且对完整的文本再进行处理。

Marker 快速而准确地将 PDF 转换为 Markdown 格式。

  • 广泛文档支持(特别适合书籍和科学论文)

  • 全语言支持

  • 移除页眉、页脚及其它冗余元素

  • 格式化表格与代码块

  • 提取并随 Markdown 保存图像

  • 大多数公式转换为 LaTeX

  • 支持 GPU、CPU 或 MPS 运行





 实现原理



Marker的基本实现流程如下:

  • 首先,提取文本,必要时进行OCR(启发式、Tesseract)

  • 其次,检测页面布局(布局分割器、列检测器)

相关的工具有:https://huggingface.co/vikp/layout_segmenter、https://huggingface.co/vikp/column_detector

Marker的实现代码参考位置如下:

https://github.com/VikParuchuri/marker/blob/master/marker/ocr/page.py


  • 然后,清理并格式化每个区块(启发式方法、nougat)

相关的工具有:https://huggingface.co/facebook/nougat-base

Marker的实现代码参考位置如下:

https://github.com/VikParuchuri/marker/blob/master/marker/cleaners/


  • 最后合并区块并对完整文本进行后处理(启发式方法、pdf_postprocessor)

相关的工具有:https://huggingface.co/vikp/pdf_postprocessor_t5

Marker的实现代码参考位置如下:

https://github.com/VikParuchuri/marker/blob/master/marker/postprocessors/editor.py




性能表现



下表显示了 Marker 和 Nougat 在不同文档上的速度和准确性比较。Marker 的速度是 Nougat 的 4 倍,并且在 arXiv 之外的文档上具有更高的准确性。

make在转换的速度和精度上都有着不错的表现,在和nougat的对比测试中,速度和精度均表现优异。

由于 PDF 格式的复杂性,Marker 有时可能无法完美转换。以下是已知的一些局限性:

  • Marker 无法保证将所有公式完全转换为 LaTeX。这是因为它需要先识别再转换。

  • 表格格式化不一定总是完全正确——文本可能会出现在错误的列中。

  • 空白与缩进可能无法完全保留。

  • 并非所有行或段落都能被正确连接。

  • 该工具在数字化 PDF(无需大量 OCR 处理)上的表现最佳。它侧重于速度优化,仅限于修正错误时使用有限的 OCR 功能。





安装和使用


 

安装Marker

 

Marker 需要 Python 3.9+ 和 PyTorch。如果您不是使用 Mac 或 GPU 机器,可能需要先安装 Torch 的 CPU 版本。安装 Pytorch ,执行命令

pip3 install torch torchvision

安装命令:

git clone <https://github.com/VikParuchuri/marker.git> poetry install

 

安装CUDA

 

marker可以使用GPU进行加速。

  • 先判断本机显卡能支持的最高CUDA版本。在命令提示符中输入nvidia-smi,如下图所示,可以看到本机显卡驱动能支持的CUDA版本为12.5。


  • 安装CUDA

进入下载网址:https://developer.nvidia.com/cuda-downloads 。当前最新版本为12.5。若安装12.5版本的话,可以点下图中1所示的操作系统选择按钮。若需要安装老版本,可以点下图中2所示的链接。

如下图所示,根据本机情况选择合适的版本进行下载。



下载后直接双击按默认安装即可。

安装完毕后在命令行窗口输入nvcc --versionset cuda,若如下图所示显示,则表示CUDA安装成功。

 

参数配置

 

  • 查看 marker/settings.py 中的设置项。可以使用环境变量覆盖任何设置。

  • PyTorch 设备可以被自动检测,但也可以手动指定。例如使用 TORCH_DEVICE=cuda 来指定CUDA设备。

  • 如果使用GPU,根据GPU显存设置 INFERENCE_RAM。例如,若有16GB的显存,应设置 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识别

通过以下命令可以批量转换位于某个文件夹下的多个PDF文件:

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才会被纳入处理考虑。如果需要处理大量PDF,建议设置此参数以避免对主要为图像的PDF进行OCR处理(这会降低整体处理速度)。

  • -metadata_file 是一个可选参数,用于指定包含PDF元数据的JSON文件路径。如果提供此文件,程序将利用这些元数据为每个PDF设定语言;如果不提供,则使用 DEFAULT_LANG 配置的默认语言进行处理。格式为:

 




总结



不过,该工具也存在的问题,只支持与英语类似的语言。对中文、日文、韩文等的支持还不太李响。这块需要自行进行针对性的中文修改。目前在很多AI的开源项目中,已经开始使用Marker来作为其文档内容转换的工具,所以对于项目的未来很值得期待。




项目信息



  • 项目名称:Marker

  • GitHub 链接:github.com/VikParuchuri/marker

  • Star 数:15K



往期推荐

一周2K star!Netflix 开源的工作流编排器,不容错过?

15K star!超越RAG,让大模型拥有个性化记忆

「Github一周热点32期」动画图解算法教程、用LLM写完整报告等5个项目


  




识别二维码关注我们
微信号- it-coffee
B站 - IT-咖啡馆
头条号- IT咖啡馆

IT咖啡馆
开源项目、IT技能和有趣的事情
 最新文章