当前位置: 首页 > ai >正文

partition_pdf 和chunk_by_title 的区别

from unstructured.partition.pdf import partition_pdf
from unstructured.chunking.title import chunk_by_title

partition_pdfchunk_by_title 初看有点像,都在"分块",但是它们的本质完全不一样

先看它们核心区别

partition_pdfchunk_by_title
是什么?PDF文件里的东西分成"小单元"(比如标题、正文、表格、图片)已经分好的小单元按照"标题"去组合成完整段落或章节
输入是?PDF 文件本身partition_pdf 处理后的小单元列表
输出是?小块小块的元素(title, text, table, image…),但每块可能很碎章节级别的大块,一章一章连在一起
什么时候用?一开始拿到 PDF 时,想"拆开原始内容"后处理,用来按"标题"智能组织文本
举例像拿一张纸撕成小碎片把碎片按章节重新组装成故事书

更直白的类比(重点)

假设我们有一份 PDF :

第一页:大标题:机器学习入门内容:机器学习是...第二页:小标题:监督学习内容:监督学习是...第三页:小标题:无监督学习内容:无监督学习是...

partition_pdf 做的事情是:

  • 机器地扫描这份 PDF,把它切成最小的独立单元
    • 一个标题是一个单元
    • 一个段落是一个单元
    • 一个表格是一个单元
    • 一个图片是一个单元
  • 它分得非常细!
  • 得到的列表元素长得像:
[标题:机器学习入门]
[段落:机器学习是...]
[标题:监督学习]
[段落:监督学习是...]
[标题:无监督学习]
[段落:无监督学习是...]

注意:这里标题和正文是分开的,互相不连着!


chunk_by_title 做的事情是:

  • 拿到上面这些小碎片后,按照标题出现的位置智能组合,形成一个个逻辑完整的块。
  • 比如遇到一个标题,就开始收集下面的段落,一直到下一个标题。
  • 最后变成:
【第1块】机器学习入门机器学习是...
【第2块】监督学习监督学习是...
【第3块】无监督学习无监督学习是...

感觉很像一章一章的组织成册


总结成一句大白话

partition_pdf 是打碎 PDF 的锤子,
chunk_by_title 是按标题把碎片重新拼起来的胶水。

它俩是一个在"碎",一个在"组合",是配合使用的。


再用代码流程举例

from unstructured.partition.pdf import partition_pdf
from unstructured.chunking.title import chunk_by_title# 先拿到碎片(小元素)
elements = partition_pdf(filename="example.pdf")  
# elements 是列表,每一项是一个小块(标题/段落/表格/图片等),彼此独立# 然后按标题组合
chunks = chunk_by_title(elements)  
# chunks 是列表,每一项是按标题组织好的完整小节

直观对比一下数据结构

partition_pdf 后:

[Element(type="Title", text="机器学习入门"),Element(type="NarrativeText", text="机器学习是..."),Element(type="Title", text="监督学习"),Element(type="NarrativeText", text="监督学习是..."),Element(type="Title", text="无监督学习"),Element(type="NarrativeText", text="无监督学习是..."),
]

每个Element是小碎块,标题和正文是分开的。


chunk_by_title 后:

[Chunk(text="机器学习入门\n机器学习是..."),Chunk(text="监督学习\n监督学习是..."),Chunk(text="无监督学习\n无监督学习是..."),
]

每个Chunk是完整的一章章的内容了(标题和正文合在一起)。


为什么要这样设计?

  • PDF 文件的格式五花八门,直接提取文本经常乱七八糟。
  • 先 partition(打碎)是为了最大限度识别结构
  • 再 chunk(组装)是为了适配各种应用,比如做摘要、问答、索引库。

👉 否则你直接全文提取,一大坨,分不清哪里是标题哪里是正文,后续很难做高质量处理。


小结核心思想

阶段目的结果
partition_pdf最大限度地细致识别 PDF 结构生成"元素列表"
chunk_by_title根据标题组织结构,便于后续处理生成"章节列表"

💪 一个超直观的小演示

场景设定(假设有一个简单的 PDF)

PDF 内容:

第1页:【大标题】人工智能入门【正文】人工智能是计算机科学的一个分支...第2页:【小标题】机器学习【正文】机器学习是人工智能的重要子领域...第3页:【小标题】深度学习【正文】深度学习是机器学习中的一种方法...

第一步 —— partition_pdf 处理后的结果(碎片元素)

partition_pdf(filename="xxx.pdf") 得到的 elements 可能是这样:

elements = [Element(type="Title", text="人工智能入门"),Element(type="NarrativeText", text="人工智能是计算机科学的一个分支..."),Element(type="Title", text="机器学习"),Element(type="NarrativeText", text="机器学习是人工智能的重要子领域..."),Element(type="Title", text="深度学习"),Element(type="NarrativeText", text="深度学习是机器学习中的一种方法..."),
]

