文章目录

  • LangChain-Unstructured 基础使用:PDF 与 Markdown 处理解析
    • 一、核心依赖与库说明
    • 二、核心类与方法详解
      • 1.UnstructuredLoader
        • (1)类原型与核心功能
        • (2)初始化参数详解
        • (3)核心方法详解
          • ① `load()`
          • ② `lazy_load()`
          • ③ `aload()`(异步)
          • ④ `alazy_load()`(异步)
          • ⑤ `load_and_split()`
        • (3)使用示例
          • 示例 1:解析本地 PDF 文件(本地引擎,带后处理)
          • 示例 2:通过 URL 加载网页内容
          • 示例 3:使用 API 解析扫描型 PDF(OCR 识别)
      • 2. UnstructuredFileLoader
      • 3. `UnstructuredPDFLoader` 与 `UnstructuredMarkdownLoader`
        • `UnstructuredPDFLoader`(PDF 专用)
        • `UnstructuredMarkdownLoader`(Markdown 专用)
    • 三、PDF 解析实战示例
      • 示例 1:高精度解析含表格的 PDF
      • 示例 2:处理扫描型 PDF(OCR 识别)
    • 四、Markdown 解析实战示例
      • 示例 3:解析含复杂结构的 Markdown
    • 五、进阶技巧:后处理函数与元素过滤

LangChain-Unstructured 基础使用:PDF 与 Markdown 处理解析

LangChain-Unstructured 作为 LangChain 生态中处理非结构化文档的核心工具,提供了丰富的类和方法来解析 PDF 和 Markdown 等格式。本文将系统讲解其核心库、关键类、方法参数及实战示例,帮助你全面掌握文档解析流程。

一、核心依赖与库说明

在使用 LangChain-Unstructured 处理 PDF 和 Markdown 时,需了解以下核心依赖及其作用:

库名称功能说明必备性
langchain-communityLangChain 社区版,包含 UnstructuredFileLoader 等核心解析类必需
unstructured底层文档解析引擎,支持 20+ 文档格式的结构化转换必需
unstructured[pdf]unstructured 的 PDF 解析扩展,包含 pdfminerpypdf 等解析器处理 PDF 时必需
unstructured[md]Markdown 解析扩展,支持标题、列表、代码块等元素识别处理 Markdown 时必需
pdf2image将 PDF 页面转换为图像(用于复杂排版或扫描件解析)可选(高精度 PDF 解析时需用)
python-multipart支持多部分文档解析(如包含附件的 PDF)可选

安装命令

# 基础安装(含 PDF 和 Markdown 支持)
pip install langchain-community unstructured[pdf,md] pdf2image

二、核心类与方法详解

LangChain-Unstructured 中最核心的类是 UnstructuredFileLoader(通用文件加载器)和衍生的 UnstructuredPDFLoaderUnstructuredMarkdownLoader(专用加载器)。以下详细讲解其用法。

1.UnstructuredLoader

UnstructuredLoaderlangchain-unstructured 库中用于加载和解析非结构化文档的核心类,它提供了更灵活的文档处理能力,支持本地文件、字节流、网页 URL 等多种输入方式,并可通过 API 或本地引擎解析文档。是处理非结构化文档的强大工具,其核心优势在于:

  1. 多输入支持:本地文件、字节流、网页 URL 全覆盖。
  2. 灵活解析方式:本地解析(离线)或 API 解析(高精度,支持复杂场景)。
  3. 可扩展处理:通过 post_processors 自定义文本清洗逻辑。
  4. 适配多场景:同步/异步、惰性/非惰性加载,满足不同性能需求。

使用时需根据文档类型(文本/扫描 PDF、网页等)和场景(离线/在线、同步/异步)选择合适的参数配置,解析后的 Document 对象可直接用于文本分割、向量存储等后续步骤,为 LLM 应用(如问答、摘要)提供结构化输入。以下是其详细使用指南:

(1)类原型与核心功能

类定义

class langchain_unstructured.document_loaders.UnstructuredLoader(file_path: str | Path | list[str] | list[Path] | None = None,*,file: IO[bytes] | list[IO[bytes]] | None = None,partition_via_api: bool = False,post_processors: list[Callable[[str], str]] | None = None,api_key: str | None = None,client: UnstructuredClient | None = None,url: str | None = None,web_url: str | None = None,**kwargs: Any,
)[source]

