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.pswp.cn/news/903737.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/903737.shtml
英文地址,請注明出處:http://en.pswp.cn/news/903737.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于深度學習的醫療診斷輔助系統設計

標題:基于深度學習的醫療診斷輔助系統設計 內容:1.摘要 隨著醫療數據的爆炸式增長和深度學習技術的飛速發展,開發基于深度學習的醫療診斷輔助系統具有重要的現實意義。本研究的目的在于設計一個高效、準確的醫療診斷輔助系統,以輔助醫生進行更精準的診斷…

Matlab/Simulink - BLDC直流無刷電機仿真基礎教程(四) - PWM調制模擬

Matlab/Simulink - BLDC直流無刷電機仿真基礎教程(四) - PWM調制模擬 前言一、PWM調制技術基本原理二、仿真模型中加入PWM調制三、逆變電路MOS管添加體二極管四、模擬添加機械負載五、仿真模型與控制框圖文章相關模型文件下載鏈接參考鏈接 前言 本系列文…

Curl 全面使用指南

Curl(Client URL)是一個跨平臺命令行工具,支持多種協議(HTTP/HTTPS/FTP/SFTP等),用于數據傳輸、API調試、文件上傳/下載等場景。以下從 核心功能、用戶疑問解答、高級技巧 三方面系統總結,并整合…

PyTorch中“原地”賦值的思考

在開發一個PyTorch模塊時,遇到了一個詭異的現象,將他描述出來就是下面這樣: f[..., :p_index - 1] f[..., 1:p_index] 這個操作將f張量的部分數值進行左移,我在模型訓練的時候還能正常跑,但是當我將模型部署到項目中…

什么是:云邊端一體化架構

什么是云邊端一體化架構 文章目錄 什么是云邊端一體化架構云、邊、端云計算邊緣計算終端設備 云邊端一體化協同云邊端一體化架構協同的流程云邊端一體化架構協同的應用云邊端一體化架構協同的價值云邊端一體化架構協同未來發展趨勢 云、邊、端 云(Cloud&#xff09…

gephi繪圖

參考: 如何在Gephi中正確的顯示中文? Gephi繪制網絡圖初步探索 gephi 節點標簽 調節_圖分析與可視化-從Gephi開始

馬克·雷伯特:用算法讓機器人飛奔的人

名人說:路漫漫其修遠兮,吾將上下而求索。—— 屈原《離騷》 創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder??) 馬克雷伯特:用算法讓機器人飛奔的人 一、天才的起點 在機器人領域,有一個名字如雷貫耳——馬克雷伯特(Marc Raibert)。作為波士頓動力公司(Boston…

三維裝配可視化界面開發筆記

三維裝配可視化界面開發筆記 項目概述 這是一個基于Vue.js和Three.js的三維裝配可視化系統,用于展示機械零部件的裝配和拆解過程。系統支持模型加載、拆解/裝配路徑生成、動畫展示和工藝流程圖生成等功能。 技術棧 前端框架: Vue 3 (使用組合式API)構建工具: Vi…

深?理解指針(8)

1.對上一篇的補充內容 typedef int* ptr_t #define PTR_T int* 這兩種寫法都是可以的 ptr_t p1, p2; //p1, p2 都是指針變量 PTR_T p3, p4; //p3 是指針變量, p4是整型變量 為什么p3 是指針變量, p4是整型變量呢? 因為PTR_T 真的被改為了 int* 在編譯器中…

neo4j暴露公網ip接口——給大模型聯通知識圖譜

特別鳴謝 我的領導,我的腦子,我的學習能力,感動了 1. 搭建知識圖譜數據庫(見上一章博客) 這里不加贅述了,請參考上一篇博客搭建 2. FastApi包裝接口 這里注意:NEO4J_URI不得寫http:,只能寫…

AI編程新選擇!VSCode + RooCode,超越Cursor?

在當今快節奏的開發環境中,AI編程助手已經成為提升開發效率的關鍵工具。然而,面對眾多選擇,開發者往往陷入糾結:如何在眾多AI編程工具中找到最適合自己的方案?尤其是當VSCode搭配RooCode時,相比Cursor&…

電子病歷高質量語料庫構建方法與架構項目(環境聆聽與自動化文檔生成篇)

電子病歷高質量語料庫的構建是一個復雜而系統的工程,涉及數據收集、清洗、標注、驗證等多個環節。在項目實施過程中,"環境聆聽"和"自動化文檔生成"是兩個關鍵支撐要素,前者確保項目能夠適應不斷變化的技術和業務環境,后者則保障項目過程的可追溯性和知…

Python協程入門指北

一、什么是協程? 協程(Coroutine)就像可以暫停執行的函數,能夠在執行過程中主動讓出控制權,等準備好后再繼續執行。 生活小例子 想象你在咖啡店排隊: 普通函數:必須一直排到取餐&#xff08…

mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz的下載安裝和使用

資源獲取鏈接: mysql-5.7.24-linux-glibc2.12-x86-64.tar.gz和使用說明資源-CSDN文庫 詳細作用 數據庫服務器的核心文件: 這是一個壓縮包,解壓后包含 MySQL 數據庫服務器的可執行文件、庫文件、配置文件模板等。 它用于在 Linux 系統上安裝…

C++筆記-繼承(下)(包含派生類的默認成員函數,菱形繼承等)

一.派生類的默認成員函數 1.14個常見默認成員函數 默認成員函數,默認的意思就是指我們不寫,編譯器會自動為我們生成一個,那么在派生類中,這幾個成員函數是如何生成的呢? 1.派生類的構造函數必須調用基類的構造函數初…

C++中指針使用詳解(3)數組、指針和函數參數傳遞的底層 ABI實現

要深入理解 數組、指針和函數參數傳遞 的底層 ABI(Application Binary Interface)實現,需要從以下幾個維度出發進行學習: 一、什么是 ABI? ABI 是編譯器和操作系統之間的協定,規定了: 函數如何…

【RustDesk 】中繼1:壓力測試 Python 版 RustDesk 中繼服務器

測試 Python 版 RustDesk 中繼服務器 測試我們實現的中繼服務器有幾種方法,從簡單到復雜依次如下: 1. 基本連接測試客戶端 創建一個簡單的測試客戶端來驗證中繼服務器的基本功能: 2. 用兩個測試客戶端測試中繼功能 要測試完整的中繼功能,你需要運行兩個客戶端實例來模擬…

Spring Boot集成Spring Cloud 2024(不使用Feign)

本文介紹Spring Boot集成Spring Cloud 2024,且不使用Feign,而是采用Spring 6自帶的HttpExchange方式進行服務調用的詳細步驟: 環境準備 Spring Boot版本:推薦使用Spring Boot 3.4.1及以上版本,以更好地與Spring Clou…

vue中$set原理

Vue 中的 $set 方法(Vue.set)主要用于 向響應式對象中添加一個新的屬性,并確保這個新屬性是響應式的,能夠觸發視圖更新。 📌 背景問題:為什么需要 $set? 在 Vue 2 中,直接給對象新增…

Superset二次開發之深度解讀系列:1.概述

Apache Superset 是一款現代化的企業級商業智能 Web 應用程序,專為數據探索和可視化而設計。本概述介紹了 Superset 的架構、核心組件和主要功能,以幫助開發人員了解該系統的工作原理。 What is Apache Superset? Apache Superset 是一個開源數據探索…