如何用Python LangChain框架的load()函数加载3-4个PDF文件?

摘要:加载 PDF 原始页面,保留完整内容不分割 在基于 LangChain 处理 PDF 文档的场景中,很多开发者默认使用的加载方式会自动将文档内容分割成小块,虽然便于后续检索,但有时我们更需要保留 PDF 原始页面的完整内容 —— 比如解析出
加载 PDF 原始页面,保留完整内容不分割 在基于 LangChain 处理 PDF 文档的场景中,很多开发者默认使用的加载方式会自动将文档内容分割成小块,虽然便于后续检索,但有时我们更需要保留 PDF 原始页面的完整内容 —— 比如解析出团通知书、合同类 PDF 时,按页码完整提取内容才能保证信息的完整性和上下文连贯。今天就和大家分享如何用 LangChain 精准加载 PDF 原始页面,完整保留每一页的全部内容。 核心需求与场景 日常处理 PDF 时,LangChain 的 PyPDFLoader 默认配合 split_text 等方法会把页面内容按字符数 / 分隔符拆分,这在需要完整页面信息的场景下并不适用: 解析出团通知书、合同等格式规整的 PDF,需按原始页码完整提取内容; 保留每页的元数据(页码、文件来源),便于后续按页管理和使用; 避免自动分割导致的内容碎片化,保证单页信息的完整性。 实现思路与特点 1. 核心加载逻辑 使用 LangChain 的 PyPDFLoader 时,load()方法会按 PDF 原始页码生成独立的 Document 对象,每个对象对应一页完整内容,且保留页码、文件路径等元数据。 2. 关键特性 内容完整性:每个 Document 对象对应 PDF 的一个原始页面,完整保留该页所有文本内容,无任何拆分; 元数据保留:可直接提取每个页面的页码(从 0 开始,可自行转换为日常计数)、文件来源路径等关键信息; 灵活遍历:可按页码遍历所有页面,按需提取指定页的内容,便于后续按页处理、输出或存储。 3. 实用扩展 加载完成后,可轻松实现: 按页码筛选指定页面的内容; 统计每一页的字符数,快速判断页面内容体量; 提取所有页面的元数据,生成 PDF 页面清单; 将完整页面内容写入文本文件、数据库,或对接大模型进行整页内容解析。 应用价值 这种加载方式特别适合需要完整 PDF 页面信息的业务场景: 文档解析:按原始页码完整提取通知书、合同、报告类 PDF 的内容,保证信息不缺失; 内容管理:按页存储 PDF 内容,便于后续按页码检索、修改和复用; 数据校验:可快速核对每页内容的完整性,避免因自动分割导致的信息遗漏。 总结 LangChain 的 PyPDFLoader 通过load()方法可直接加载 PDF 原始页面,无需自动分割,保留每页完整内容; 加载后生成的 Document 对象包含页码、文件来源等元数据,便于按页管理和使用; 该方式适配需要完整页面信息的场景,解决了自动分割导致的内容碎片化问题,提升 PDF 处理的精准性。 相比默认的分割加载方式,这种 “保留原始页面” 的加载思路更贴合格式规整、需完整信息的 PDF 处理场景,是 LangChain 处理 PDF 文档时的实用技巧。 实现代码如下: from langchain_community.document_loaders import PyPDFLoader # 仅加载PDF(不分割),保留原始页面完整内容 loader = PyPDFLoader("./txt/1129全景四川双飞8日出团通知书-2.pdf") pdf_docs = loader.load() # 核心区别:仅加载,无自动分割 # 遍历每个Document对象(对应PDF原始页码),提取并输出各属性 print("=" * 80) print("PDF加载结果详情(按原始页码展示)") # 标题调整为“加载”而非“分割” print("=" * 80) for idx, doc in enumerate(pdf_docs): # 提取核心属性(和原格式一致) page_content = doc.page_content # 对应页码的完整文本内容(无分割) page_num = doc.metadata.get("page", "未知页码") # 原始页码索引(从0开始) source_file = doc.metadata.get("source", "未知文件") # 文档来源路径 # 格式化输出(和原格式完全一致) print(f"\n【第 {idx + 1} 个页面】") # 调整描述为“页面”而非“文档块”,更贴合load()特性 print(f"1. 文档来源:{source_file}") print(f"2. 页码:第 {page_num + 1} 页") # 转换为日常计数(从1开始) print(f"3. 文本内容(字符数:{len(page_content)}):") print("-" * 60) print(page_content.strip()) # 去除首尾空白,保持内容整洁 print("-" * 60) # 汇总信息(调整描述,体现“加载页面数”而非“分割块数”) print(f"\n✅ 汇总:共加载出 {len(pdf_docs)} 个原始页面,文档来源为 {pdf_docs[0].metadata['source']}") 执行结果(内容太长截取部分内容): ================================================================================ PDF加载结果详情(按原始页码展示) ================================================================================ 【第 1 个页面】 1. 文档来源:./txt/1129全景四川双飞8日出团通知书-2.pdf 2. 页码:第 1 页 3. 文本内容(字符数:1315): ------------------------------------------------------------ 出团通知书 重要提示: 尊敬的游客:您好! 感谢您选择我们的服务,为保证您的顺利出行,现提示如下:...... ------------------------------------------------------------ 【第 2 个页面】 1. 文档来源:./txt/1129全景四川双飞8日出团通知书-2.pdf 2. 页码:第 2 页 3. 文本内容(字符数:877): ------------------------------------------------------------ 造成不必要的损失和麻烦。 3.出团前请认真检查自己的随身物品是否齐全,特别是身份证、护照等证件并随身携带,以保证自身顺利出入境。 4.长途旅行时注意保管贵重物品,现金、首饰、手机等贵重物品请随身携带,特别是护照和机票要妥善保管。...... 更多学习资料尽在 老虎网盘资源