核心功能

  • 支持多种输入源:本地文件路径、字节流(IO[bytes])、网页 URL(web_url)。
  • 可选择本地解析或通过 Unstructured API 解析(partition_via_api 控制)。
  • 提供文档后处理能力(post_processors),如文本清洗、格式转换等。
  • 输出结构化的 Document 对象,包含文本内容(page_content)和元数据(metadata)。
(2)初始化参数详解
参数名类型功能说明示例值
file_pathstr / Path / 列表(可选)本地文件路径,支持单个或多个文件(列表形式)。与 fileweb_url 互斥,三选一。"./report.pdf"["./a.pdf", "./b.md"]
fileIO[bytes] / 列表(可选)字节流对象(如打开的文件句柄),支持单个或多个。用于直接处理内存中的文件数据。open("doc.pdf", "rb")
web_urlstr(可选)网页 URL,用于加载并解析网页内容(自动提取文本和结构)。"https://example.com/article"
partition_via_apibool(默认 False)是否通过 Unstructured API 解析文档(需配置 api_key)。False 则使用本地引擎解析。True(使用 API)、False(本地解析)
post_processors列表[Callable[[str], str]](可选)文本后处理函数列表,每个函数接收字符串并返回处理后的字符串(如去除多余空格、替换特殊字符)。[lambda x: x.strip(), lambda x: x.replace("\n", " ")]
api_keystr(可选)Unstructured API 的密钥,当 partition_via_api=True 时必填。可通过环境变量 UNSTRUCTURED_API_KEY 配置。"your_api_key_here"
clientUnstructuredClient(可选)自定义的 UnstructuredClient 实例,用于高级 API 配置(如超时设置、代理等)。UnstructuredClient(api_key="key", timeout=30)
urlstr(可选)Unstructured API 的服务地址,默认使用官方地址。仅当 partition_via_api=True 时有效。"https://custom-unstructured-api.com"
**kwargs任意键值对传递给底层解析引擎的参数,如 strategy="hi_res"(高精度解析)、ocr_languages="chi_sim"(OCR 语言)等。strategy="hi_res", pdf_infer_table_structure=True
coordinatesbool类型配置是否在元数据中保留元素的坐标信息:
①启用后,解析结果的 metadata 会包含每个元素(如标题、段落)在文档中的位置坐标(如像素坐标、页面范围);
②适用于需要定位文本在原始文档中物理位置的场景(如高亮显示、文档对比,像有表格提取解析需求则避开)。
True
(3)核心方法详解
load()
load()list[Document]
  • 功能:同步加载并解析文档,返回 Document 对象列表。
  • 适用场景:中小型文件,需一次性获取所有结果。
lazy_load()
lazy_load() → Iterator[Document]
  • 功能:同步惰性加载,返回迭代器,逐次生成 Document 对象。
  • 适用场景:大型文件或批量处理,减少内存占用。
aload()(异步)
async aload()list[Document]
  • 功能:异步加载并解析文档,返回 Document 列表。适用于异步代码环境(如 asyncio)。
alazy_load()(异步)
async alazy_load() → AsyncIterator[Document]
  • 功能:异步惰性加载,返回异步迭代器,通过 async for 逐次获取 Document
load_and_split()
load_and_split(text_splitter: TextSplitter | None = None)list[Document]
  • 功能:加载文档后按指定的 TextSplitter 拆分内容,返回拆分后的 Document 片段(用于 RAG 等场景)。
  • 参数:text_splitter 为文本分割器,默认使用 RecursiveCharacterTextSplitter
(3)使用示例
示例 1:解析本地 PDF 文件(本地引擎,带后处理)
from langchain_unstructured.document_loaders import UnstructuredLoader# 定义后处理函数:去除空白并替换换行
def clean_text(text: str) -> str:return text.strip().replace("\n", " ")# 初始化加载器
loader = UnstructuredLoader(file_path="./example.pdf",partition_via_api=False,  # 本地解析post_processors=[clean_text],  # 应用文本清洗strategy="hi_res",  # 高精度解析pdf_infer_table_structure=True  # 解析表格结构
)# 加载文档
documents = loader.load()# 输出结果
print(f"解析得到 {len(documents)} 个文档元素")
print(f"第一个元素类型:{documents[0].metadata['category']}")
print(f"内容预览:{documents[0].page_content[:200]}")

预期输出

