文章目录
六个开源的PDF转Markdown项目
✨ 1: gptpdf
gptpdf 是一个利用VLLM解析PDF为Markdown的工具,几乎完美支持数学公式、表格等。
GPTPDF 是一个使用视觉大模型(如 GPT-4o)将 PDF 文件解析成 Markdown 文件的工具。它主要用于高效地解析 PDF 文档中的排版、数学公式、表格、图片、图表等内容,并将这些内容转换为结构化的 Markdown 格式。其显著特点是简单且成本低,每页平均费用为 $0.013。
地址:https://github.com/CosmosShadow/gptpdf
✨ 2: marker
Marker是一款将PDF快速精准转换为Markdown的工具,支持多种文档格式和语言。
Marker是一款能够快速且准确地将PDF转换为Markdown的工具。它支持多种类型的文档(针对书籍和科学论文进行了优化),支持所有语言,并且能够去除页眉、页脚及其他杂乱信息。此外,它还能正确格式化表格和代码块,并提取图像保存为Markdown。同时,Marker将大多数的公式转换为LaTeX格式,适用于GPU、CPU或MPS环境。
地址:https://github.com/vikparuchuri/marker
https://gitcode.com/gh_mirrors/ma/marker/overview
marker的原理是利于深度学习模型,检测页面布局,阅读顺序,然后格式化文本块并且对完整的文本再进行处理。这里说一下 marker 的特点:
- 该工具支持广泛的文档类型,特别针对书籍和科学论文进行了优化,对于复杂的公式提供了更好的支持。同时,它支持多种语言的转换,确保在全球范围内的用户都能够轻松使用
- 可以删除页眉、页脚以及其他页面元素。
- 能够格式化表格和代码块,保持排版整齐。
- 可以提取并保存 PDF 中的图像。
- 支持 GPU、CPU 或者 MPS(多处理器系统)进行转换,以满足不同硬件环境下的需求。
这里说来说一下 marker 的安装方法
安装 Python,需要注意的需要安装的 Python 版本必须大于等于 3.9
安装 Pytorch
首先,访问 PyTorch官网 查找适合你的操作系统、Python版本和硬件支持(如GPU、CUDA)的安装命令。
例如,如果你在Linux系统上使用CUDA 10.2,安装命令如下:
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu102)
如果你的系统没有CUDA支持或不打算使用GPU加速,则可以安装CPU版本:
pip install torch torchvision torchaudio
然后**安装 marker **,执行命令 pip install marker-pdf
单独转换文件示例
marker_single --input /path/to/file.pdf --output /path/to/output/folder --batch_multiplier 2 --max_pages 10 --langs English
--batch_multiplier
用于根据GPU内存大小放大默认批量尺寸,数值越大意味着更多内存被占用,但同时也会加速处理过程,默认值为2倍;标准批量尺寸大约占据3GB的GPU内存。--max_pages
定义了最大转换页数。如省略此项,则整个文档都会被转换。--langs
是以逗号隔开的语言列表,指明文档中所含的语言信息以便于OCR识别。
确认DEFAULT_LANG
设置与您的文档相符。OCR支持的语言清单位于surya,如有额外需求,可通过Tesseract支持的任一语言来补充,只要OCR_ENGINE
设为ocrmypdf
即可。若根本不需进行OCR识别,标记器就能适用于任何语言的文档。
--input
:指定要转换的PDF文件路径。--output
:指定转换后的Markdown文件存储路径。--language
:设置文档语言,如果处理的是非英文文档,可以指定语言代码(如zh
表示中文)。--gpu
:如果安装了CUDA并希望利用GPU加速,可以加上--gpu
选项。--no-images
:如果不希望提取PDF中的图片,可以添加这个参数来避免生成额外的图片文件。
CODE_TO_LANGUAGE = {
"_math": "Math",
'af': 'Afrikaans',
'am': 'Amharic',
'ar': 'Arabic',
'as': 'Assamese',
'az': 'Azerbaijani',
'be': 'Belarusian',
'bg': 'Bulgarian',
'bn': 'Bengali',
'br': 'Breton',
'bs': 'Bosnian',
'ca': 'Catalan',
'cs': 'Czech',
'cy': 'Welsh',
'da': 'Danish',
'de': 'German',
'el': 'Greek',
'en': 'English',
'eo': 'Esperanto',
'es': 'Spanish',
'et': 'Estonian',
'eu': 'Basque',
'fa': 'Persian',
'fi': 'Finnish',
'fr': 'French',
'fy': 'Western Frisian',
'ga': 'Irish',
'gd': 'Scottish Gaelic',
'gl': 'Galician',
'gu': 'Gujarati',
'ha': 'Hausa',
'he': 'Hebrew',
'hi': 'Hindi',
'hr': 'Croatian',
'hu': 'Hungarian',
'hy': 'Armenian',
'id': 'Indonesian',
'is': 'Icelandic',
'it': 'Italian',
'ja': 'Japanese',
'jv': 'Javanese',
'ka': 'Georgian',
'kk': 'Kazakh',
'km': 'Khmer',
'kn': 'Kannada',
'ko': 'Korean',
'ku': 'Kurdish',
'ky': 'Kyrgyz',
'la': 'Latin',
'lo': 'Lao',
'lt': 'Lithuanian',
'lv': 'Latvian',
'mg': 'Malagasy',
'mk': 'Macedonian',
'ml': 'Malayalam',
'mn': 'Mongolian',
'mr': 'Marathi',
'ms': 'Malay',
'my': 'Burmese',
'ne': 'Nepali',
'nl': 'Dutch',
'no': 'Norwegian',
'om': 'Oromo',
'or': 'Oriya',
'pa': 'Punjabi',
'pl': 'Polish',
'ps': 'Pashto',
'pt': 'Portuguese',
'ro': 'Romanian',
'ru': 'Russian',
'sa': 'Sanskrit',
'sd': 'Sindhi',
'si': 'Sinhala',
'sk': 'Slovak',
'sl': 'Slovenian',
'so': 'Somali',
'sq': 'Albanian',
'sr': 'Serbian',
'su': 'Sundanese',
'sv': 'Swedish',
'sw': 'Swahili',
'ta': 'Tamil',
'te': 'Telugu',
'th': 'Thai',
'tl': 'Tagalog',
'tr': 'Turkish',
'ug': 'Uyghur',
'uk': 'Ukrainian',
'ur': 'Urdu',
'uz': 'Uzbek',
'vi': 'Vietnamese',
'xh': 'Xhosa',
'yi': 'Yiddish',
'zh': 'Chinese',
}
转换多个文件
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
是一个可选的JSON文件路径,包含有关PDF的元数据。提供它将用来设置每个PDF的语言。否则,将使用默认语言DEFAULT_LANG
。格式如下:
{
"pdf1.pdf": {"languages": ["英语"]},
"pdf2.pdf": {"languages": ["西班牙语", "俄语"]},
...
}
✨ 3: PDF-Extract-Kit
PDF-Extract-Kit 提供高质量PDF内容提取,支持布局检测、公式识别和OCR功能
- 版面检测:使用 LayoutLMv3 模型进行区域检测,如检测图片、表格、标题、文本等。
- 公式检测:使用 YOLOv8 模型检测公式,包括行内公式和独立公式。
- 公式识别:使用 UniMERNet 进行公式识别。
- 光学字符识别 (OCR):使用 PaddleOCR 进行文本识别。
地址:https://github.com/opendatalab/PDF-Extract-Kit
✨ 4: zeroX
Zerox OCR 是一种经济高效且准确的文档OCR工具,适用于AI数据处理。
Zerox OCR 是一种极其简便的方法,用于将文档进行光学字符识别(OCR)并方便人工智能进行后续处理。鉴于文档往往包含复杂布局、表格、图表等,视觉模型在处理这些内容时尤其有效。
基本逻辑如下:
提供一个 PDF 文件(URL 或文件缓冲区)。
将 PDF 转换成一系列图像。
将每个图像传给 GPT,让其生成 Markdown 格式的文本。
聚合所有响应,并返回 Markdown 格式的结果。
地址:https://github.com/getomni-ai/zeroX
✨ 5: omniparse
OmniParse是一个将各种非结构化数据转换为结构化、适用于生成式AI(LLM)应用的平台。
OmniParse 是一个数据解析平台,旨在将各种非结构化数据转换为适用于生成式AI(GenAI)应用的结构化数据。无论是文档、表格、图像、视频、音频文件,还是网页,OmniParse 都能对其进行处理,使其变得干净、结构化,并为诸如 RAG(Retrieval-Augmented Generation)和细调等AI应用做好准备。
- 完全本地化,无需外部API
- 支持多达 20 种文件类型
- 将文档、多媒体和网页转换为高质量的结构化 Markdown
- 支持表格提取、图像提取与标注、音频/视频转录、网页爬取
- 通过 Docker 和 Skypilot 轻松部署
- 兼容 Colab
- 交互式 UI 由 Gradio 提供支持
地址:https://github.com/adithya-s-k/omniparse
✨ 6: MinerU
MinerU 是一个开源的高质量数据提取工具,支持多种文件格式
MinerU 是一个一站式、开源的高质量数据提取工具,主要包括以下两个核心功能模块:
Magic-PDF
- 功能介绍:Magic-PDF 能将 PDF 文档转换为 Markdown 格式,可以处理本地存储或支持 S3 协议的对象存储中的文件。
- 主要特色:
- 支持多种前端模型输入
- 自动去除页眉、页脚、脚注和页码
- 保留文档原有的结构和格式,包括标题、段落、列表等
- 提取并显示图片和表格
- 将公式转换为 LaTeX 格式
- 自动检测和转换乱码 PDF 文档
- 兼容 CPU 和 GPU 环境
- 可在 Windows、Linux 和 macOS 平台上使用
Magic-Doc
- 功能介绍:Magic-Doc 能将网页或多格式电子书转换为 Markdown 格式。
- 主要特色:
- 网页提取:跨模态精确解析文本、图片、表格和公式信息
- 电子书文档提取:支持包括 epub、mobi 在内的多种文档格式,完美适配文本和图片
- 语言类型识别:精确识别176种语言
地址:https://github.com/opendatalab/MinerU
更多AI工具,参考国内AiBard123,Github-AiBard123 公众号:每日AI新工具
参考:https://blog.youkuaiyun.com/weixin_40425640/article/details/140765933
https://cloud.tencent.com/developer/news/1472013
https://zhuanlan.zhihu.com/p/712512565
https://post.smzdm.com/p/a2xzn3z2/
TextIn在线api转换:https://www.textin.com/document/pdf_to_markdown
https://www.textin.com/console/recognition/robot_markdown?service=pdf_to_markdown
目前一路用下来,开源的方案用来做原型验证还不错,但要达到生产标准总是差一截。marker也试了,paddle也试了,最后还是转向了闭源付费api。省心多了。国内的textin,国外的google document ai,都还挺top的