你知道处理 PDF 文件时会遇到什么,尤其是那些包含复杂研究内容或者有表格、图像和额外信息的文档。对于 AI 领域的人,特别是那些在调整大型语言模型(LLM)或构建知识检索系统(比如 RAG)的人来说,提取正确的数据非常重要。然而,老实说,并不是所有的 PDF 提取工具都能做到这一点。
在我使用过的一些数据提取工具中,很多工具都“差不多”能完成任务,但总是缺少一些关键功能。要么它们无法很好地保持内容的结构,要么在提取复杂的表格和图像时表现不佳。直到我发现了 PyMuPDF4LLM,这款工具迅速成为我处理所有 PDF 文件的首选。接下来,让我们深入看看为什么 PyMuPDF4LLM 是一款如此出色的产品。
我们面临的 PDF 问题
想象一下,你正在进行一个项目,需要微调 LLM 以完成特定的任务,比如处理法律文件或科学论文。你需要在保持内容结构的同时提取文本、表格,并获取高质量的图像用于模型训练。听起来简单吧?其实并不是。
使用大多数 PDF 工具时,你要么得到的文本完全没有上下文,要么得到的图像质量太差,无法使用。更糟糕的是,有些工具会完全忽略表格或弄乱文本的排列。如果你运气好,可能会得到一些不错的文本输出,但图像和表格对于训练更全面的模型来说是至关重要的,那该怎么办呢?
这就是 PyMuPDF4LLM 的用武之地。它灵活且快速,几乎可以处理所有的数据提取任务。无论你是在构建基于 LLM 的应用,还是只想准备数据进行微调,这个工具都能满足你的需求。
为什么 PyMuPDF4LLM 如此适合 LLM 任务
多功能 Markdown 提取
:无论你是提取基本文本还是对其进行结构化以进行微调,PyMuPDF4LLM 都能以易于阅读的 Markdown 格式提供所有内容。它快速、高效,并确保所有内容(文本、图像、表格和元数据)都以 LLM 可以直接使用的格式捕获。
应用灵活性
:PyMuPDF4LLM 不仅适用于文本提取。你可以按页提取数据,将其保存为 RAG 任务所需的格式,或直接将其导入 LlamaIndex 等框架(用于嵌入和文档搜索)。其优点在于灵活性。
全面提取
:此工具不仅可以抓取纯文本。它还提供图像提取、逐字分块、表格提取等功能。当你在各种复杂的应用程序中处理 PDF(从知识库创建到情感分析)时,这种粒度非常宝贵。
PyMuPDF4LLM 实际操作:精确提取数据
让我向你介绍一些我在自己的工作中使用 PyMuPDF4LLM 的真实示例,从基本的文本提取到更复杂的用例,如分块、表格提取等。该工具的多功能性确实令人印象深刻,使其成为许多与 LLM 相关的任务的最佳选择。
安装 PyMuPDF4LLM:
!pip install pymupdf4llm
用例 1
:基本 Markdown 提取
这个很简单:你有一个 PDF,只想以干净、Markdown 友好的格式获取内容。PyMuPDF4LLM 可以提取文本,包括标题、列表和其他格式,使其易于使用。
import pymupdf4llm
# 将 PDF 内容提取为 Markdown
md_text = pymupdf4llm.to_markdown( "input.pdf" )
print (md_text[: 500 ]) # 打印前 500 个字符
在此示例中,我使用 PyMuPDF4LLM 将研究论文的内容提取为 Markdown 格式。为什么选择 Markdown?它是微调模型的理想选择,因为它保留了结构和格式,这对于从 LLM 生成连贯的响应至关重要。
用例 2
:提取特定页面
有时你只需要文档的一部分 — 可能只是用于训练的特定部分。使用 PyMuPDF4LLM,你可以精确定位要提取的页面,从而节省时间和资源。
import pymupdf4llm # 仅提取第 10 和 11 页
md_text = pymupdf4llm.to_markdown("bengio03a.pdf", pages=[10 , 11])
print (md_text[: 500 ]) # 打印前 500 个字符
此功能在处理大量文档时特别有用。例如,提取特定章节或部分可以轻松仅针对最相关的信息训练 LLM。
用例 3
:保存 Markdown 到文件
提取数据后,PyMuPDF4LLM 能够将其保存为易于重新访问或共享的格式 。
import pymupdf4llm
import pathlib
md_text = pymupdf4llm.to_markdown("bengio03a.pdf")
pathlib.Path("output.md").write_bytes(md_text.encode())
print("Markdown saved to output.md")
将提取的数据存储在 Markdown 中便于协作或审阅,尤其是在准备 LLM 微调数据时。保存的灵活性使其非常适合逐步构建数据集。
用例 4
:将数据提取为 LlamaIndex 文档
LLM 工作中比较棘手的任务之一是将 PDF 转换为与 LlamaIndex(以前称为 GPT Index)兼容的文档格式。PyMuPDF4LLM 简化了该过程。
import pymupdf4llmllama_reader = pymupdf4llm.LlamaMarkdownReader()
llama_docs = llama_reader.load_data("bengio03a.pdf")
print(f"Number of LlamaIndex documents: {len(llama_docs)}")
print(f"Content of first document: {llama_docs[0].text[:500]}")
无论你使用这些文档进行嵌入、搜索还是任何基于知识的任务,PyMuPDF4LLM 都能完成繁重的工作,确保数据结构化且易于查询。
用例 5
:图像提取
提取图像和文本经常被忽视,但非常重要,尤其是对于包含图形、图表或图表的文档。
PyMuPDF4LLM 可以无缝处理它。
md_text_images = pymupdf4llm.to_markdown(doc="bengio03a.pdf",pages=[1, 11],page_chunks=True,write_images=True,image_path="images",image_format="jpg",dpi=200)
print(md_text_images[0]['images']) # 从第一个块打印图像信息
当你处理包含大量视觉数据的技术文档或报告时,此功能非常实用。提取的图像质量非常重要,即使对于高分辨率图像也效果很好。
用例 6
:使用元数据分块
对于微调任务,将 PDF 分解为具有元数据的可管理块至关重要。PyMuPDF4LLM 可让你高效地完成此操作。
md_text_chunks = pymupdf4llm.to_markdown(doc= "bengio03a.pdf" , pages=[ 0 , 1 , 2 ], page_chunks= True )
print (md_text_chunks[ 0 ]) # 打印第一个块
这个用例非常适合为 LLM 准备数据,其中使用元数据正确分块的文本可以显著提高模型性能。
用例 7
:逐词提取
有时,你需要对提取的文本进行更多控制,尤其是对于需要精确的词级数据的情感分析或文本生成等任务。
md_text_words = pymupdf4llm.to_markdown(doc= "bengio03a.pdf" , pages=[ 1 , 2 ], page_chunks= True , write_images= True , image_path= "images" , image_format= "jpg" , dpi= 200 , extract_words= True )
print (md_text_words[ 0 ][ 'words' ][: 5 ]) # 从第一个块打印前 5 个单词
这种级别的提取对于 NLP 任务非常有帮助,因为词语定位和上下文非常重要。
用例 8
:表格提取
最后但并非最不重要的一点是,众所周知,表格很难从 PDF 中提取而不丢失其格式。PyMuPDF4LLM 可以优雅地处理这个问题,确保表格干净且随时可用。
import pymupdf4llm
import json md_text_tables = pymupdf4llm.to_markdown(doc= "bengio03a.pdf" , pages=[ 12 ], # 指定包含表格的页面)
print (md_text_tables)
表格通常包含关键数据,尤其是在技术文档中,PyMuPDF4LLM 可确保准确提取这些数据,以供下游分析。
最后
PyMuPDF4LLM 是PDF提取数据的终结者!
在多个项目中广泛使用 PyMuPDF4LLM 后,自信地说,它是 LLM 任务中最通用、最可靠的 PDF 数据提取工具。它不仅仅是获取文本或图像 — 而是以 LLM 可以轻松处理的格式获取你需要的一切。
因此,无论你是构建 RAG 系统、微调 LLM,还是只需要 PDF 的可靠提取工具,都可以尝试 PyMuPDF4LLM。它简洁、高效,而且根据我的经验,它真的很有用。
原创公众号:数据STUDIO