让PDF格式为LLM应用做好准备:探索Marker开源工具
先说一个核心判断:在如今的大数据时代,高质量的数据,决定了大模型应用的成败。然而,现实很骨感——绝大多数文本数据,尤其是企业文档和个人文件,都以PDF格式存在。PDF这玩意儿,说白了就是一种“破碎”的格式,结构复杂,文档里嵌套着各种类型的数据元素,没有统一的布局,想从里面提取数据,那可真叫一个费劲。再加上编码、字体、表格、图像这些乱七八糟的问题,更是让事情雪上加霜。
为了把PDF弄成能喂给大模型吃的格式,大家没少折腾。有的办法是把PDF转成纯文本,好方便解析,然后用机器学习模型来检测布局,再用OCR模型去识别文字。可这些流程,既繁琐又容易翻车。
相比之下,Markdown格式就友好多了。它不仅能保留标题、图像、表格这些原始结构,大模型处理起来也得心应手,转成纯文本更是分分钟的事。
Marker:将PDF转换为结构化Markdown的开源工具
今天要聊的主角——Marker,正是一款能把复杂的PDF文件转换成结构化Markdown格式的开源工具。需要类似功能的同学,市面上当然有付费选项,比如Mathpix,它可以把PDF转成Markdown或者提取可读文本。如果你青睐开源方案,Meta的NuGet项目值得一看,但它更擅长处理学术文档。
而和NuGet相比,Marker的表现要亮眼得多。举个直观的例子:处理一页文本,Marker大约需要100秒,NuGet得花400秒左右。更关键的是,Marker的准确性几乎是NuGet的两倍。看看下面这个《Think Python》的转换对比,NuGet直接把前几页和目录给忽略了,而Marker却准确保留了所有内容,包括目录和章节。

Marker的特点与局限
Marker支持各种文档类型,尤其适合书籍和科学论文。当然,我也拿简历等其他文档试过,效果都挺不错。它支持所有语言,能自动去掉页眉、页脚这些多余的元素,还能把表格和代码块格式化得漂漂亮亮,同时提取并保存图像。对于公式,大部分都能转换成LaTeX格式,具体效果取决于公式的复杂程度。更棒的是,Marker可以在GPU、CPU甚至Apple Silicon上跑起来。
不过话说回来,PDF这格式本身就很复杂,所以Marker也并非万能。它没法把所有公式100%转成LaTeX,表格的格式也不总是完美无缺。空白字符有时会“放飞自我”,行间的跨度也可能连接不牢。但实际测试下来,绝大多数PDF文件它都能从容应对。
安装和使用Marker
下面来点实在的,看看怎么上手Marker,把PDF变成结构化的Markdown。
创建新的虚拟环境
第一步,建一个新的Conda环境,就叫它Marker。如果已经有一个同名的,可以先删了再重建。
conda create --name marker python=3.9 conda activate marker
安装PyTorch
新环境就绪后,接着装PyTorch。不同系统命令不一样,下面是Mac系统的安装方式:
pip install torch torchvision torchaudio
如果你用的是Linux或Windows,去PyTorch官网参考对应说明就行。
安装Marker
接下来是核心步骤,安装Marker本身:
pip install marker-pdf
顺便提一句,如果后面有OCR的需求,可以再装一个可选包:
pip install ocrmypdf
转换单个PDF文件
一切准备就绪,用 marker_single 命令就能转换单个PDF文件。命令格式很直接:
marker_single --pdf_path path/to/your/file.pdf --output_path path/to/output/folder
你还可以加一些可选参数,比如批处理倍数、最大转换页数或文档语言。
示例与性能对比
接下来看看几个不同类型文档的转换实例,包括科学论文、简历和其他文档。Marker不仅能提取图像,还能生成包含元数据的JSON文件,大部分表格和公式都能正确解析。
科学论文
拿一篇科学论文来说,Marker能准确提取标题、作者、摘要和图像,表格和公式的格式化也相当到位。生成的Markdown文件结构清晰,基本还原了原始文档的相对位置。

简历
处理简历文档时,Marker同样靠谱,所有信息都能正确提取,并生成结构化的Markdown文件。
综合评价
总而言之,作为开源工具,Marker能高效地将复杂PDF文件转换为结构化Markdown格式,大大简化了大模型应用的数据准备环节。

结语
随着数据在大模型应用中的核心地位越来越凸显,像Marker这样的工具,确实给我们提供了一条便捷的解决路径。希望这篇文章能帮你更好地了解和使用它,让PDF文件顺利变身结构化Markdown。
-
- 关于宇宙的好的网名有哪些
- 角色扮演 | 1
- 网名