首页 > 其他分享 >一个开源的快速准确地将 PDF 转换为 markdown工具

一个开源的快速准确地将 PDF 转换为 markdown工具

时间:2024-06-17 09:56:32浏览次数:22  
标签:markdown 转换 -- 开源 GPU pdf marker PDF

大家好,今天给大家分享的是一个开源的快速准确地将 PDF 转换为 markdown工具。

Marker是一款功能强大的PDF转换工具,它能够将PDF文件快速、准确地转换为Markdown格式。这款工具特别适合处理书籍和科学论文,支持所有语言的转换,并且能够去除页眉、页脚等干扰元素,格式化表格和代码块,提取并保存图像和Markdown文件,并将大部分方程式转换为LaTeX格式。

功能简介

Marker:重新定义 PDF 到 Markdown 的转换效率。

•Marker 满足了将复杂的 PDF 文档转换为 markdown 以便于管理的日益增长的需求。
•传统的文本转换器难以维持原始布局、格式和内容的准确性。
•Marker 擅长准确地保存表格、代码块和数学方程式等复杂元素。
•自动去除文档中的非主要元素,如页眉和页脚。
•它能够以优化的处理速度和资源使用率有效地处理大量数据。
•Marker 的定制方法减少了数字 PDF 对 OCR 的依赖,从而实现了更快、更精确的转换。
•可以在GPU、CPU或MPS上运行。

实现原理

Marker的工作原理基于深度学习模型。它首先通过OCR技术(如果需要的话)提取文本(采用启发式算法和 tesseract 工具),然后检测页面布局并确定阅读顺序(使用 布局分割器[1] 和 列检测器[2])。接下来,Marker会对每个文本块进行清洁和格式化处理(运用启发式算法和 nougat[3]),最后将所有块合并并进行后处理,生成完整的Markdown文本(利用启发式算法和 pdf后处理器[4])。Marker只在必要时使用模型,从而提高了转换速度和准确性。

性能表现

通过查找具有 pdf 版本和 latex 源的书籍和科学论文创建了一个测试集。将 latex 转换为文本,并将参考与文本提取方法的输出进行比较。

基准测试表明 marker 比 nougat 快 4 倍,而且在 arXiv 之外更准确(nougat 是在 arXiv 数据上训练的)

速度

Method Average Score Time per page Time per document
marker 0.613721 0.631991 58.1432
nougat 0.406603 2.59702 238.926

准确性

前 3 篇是非 arXiv 书籍,后 3 篇是 arXiv 论文。

Method multicolcnn.pdf switch_trans.pdf thinkpython.pdf thinkos.pdf thinkdsp.pdf crowd.pdf
marker 0.536176 0.516833 0.70515 0.710657 0.690042 0.523467
nougat 0.44009 0.588973 0.322706 0.401342 0.160842 0.525663

基准测试期间,nougat的 GPU 内存使用峰值为 4.2GB,而marker的 GPU 内存使用峰值为 4.1GB。 基准测试在 A6000 Ada 上运行。

使用

安装

您需要 Python 3.9+ 和 PyTorch。如果您使用的不是 Mac 或 GPU 机器,则可能需要先安装 CPU 版本的 torch。请参阅此处[5]了解更多详细信息。

安装方式:

pip install marker-pdf

转换单个文件

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 的语言的逗号分隔列表

转换多个文件

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 使用率。INFERENCE_RAM / VRAM_PER_TASK如果您使用 GPU,则并行度不会增加。
•--max是要转换的 PDF 的最大数量。省略此项可转换文件夹中的所有 PDF。
•--min_length是需要从 PDF 中提取的最少字符数,然后才会考虑进行处理。如果您要处理大量 PDF,我建议设置此项以避免对大部分是图像的 PDF 进行 OCR。(这会减慢一切速度)
•--metadata_file是包含有关 pdf 元数据的 json 文件的可选路径。如果您提供它,它将用于设置每个 pdf 的语言。如果没有,DEFAULT_LANG将使用。格式为:

{
  "pdf1.pdf": {"languages": ["English"]},
  "pdf2.pdf": {"languages": ["Spanish", "Russian"]},
  ...
}

在多个 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 上运行的并行进程数。每个 GPU 的并行度不会超过INFERENCE_RAM / VRAM_PER_TASK。
•MIN_LENGTH是需要从 PDF 中提取的最少字符数,然后才会考虑进行处理。如果您要处理大量 PDF,我建议设置此项以避免对大部分是图像的 PDF 进行 OCR。(这会减慢一切速度)

项目地址

https://github.com/VikParuchuri/marker

References