解析得到 15 个文档元素
第一个元素类型:Title
内容预览:2024 年技术趋势报告 本报告总结了 2024 年人工智能、区块链等领域的核心趋势,包含市场数据和案例分析。以下为主要内容:...

结果分析

  • 本地解析模式无需 API 密钥,适合离线场景。
  • post_processors 成功去除了文本中的多余空白和换行,使内容更整洁。
  • strategy="hi_res" 确保了复杂排版(如表格)的准确解析,元数据 category 标记了元素类型(标题、段落等)。
示例 2:通过 URL 加载网页内容
from langchain_unstructured.document_loaders import UnstructuredLoader# 初始化加载器(解析网页)
loader = UnstructuredLoader(web_url="https://example.com/ai-trends",  # 网页 URLpartition_via_api=False  # 本地解析网页
)# 惰性加载(逐元素获取)
for doc in loader.lazy_load():print(f"元素类型:{doc.metadata['category']}")print(f"内容:{doc.page_content[:150]}\n---")

预期输出

元素类型:Title
内容:2024 年人工智能发展趋势
---
元素类型:NarrativeText
内容:随着大模型技术的成熟,2024 年人工智能在各行各业的应用进一步深化,尤其是在医疗、教育和制造业...
---
元素类型:ListItem
内容:- 多模态模型成为主流,跨媒体理解能力显著提升
---

结果分析

  • web_url 参数直接加载网页并提取结构化元素(标题、段落、列表等),元数据 category 标记了元素类型。
  • lazy_load() 逐次返回元素,适合处理长网页,避免一次性加载占用过多内存。
示例 3:使用 API 解析扫描型 PDF(OCR 识别)
from langchain_unstructured.document_loaders import UnstructuredLoader
import os# 配置 API 密钥(也可通过环境变量设置)
os.environ["UNSTRUCTURED_API_KEY"] = "your_api_key"# 初始化加载器(API 解析 + OCR)
loader = UnstructuredLoader(file_path="./scan_pdf.pdf",  # 扫描型 PDF(图片内容)partition_via_api=True,  # 使用 API 解析ocr_languages="eng+chi_sim"  # 支持中英双语 OCR
)# 异步加载(适合 API 调用,避免阻塞)
import asyncio
async def main():docs = await loader.aload()print(f"OCR 解析结果:{docs[0].page_content[:300]}")asyncio.run(main())

预期输出

OCR 解析结果:这是一份扫描的报告,包含中英文内容。2024 年全球 AI 市场规模预计达到 2 万亿美元,同比增长 40%。Key points: 1. 生成式 AI 商业化加速;2. 边缘 AI 设备普及...

结果分析

  • partition_via_api=True 启用 Unstructured API,结合 OCR 技术成功识别扫描型 PDF 中的文本。
  • ocr_languages 指定识别语言,确保中英双语内容准确提取。
  • 异步方法 aload() 适合 API 调用场景,提高代码效率。

2. UnstructuredFileLoader

UnstructuredFileLoader 是 LangChain-Unstructured 中设计最通用的本地文件加载器,其核心定位是作为各类非结构化文档(包括但不限于 PDF、Markdown、Word、HTML、TXT 等本地文件)的统一解析入口。它的底层通过调用 unstructured 库的多格式解析能力,能够根据文件的后缀名自动匹配对应的解析引擎(例如对 .pdf 文件启用 PDF 解析器,对 .md 文件启用 Markdown 解析器),无需开发者手动指定文件类型。

类原型

class UnstructuredFileLoader(BaseLoader):def __init__(self,file_path: Union[str, Path],mode: str = "single",post_processors: Optional[List[Callable[[List[Element]], List[Element]]]] = None,**unstructured_kwargs: Any,) -> None:"""参数说明:- file_path: 文件路径(字符串或 Path 对象)- mode: 解析模式("single" 合并为单个文档;"elements" 按元素拆分)- post_processors: 解析后处理函数列表(如过滤空文本)-** unstructured_kwargs: 传递给 unstructured 库的原生参数"""

核心参数解析

