从PDF中提取和处理文本用于机器学习、LLM或RAG设置可能相当有挑战性。PyMuPDF4LLM 提供了一种将PDF内容转换为Markdown等可用格式的有效途径,支持与如LlamaIndex等库兼容的工作流程。本指南将指导您如何使用PyMuPDF4LLM,从基础的Markdown转换到高级操作,如分段、图像提取和元数据处理。
前提条件要开始,请确保安装了 PyMuPDF4LLM 和其他必要的库如 llama_index
,以便与 LLM 工作流程兼容。
!pip install pymupdf4llm
主要特点
所有的超参数可以在API文档中找到。虽然我们将详细介绍其中的几个参数,,PyMuPDF4LLM的主要特点可以概括为:
- 文本提取:提取Markdown格式的内容。
- 分块处理:支持在提取的内容中添加元数据、表格和图片链接。
- 图片提取:提供定义图片大小、分辨率和格式的选项。
- 图片嵌入:图片直接嵌入Markdown输出中,无需额外处理。
- 单词提取:允许从PDF中精确提取单词并保留其格式。
首先,将PDF文件转换为Markdown格式。这种方法使文本处理更加简单,特别是在LLM和RAG系统中,使得文本的格式化和预处理更加容易。
import pymupdf4llm
# 这里我们导入一个名为pymupdf4llm的库
md_text = pymupdf4llm.to_markdown("/content/Dhanush_kumar_Resume.pdf")
# 接下来,我们将PDF文件转换为Markdown格式的文本
md_text
解释:这里,我们导入了 pymupdf4llm
库,并对样本 PDF(Dhanush_kumar_Resume.pdf
)调用了 to_markdown
方法。变量 md_text
存储了提取的 Markdown 文本,以便展示或进一步使用。
在加载库之后,查看 pymupdf4llm
中所有可用的方法有助于了解其功能特性。
dir(pymupdf4llm) # 查看pymupdf4llm模块中的内容
将Markdown保存为文件
将提取的 Markdown 保存到文件中,可能用于后续分析或集成到其他工作流程中。
import pathlib
# 将md_text写入名为'resume.md'的文件中
pathlib.Path("resume.md").write_text(md_text)
- 解释:这里我们使用
pathlib
将md_text
保存为一个名为resume.md
的文件。这个 Markdown 文件可以进一步处理或分享。
如果你只需要特定页面的内容,可以使用 PyMuPDF4LLM 通过指定页码选择性地提取内容。
md_text_pages = pymupdf4llm.to_markdown("/content/Dhanush_kumar_Resume.pdf", pages=[0]) # 将PDF文件转换为Markdown格式
打印md_text_pages的内容
- 解释:这一句只提取了PDF的第一页。通过修改
pages
参数,可以从文档中的任何一页或多页中提取,这样更加灵活。
与LlamaIndex集成
PyMuPDF4LLM 也支持 LlamaIndex 兼容的数据提取功能,使其成为需要文档索引以进行基于 LLM 处理项目的理想选择。
!pip install llama_index
llama_reader = pymupdf4llm.LlamaMarkdownReader()
# 查看llama_reader对象的方法和属性
dir(llama_reader)
llama_docs = llama_reader.load_data("/content/Dhanush_kumar_Resume.pdf")
print(f"LlamaIndex 兼容的数据长度:{len(llama_docs)}")
# 输出llama_docs中第一个文档的前100个字符
{llama_docs[0].text[:100]}
解释:
- 安装了
llama_index
之后,我们使用来自PyMuPDF4LLM的LlamaMarkdownReader
。 load_data
方法将PDF转换为可以直接与LlamaIndex
工具兼容的格式,该工具常用于构建LLM数据流。llama_docs
保存了处理过的数据,每份文档都可以检查其质量和兼容性。
PDF文档中常常包含图像和文字。通过使用PyMuPDF4LLM,我们可以把这些图像提取出来,并保存到指定位置,格式也是指定好的。
md_text_images = pymupdf4llm.to_markdown(
"/content/Dhanush_kumar_Resume.pdf",
page_chunks=True,
write_images=True,
image_path="/content/images",
image_format="png"
)
解释
write_images=True
:启用从PDF中提取图片。image_path
和image_format
指定图像将保存的位置以及格式(本例中为png
)。- 此代码会同时捕获图像,尤其对于包含多媒体的内容非常有用。
对于较大的PDF或复杂的文档,将内容分成小块处理可以使处理更高效。此外,PyMuPDF4LLM还允许处理每个分段的元数据。
以下代码将 PDF 文件转换为 Markdown 格式并输出第一个片段的内容:
md_text_chunks = pymupdf4llm.to_markdown(
"/content/Dhanush_kumar_Resume.pdf", # 将 PDF 转换为 Markdown 格式
page_chunks=True # 将每页视为一个片段
)
md_text_chunks[0]
解释:通过将 page_chunks=True
设置,文档会被拆分成多个部分,每个部分会单独处理。这在RAG场景下特别有用,因为分段处理能提升检索效果。
在某些情况下,逐词提取文本是必不可少的,尤其是在需要进行详细分析时,例如情感分析或实体识别任务。
# 将PDF文件转换为Markdown格式并提取前100个单词
md_text_words = pymupdf4llm.to_markdown(
"/content/Dhanush_kumar_Resume.pdf",
page_chunks=True, # 将页面分割成块
write_images=True, # 写入图片
image_path="images",
image_format="png",
extract_words=True # 提取文档中的单词
)
md_text_words[0]["words"][:100]
解释:
extract_words=True
指定以词为单位提取文本,添加诸如单词位置和页码等元数据。- 这使得对内容的控制更精细,并支持高级文本分析流程。
如果你的 PDF 里有表格,也可以把这些表格提取出来,这可以简化在报告、研究论文等含有大量表格的文档中查找数据的过程。
md_text_tables = pymupdf4llm.to_markdown(
"/content/Dhanush_kumar_Resume.pdf",
page_chunks=True,
write_images=True,
image_path="images",
image_format="png", dpi=200
)
- 解释:PyMuPDF4LLM 通过转换为 Markdown 兼容格式来提取表格。这在需要结构化数据的场景中很有价值,例如数据科学或报告生成。
PyMuPDF4LLM 是一个强大的工具,可以从各种格式的 PDF 文件中提取内容信息,使 LLM 和 RAG 环境中的文档处理快速高效。从文本和图像的提取到词汇分析和表格转换,PyMuPDF4LLM 提供了一套灵活的工具,适用于多种 AI 和数据科学应用场景。本指南全面介绍了 PyMuPDF4LLM 的各项功能,为创建结构良好、可以直接使用的数据管道奠定了基础。
无论你是否在使用LlamaIndex或其他RAG系统,PyMuPDF4LLM都是你工具箱中不可或缺的工具,用来进行高质量的数据提取和准备。