特点:

  • 一个标题是一个元素
  • 一个正文是一个元素
  • 彼此是分开的
  • 没有合并

第二步 —— chunk_by_title 把碎片重新组织

调用 chunk_by_title(elements) 后,得到的 chunks 是:

chunks = [Chunk(text="人工智能入门\n人工智能是计算机科学的一个分支..."),Chunk(text="机器学习\n机器学习是人工智能的重要子领域..."),Chunk(text="深度学习\n深度学习是机器学习中的一种方法..."),
]

特点:

  • 一个 Chunk 里包含:
    • 当前的标题
    • 下面关联的正文
  • 自动组合在一起了
  • 更像一章一章的内容块了

过程动图类比(文字版)

[Title: 人工智能入门] ——→ 开始新块
[NarrativeText: 人工智能是...] ——→ 加到当前块[Title: 机器学习] ——→ 发现新标题!开始新块
[NarrativeText: 机器学习是...] ——→ 加到当前块[Title: 深度学习] ——→ 发现新标题!开始新块
[NarrativeText: 深度学习是...] ——→ 加到当前块

每遇到一个新的标题,就切断当前块,开启一个新的块。

对比一下结构变化(最直观表格版)

阶段内容结构
partition_pdf 后一堆小碎片:标题、正文互相独立
chunk_by_title 后每个标题带上对应正文,形成逻辑完整的小节

用代码跑一下:

from unstructured.partition.pdf import partition_pdf
from unstructured.chunking.title import chunk_by_title# 模拟 partition_pdf 出来的元素(实际是 Element 对象列表)
elements = [{"type": "Title", "text": "人工智能入门"},{"type": "NarrativeText", "text": "人工智能是计算机科学的一个分支..."},{"type": "Title", "text": "机器学习"},{"type": "NarrativeText", "text": "机器学习是人工智能的重要子领域..."},{"type": "Title", "text": "深度学习"},{"type": "NarrativeText", "text": "深度学习是机器学习中的一种方法..."},
]# 自己模拟 chunk_by_title 逻辑
chunks = []
current_chunk = Nonefor element in elements:if element["type"] == "Title":if current_chunk:chunks.append(current_chunk)current_chunk = element["text"] + "\n"else:  # 不是标题,就是正文if current_chunk is not None:current_chunk += element["text"] + "\n"# 别忘了把最后一块也加进去
if current_chunk:chunks.append(current_chunk)# 打印结果
for i, chunk in enumerate(chunks, 1):print(f"第 {i} 块内容:\n{chunk}")

输出结果就是一章一章组织好的内容了!✅


终极总结:

partition_pdf 是把 PDF 精确切成最细单元,chunk_by_title 是让这些单元恢复成有逻辑的大块。

它们是前后搭配使用的,缺一不可。

http://www.xdnf.cn/news/2949.html

相关文章:

  • package.json文件中的 ^ 和 ~
  • DOM 事件的处理通常分为三个阶段:捕获、目标、冒泡【前端示例】
  • 京东关键词与商品详情信息数据采集接口指南
  • python jupyter notebook
  • 如何搭建一个简单的文件服务器的方法
  • JavaScript学习教程,从入门到精通,jQuery快速入门指南(30)
  • 建立对人工智能(AI)的信任
  • Oracle11g——空表无法导出的问题
  • 软件分析师-第三遍-章节导图-13/14
  • 基础排序方法
  • 【C++11】新的类功能、lambda
  • SICAR 标准功能块 FB3352 (MODE)工作模式功能块
  • 是否想要一个桌面哆啦A梦的宠物
  • 特征工程四-2:使用GridSearchCV 进行超参数网格搜索(Hyperparameter Tuning)的用途
  • 基于开闭原则优化数据库查询语句拼接方法
  • KenticoCMS 文件上传导致xss漏洞复现(CVE-2025-2748)
  • RN 获取视频封面,获取视频第一帧
  • 【免费下载】1985-2023年全国土地利用数据
  • 《算法笔记》10.5小节——图算法专题->最小生成树 问题 B: Freckles
  • 当前HPLC载波无法满足全量数据分钟级采集需求的主要原因
  • STM32 SPI通信协议
  • 从整体上把握操作系统的作用,以及理解进程状态是什么
  • EtherCAT转Profinet网关,包装产线的“语言翻译器”
  • python:练习:2
  • 查看Mysql版本
  • c/c++之信号处理<signal.h>
  • 【vue3】黑马程序员前端Vue3小兔鲜电商项目【五】
  • 问题排查:calss extends 后页面加载不出来(忘记加super),打包后不报错;遇到问题可以适当出去走一下,让脑子休息一下
  • AimRT 从零到一:官方示例精讲 —— 五、Parameter示例.md
  • WPF(Windows Presentation Foundation)的内容模型