参数名类型功能详解示例值
file_pathstr/Path待解析文件的本地路径(必填)“./docs/report.pdf”
modestr解析后文档的组织方式:
① “single”:所有内容合并为一个 Document 对象
② “elements”:按元素(标题、段落等)拆分为多个 Document 对象
“elements”
post_processorsList[Callable]对解析后的元素列表进行处理的函数(如过滤空白、合并短文本)[lambda els: [e for e in els if e.text.strip()]]
strategystr解析策略(通过 unstructured_kwargs 传递):
① “fast”:快速解析(优先文本提取)
② “hi_res”:高精度解析(保留复杂结构)
③ “ocr_only”:强制 OCR 识别(扫描件)
“hi_res”
pdf_infer_table_structurebool是否解析 PDF 表格结构(仅 PDF 有效),设为 True 时表格转为 Markdown 格式True
md_start_tag/md_end_tagstrMarkdown 解析时的起始/结束标记(用于提取文档片段)“”, “”

方法:load()

功能:执行解析并返回文档列表
返回值:List[Document](每个 Documentpage_content 文本和 metadata 元数据)

简单使用示例

from langchain_community.document_loaders import UnstructuredFileLoader# 初始化加载器,解析一个简单的TXT文件(通用加载器支持多格式)
loader = UnstructuredFileLoader(file_path="./sample.txt",  # 任意格式文件路径mode="single",  # 合并为单个文档strategy="fast"  # 快速解析模式
)# 执行解析
documents = loader.load()# 输出结果
print(f"解析得到的文档数量:{len(documents)}")
print(f"文档内容预览:{documents[0].page_content[:200]}")
print(f"文档元数据:{documents[0].metadata}")

预期运行结果

解析得到的文档数量:1
文档内容预览:这是一个示例文本文件,包含简单的段落内容。
它用于演示UnstructuredFileLoader的基本功能,
该加载器能够自动识别文件类型并提取文本。
文档元数据:{'source': './sample.txt', 'filename': 'sample.txt'}

结果分析

  • 示例中使用 UnstructuredFileLoader 解析 TXT 文件,无需额外配置格式参数,体现了其“通用”特性;
  • mode="single" 模式下,所有文本被合并为一个 Document 对象,适合需要完整文本的场景;
  • 元数据中包含文件来源(source)和文件名(filename),便于追踪文档原始位置。

3. UnstructuredPDFLoaderUnstructuredMarkdownLoader

UnstructuredLoader 的子类,预配置了对应格式的解析参数,使用更简洁。

UnstructuredPDFLoader(PDF 专用)

UnstructuredPDFLoader 是针对 PDF 格式优化的专用加载器,继承自 UnstructuredFileLoader。它在通用加载器的基础上,预设了 PDF 解析的专属参数和引擎(如默认启用 pdfminer 解析器),能够更精准地处理 PDF 特有的结构(如页面布局、字体样式、嵌入表格等)。对于包含复杂排版(如多列文本、跨页表格、水印)的 PDF 文档,该加载器能通过内置的格式适配逻辑减少文本错乱问题。此外,它原生支持 PDF 特有的解析参数(如 pdf_infer_table_structure 用于表格识别),无需通过 unstructured_kwargs 间接传递,提升了代码的可读性。

类原型

class UnstructuredPDFLoader(UnstructuredFileLoader):def __init__(self,file_path: Union[str, Path],mode: str = "single",post_processors: Optional[List[Callable[[List[Element]], List[Element]]]] = None,**unstructured_kwargs: Any,) -> None:super().__init__(file_path, mode, post_processors,** unstructured_kwargs)

核心参数解析(与父类一致,重点强调 PDF 适配特性)

