点击上方蓝字关注我们
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
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 --version
或set 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