[1] 布局分割器: https://huggingface.co/vikp/layout_segmenter
[2] 列检测器: https://huggingface.co/vikp/column_detector
[3] nougat: https://huggingface.co/facebook/nougat-base
[4] pdf后处理器: https://huggingface.co/vikp/pdf_postprocessor_t5
[5] 此处: https://pytorch.org/get-started/locally/

标签:markdown,转换,--,开源,GPU,pdf,marker,PDF
From: https://www.cnblogs.com/yunmoom/p/18251791

相关文章

  • C#开发的NoteNet桌面小贴士 - 开源研究系列文章 - 个人小作品
          十多年前编写过这个NoteNet小应用,不过当时用的是文本的保存方式,而且功能上也相对较多。这次重新编写这个小应用,用上新的技术和功能。现在先把源码发布出来,在另个系列的博文中(C#基于.netframework的应用开发实战编程(一)-编程手把手系列文章)将以此小应用为例子进行......
  • 开源AI智能名片O2O商城系统小程序在品牌线下开店决策中的应用与价值
    摘要:随着电商的迅猛发展,品牌商在线下开店的决策变得更为复杂。本文探讨了开源AI智能名片O2O商城系统小程序如何助力品牌商在线下开店决策中提高运营效率和用户体验,从而实现本地化最优成本。通过优衣库等案例分析,阐述了线下开店成功的要素,并指出开源AI智能名片O2O商城系统小程......
  • 【JavaScript脚本宇宙】提升Markdown工作流:不可错过的六个JavaScript库
    优化你的Markdown体验:六大JavaScript库一网打尽前言在现代Web开发中,Markdown作为一种轻量级的标记语言,凭借其简洁易读的语法和广泛的适用性,迅速成为开发者们的宠儿。为了更有效地解析和处理Markdown内容,JavaScript社区涌现了许多功能强大的库。这些库不仅能够高效地将Mark......
  • (pdf)数据结构与算法分析 Java语言描述=Data Structures and Algorithm Analysis in Jav
    书:pan.baidu.com/s/1tGbGhhQ3Ez1SIkqdEREsjQ?pwd=eqp0提取码:eqp0数组:作为最基本的数据结构,用于存储固定大小的同类型元素集合。链表:动态数据结构,允许在任意位置插入和删除元素。栈:后进先出(LIFO)的数据结构,常用于函数调用和表达式求值。队列:先进先出(FIFO)的数据结构,常用于任务调......
  • Stable Diffusion3 开源!一文教你玩转 Stable Diffusion3
    节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。汇总合集:《大模型面试宝典》(2024版......
  • 英伟达开源最强通用模型Nemotron-4 340B:开启AI合成数据新纪元
    【震撼发布】英伟达最新力作——Nemotron-4340B,一个拥有3400亿参数的超级通用模型,震撼登场!这不仅是技术的一大飞跃,更是AI领域的一次革命性突破! 【性能卓越】Nemotron-4340B以其卓越的性能超越了Llama-3,专为合成数据而生。它将为医疗健康、金融、制造、零售等行业带来前......
  • java导入并解析提取PDf文件中内容
    1、下载pdfbox-app-2.0.31.jar并导入到项目结构中下载地址:ApacheDownloadMirrors2.重点:实现选择本地PDF文件代码//选择PDF文件privatevoidselectPdfFile(){JFileChooserfileChooser=newJFileChooser();intresult=fileChooser.showOpenDi......
  • Unreal RecastNavigation 开源项目详解
    0前言Recastnavigation是一个游戏AI导航库,像Unity,UE引擎中都集成了这个开源项目,HALO中使用的也是这个开源库。导航最重要的就是为NPC寻路,以及其他的寻路需求。需要注明的是,这个寻路库虽然厉害。但是他的核心是平面寻路。也就是重力方向一直朝着-Y方向。如果是星球地形,既重......
  • (pdf)图解java多线程设计模式.pdf (结城浩)
    书:pan.baidu.com/s/1tGbGhhQ3Ez1SIkqdEREsjQ?pwd=eqp0提取码:eqp0线程基础知识:介绍线程的概念、生命周期、状态转换等基本内容,为后续的多线程设计打下基础。Java线程API:详细讲解Java中线程的创建、启动、控制以及线程间的协作机制,如Thread类、Runnable接口等。线程同步与互斥:......
  • (pdf)Head First JavaScript程序设计 ([美]Eric T. Freeman,[美]Elisabeth Robson 著;袁国
    书:pan.baidu.com/s/199LHxxIlMixw3gYSY8tyPw?pwd=ywxg提取码:ywxg数据类型与变量:JavaScript支持多种数据类型,包括数字、字符串、布尔值、对象、数组等。变量用于存储这些类型的值。函数:函数是JavaScript中执行特定任务的可重用代码块。它们可以接受参数并返回结果。条件语句:使......