参数名类型功能详解(PDF 场景下)
file_pathstr/Path待解析 PDF 文件的本地路径(必填),需确保文件后缀为 .pdf
modestr解析模式:
- “single”:合并所有页面内容为单个文档
- “elements”:按 PDF 中的元素(标题、表格等)拆分
post_processorsList[Callable]针对 PDF 解析结果的后处理函数(如过滤页眉页脚、合并跨页段落)
**unstructured_kwargs任意键值对PDF 专用解析参数:
- strategy:解析策略(“hi_res” 适合复杂排版 PDF)
- pdf_infer_table_structure:是否解析表格结构
- page_numbers:指定解析的页码列表(如 [1,3,5]
  • 与通用加载器的区别:默认启用 PDF 专用解析引擎,无需额外指定文件类型。

简单使用示例

from langchain_community.document_loaders import UnstructuredPDFLoader# 初始化PDF专用加载器,解析含标题和段落的PDF
loader = UnstructuredPDFLoader(file_path="./report.pdf",mode="elements",  # 按元素拆分strategy="fast"  # 快速解析
)# 执行解析
documents = loader.load()# 输出结果
print(f"解析得到的元素数量:{len(documents)}")
# 打印第一个元素的类型和内容
print(f"第一个元素类型:{documents[0].metadata['element_type']}")
print(f"第一个元素内容:{documents[0].page_content[:150]}")

预期运行结果

解析得到的元素数量:8
第一个元素类型:Title
第一个元素内容:2024年人工智能发展报告
========================================
发布日期:2024年1月

结果分析

  • 专用加载器自动识别 PDF 中的标题元素(element_type="Title"),体现了对 PDF 格式的针对性优化;
  • mode="elements" 模式下,文档按语义单元拆分,便于后续按元素类型(标题/段落等)筛选内容;
  • 无需手动指定文件类型,加载器默认使用 PDF 解析引擎,简化了配置。
UnstructuredMarkdownLoader(Markdown 专用)

UnstructuredMarkdownLoader 是专为 Markdown 格式设计的加载器,继承自 UnstructuredFileLoader。它深度适配 Markdown 的语法规则,能够精准识别标题层级(#######)、列表(有序/无序)、代码块(```包裹)、引用(> 开头)等特有元素,并在元数据中标记对应的 element_type(如 HeaderListItemCode)。对于包含嵌套结构(如列表中嵌套代码块)的复杂 Markdown 文档,该加载器能保持元素间的层级关系,避免解析错乱。与通用加载器相比,它无需自动判断文件类型,直接调用 Markdown 专用解析逻辑,解析效率和精度更高。

类原型

class UnstructuredMarkdownLoader(UnstructuredFileLoader):def __init__(self,file_path: Union[str, Path],mode: str = "single",post_processors: Optional[List[Callable[[List[Element]], List[Element]]]] = None,**unstructured_kwargs: Any,) -> None:super().__init__(file_path, mode, post_processors,** unstructured_kwargs)

核心参数解析(与父类一致,重点强调 Markdown 适配特性)

参数名类型功能详解(Markdown 场景下)
file_pathstr/Path待解析 Markdown 文件的本地路径(必填),需确保文件后缀为 .md.markdown
modestr解析模式:
① “single”:合并所有内容为单个文档
② “elements”:按 Markdown 元素(标题、列表等)拆分
post_processorsList[Callable]针对 Markdown 解析结果的后处理函数(如过滤注释、合并相邻文本)
**unstructured_kwargs任意键值对Markdown 专用解析参数:
md_start_tag/md_end_tag:提取指定标记包裹的内容
include_headers_footers:是否包含文档首尾的注释内容
  • 特性:自动识别 Markdown 中的标题(#)、列表(-/*)、代码块(```)等元素。

简单使用示例

from langchain_community.document_loaders import UnstructuredMarkdownLoader# 初始化Markdown专用加载器,解析含列表的文档
loader = UnstructuredMarkdownLoader(file_path="./guide.md",mode="elements"  # 按元素拆分
)# 执行解析
documents = loader.load()# 筛选列表项元素
list_items = [doc for doc in documents if doc.metadata["element_type"] == "ListItem"]# 输出结果
print(f"解析得到的列表项数量:{len(list_items)}")
print(f"第一个列表项内容:{list_items[0].page_content}")

预期运行结果

解析得到的列表项数量:3
第一个列表项内容:- 安装依赖:`pip install langchain-community unstructured`

结果分析

  • 专用加载器精准识别 Markdown 中的列表项(element_type="ListItem"),保留了原始格式(包括 - 符号和代码块标记);
  • 对于技术文档等富含结构化元素的 Markdown 文件,这种针对性解析能有效分离不同类型的内容,便于后续处理(如单独提取代码块)。

三、PDF 解析实战示例

示例 1:高精度解析含表格的 PDF

解析包含标题、段落和表格的复杂 PDF,保留表格结构。

from langchain_community.document_loaders import UnstructuredPDFLoader# 1. 初始化加载器(高精度模式 + 解析表格)
loader = UnstructuredPDFLoader(file_path="./example_pdf.pdf",mode="elements",  # 按元素拆分strategy="hi_res",  # 高精度解析pdf_infer_table_structure=True  # 解析表格为 Markdown 格式
)# 2. 执行解析
documents = loader.load()# 3. 输出解析结果(筛选关键元素)
print(f"共解析出 {len(documents)} 个元素")
for doc in documents[:4]:  # 打印前4个元素print(f"\n类型:{doc.metadata['element_type']}")print(f"页码:{doc.metadata['page_number']}")print(f"内容:{doc.page_content[:150]}...")  # 预览前150字符

预期输出(这里具体内容根据文件内容来定,下面输出仅作参考)

共解析出 12 个元素类型:Title
页码:1
内容:2023 人工智能行业报告...类型:NarrativeText
页码:1
内容:人工智能(AI)行业在 2023 年迎来爆发式增长,全球市场规模突破 1.5 万亿美元,同比增长 37%...类型:Table
页码:2
内容:| 领域       | 市场规模(亿美元) | 增长率 |
|------------|------------------|--------|
| 计算机视觉   | 4200             | 45%    |
| 自然语言处理 | 3800             | 52%    |...类型:ListItem
页码:3
内容:1. 技术趋势:多模态模型成为主流,跨领域融合能力显著提升...

结果分析

  • 解析结果按元素类型(标题、正文、表格、列表项)拆分,元数据包含页码和类型,便于后续筛选。
  • 表格被转为 Markdown 格式(| 字段 | 值 |),保留了原始结构,可直接用于 LLM 处理或转换为 DataFrame。

示例 2:处理扫描型 PDF(OCR 识别)

对无法直接复制文本的扫描件 PDF,使用 OCR 策略解析。

loader = UnstructuredPDFLoader(file_path="./scan_pdf.pdf",  # 扫描型 PDF(图片内容)mode="single",  # 合并为单个文档strategy="ocr_only",  # 强制 OCR 识别ocr_languages="eng+chi_sim"  # 支持英文和中文
)documents = loader.load()
print(f"OCR 解析结果:\n{documents[0].page_content[:500]}")

预期输出

OCR 解析结果:
这是一份扫描的中文报告,包含中英文混合内容。
报告摘要:
2023 年全球 AI 专利申请量达 12 万件,其中中国占比 45%,位居全球第一。
Key Findings:
- AI 芯片性能提升 300%,成本下降 50%...

结果分析

  • strategy="ocr_only" 强制启用 OCR 引擎,即使 PDF 是图片也能提取文本。
  • ocr_languages 指定识别语言(chi_sim 为简体中文),确保多语言内容准确解析。

四、Markdown 解析实战示例

示例 3:解析含复杂结构的 Markdown

解析包含标题、代码块、公式的 Markdown 文件。

from langchain_community.document_loaders import UnstructuredMarkdownLoader# 1. 初始化加载器
loader = UnstructuredMarkdownLoader(file_path="./example_md.md",mode="elements",  # 按元素拆分md_start_tag="<CONTENT>",  # 可选:仅解析标签内的内容md_end_tag="</CONTENT>"
)# 2. 执行解析
documents = loader.load()# 3. 输出解析结果
for doc in documents[:3]:print(f"\n类型:{doc.metadata['element_type']}")print(f"内容:{doc.page_content[:200]}...")

预期输出

类型:Header
内容:# 机器学习工作流详解...类型:Paragraph
内容:机器学习工作流包含数据收集、预处理、模型训练、评估四个核心阶段,各阶段需紧密配合...类型:Code
内容:```python
# 数据预处理示例
import pandas as pd
df = pd.read_csv("data.csv")
df = df.dropna()  # 去除缺失值
```...

结果分析

  • Markdown 中的元素被精准识别:Header(标题)、Paragraph(段落)、Code(代码块)。
  • 通过 md_start_tagmd_end_tag 可提取文档中的特定片段(如仅解析 <CONTENT> 标签包裹的内容),适合处理大型文档。

五、进阶技巧:后处理函数与元素过滤

解析后的元素可能包含空白文本或冗余内容,可通过 post_processors 优化。

from langchain_community.document_loaders import UnstructuredFileLoader# 定义后处理函数:过滤空白文本 + 合并短文本
def filter_and_merge(elements):# 1. 过滤空白元素filtered = [e for e in elements if e.text.strip() and len(e.text) > 50]# 2. 合并短文本(小于200字符的相邻元素)merged = []current = []for e in filtered:if current and len(" ".join([c.text for c in current])) + len(e.text) < 200:current.append(e)else:if current:merged.append(current)current = [e]if current:merged.append(current)# 3. 转换为合并后的元素return [merged_elem[0].merge(merged_elem[1:]) for merged_elem in merged]# 应用后处理函数
loader = UnstructuredFileLoader(file_path="./example.pdf",mode="elements",post_processors=[filter_and_merge],  # 启用后处理strategy="fast"
)documents = loader.load()
print(f"后处理后剩余 {len(documents)} 个元素")

预期输出

后处理后剩余 8 个元素

结果分析

  • 后处理函数过滤了空白文本和过短元素(<50字符),并合并了相邻的短文本,减少了元素数量,便于后续处理。
  • element.merge() 方法保留了合并元素的元数据(如最早的页码),确保溯源性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/92756.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/92756.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/92756.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uboot使用指南

1.uboot的分类本节是 uboot 的使用&#xff0c;所以就直接使用正点原子已经移植好的 uboot&#xff0c;这个已经放到了开发板光盘中了&#xff0c;路径为&#xff1a;开发板光盘->1、程序源码->3、正点原子 Uboot 和 Linux 出厂源码->uboot-imx-2016.03-2.1.0-ge468cd…

学习率预热总结

学习率预热是什么&#xff1f; 学习率预热&#xff08;Learning Rate Warmup&#xff09; 是一种在深度学习训练初期逐渐增加学习率的策略。其核心思想是&#xff1a;在训练开始时使用较小的学习率&#xff0c;逐步增加到目标学习率&#xff0c;以避免模型参数在初始阶段因学习…

初识SYSCFG(System Configuration Controller)寄存器映射

SYSCFG&#xff08;System Configuration Controller&#xff09;寄存器映射的详细说明&#xff0c;以 STM32&#xff08;如 F1/F4/F7 系列&#xff09;为例。SYSCFG 控制器用于系统级配置&#xff0c;如外部中断映射、存储器重映射等。SYSCFG 寄存器映射概述 基地址&#xff1…

《P3403 跳楼机》

题目背景DJL 为了避免成为一只咸鱼&#xff0c;来找 srwudi 学习压代码的技巧。题目描述Srwudi 的家是一幢 h 层的摩天大楼。由于前来学习的蒟蒻越来越多&#xff0c;srwudi 改造了一个跳楼机&#xff0c;使得访客可以更方便的上楼。经过改造&#xff0c;srwudi 的跳楼机可以采…

【GPT-OSS 全面测评】释放推理、部署和自主掌控的 AI 新纪元

目录 一、背景与意义 二、核心参数对比 三、性能评测&#xff08;Benchmark&#xff09; 四、硬件适配与优化 五、安全性与风险 六、部署方式 七、适用场景 八、大型语言模型对比表&#xff08;2025 年 8 月版&#xff09; 总结 一、背景与意义 &#x1f4a1; 为什么…

医疗健康Agent:诊断辅助与患者管理的AI解决方案

医疗健康Agent&#xff1a;诊断辅助与患者管理的AI解决方案 &#x1f31f; Hello&#xff0c;我是摘星&#xff01; &#x1f308; 在彩虹般绚烂的技术栈中&#xff0c;我是那个永不停歇的色彩收集者。 &#x1f98b; 每一个优化都是我培育的花朵&#xff0c;每一个特性都是我放…

python魔法属性__doc__介绍

doc: 魔法属性。类、函数的描述信息。 __doc__在python中类的使用方法&#xff1a; class Person(object):"""人类---类的描述信息""" # 只能使用多行注释&#xff0c;单行注释无效passprint(Person.__doc__)运行结果如图所示&#xff1a;__d…

PostgreSQL 批量COPY导入优化参数配置

&#x1f4a1; 场景假设我们进行的是 频繁批量导入、对数据持久性容忍较高 的场景&#xff0c;比如日志表、缓存表、临时数据表等。如果系统崩溃可重导入&#xff0c;那我们就可以牺牲一点写入安全性来换极致性能。⚙️ 参数配置推荐&#xff08;postgresql.conf&#xff09;参…

BeanDefinition 与 Bean 生命周期(面试高频考点)

Bean 是 Spring 应用的核心组件&#xff0c;而 BeanDefinition 作为 Bean 的 “元数据描述”&#xff0c;贯穿了 Bean 从定义到销毁的全生命周期。理解 BeanDefinition 的加载注册机制&#xff0c;以及 Bean 的完整生命周期&#xff0c;是掌握 Spring 容器管理逻辑的关键&#…

node.js 学习笔记2 进程/线程、fs

进程和线程 进程&#xff1a;进行中的程序。比如有一段程序&#xff0c;程序已经载入内存了&#xff0c;CPU正在执行这段程序&#xff0c;这时候就会产生一个进程。进程&#xff0c;也可以看做程序的一次执行过程。 在window中打开任务管理器&#xff0c;可以查看计算机中的所…

【线性代数】其他

上一节&#xff1a;【线性代数】线性方程组与矩阵——&#xff08;3&#xff09;线性方程组解的结构 总目录&#xff1a;【线性代数】目录 文章目录11. 向量的内积、长度及正交性12. 方阵的特征值与特征向量13. 相似矩阵14. 对称矩阵的对角化15. 二次型及其标准形11. 向量的内积…

Spring Cloud LoadBalancer 实现自定义负载均衡策略(基于服务元数据筛选)

&#x1f4a1; Spring Cloud LoadBalancer 实现自定义负载均衡策略&#xff08;基于服务元数据筛选&#xff09; 在微服务架构中&#xff0c;我们常常希望对服务实例进行更精细的路由控制&#xff0c;例如&#xff1a; 灰度发布&#xff1a;不同环境访问不同版本操作系统差异&a…

Javaweb(1)html、css、js

注:图来自黑马 一、HTML(超文本标记语言) HTML 是网页的 “骨架”,负责定义页面的结构和内容,通过标签(tag)描述文本、图片、链接等元素。 1. 基础结构 文档声明:<!DOCTYPE html>(告诉浏览器这是 HTML5 文档)。 根标签:<html> 包裹整个文档,包含 &l…

MQTT:Dashboard数据集成(待补充)

目录一、工作原理二、基本使用三、连接器基本使用一、工作原理 数据集成使用sink和source组件与外部数据系统对接。 sink&#xff1a;用于将消息发送到外部数据系统&#xff0c;例如MySQL、Kafka或Http服务等。source&#xff1a;用于从外部数据系统接收消息&#xff0c;例如…

VisionMoE本地部署的创新设计:从架构演进到高效实现

本地部署VisionMoE的时代需求 在人工智能技术飞速发展的今天&#xff0c;视觉语言模型(Vision-Language Models, VLMs)已成为多模态理解的核心工具。然而&#xff0c;传统的大型视觉语言模型主要依赖云端GPU集群进行部署和推理&#xff0c;这不仅带来了高昂的运营成本&#xf…

机试备考笔记 8/31

2025年8月8日 小结&#xff1a;省流&#xff0c;写了俩道巨简单的&#xff08;被卡好久的传参指针和指针的引用的区别&#xff09;&#xff0c;一题递归&#xff08;意满&#xff09;&#xff1b;这笔记还是0809写的&#xff0c;啧&#xff0c;今天可能不写了&#xff0c;明天也…

java9学习笔记-part2

进程 API在 Java 9 之前&#xff0c;Process API 仍然缺乏对使用本地进程的基本支持&#xff0c;例如获取进程的 PID 和所有者&#xff0c;进程的开始时间&#xff0c;进程使用了多少 CPU 时间&#xff0c;多少本地进程正在运行等。Java 9 向 Process API 添加了一个名为 Proce…

AI智能编程工具汇总

AI智能编程工具汇总 以下是一份关于主流大模型开发工具的综合介绍&#xff0c;涵盖 Gemini CLI、Qwen-Code、Kimi K2 等关键工具的功能特性、安装方式与使用建议。 &#x1f31f; Gemini CLI 开发者&#xff1a;Google DeepMind 简介&#xff1a;命令行工具&#xff0c;用于调…

算法_python_牛客华为机试笔记_01

刷题是必须的&#xff0c;通过刷题以及别人对题目的解析&#xff0c;可以快速理解&#xff0c;提高效率。 00_题库与参考视频 华为机试_在线编程_牛客网 HJ3 明明的随机数_哔哩哔哩_bilibili 这套华为机试是华为笔试面试机考在线练习&#xff0c;共138道题&#xff0c;目前…

Java基础-完成局域网内沟通软件的开发

目录 案例要求&#xff1a; 实现思路&#xff1a; itheima-chat-server包 src com.itheima Constant类&#xff1a; Server类: ServerReaderThread类: itheima-chat-system包 src com.itheima.ui ChatEntryFrame类&#xff1a; ClientChatFrame类: ClientReaderTh…