用Python分割并高效處理PDF大文件

在處理大型PDF文件時,將它們分解成更小、更易于管理的塊通常是有益的。這個過程稱為分區,它可以提高處理效率,并使分析或操作文檔變得更容易。在本文中,我們將討論如何使用Python和為Unstructured.io庫將PDF文件劃分為更小的部分。

我們將使用兩個Python庫來完成此任務:

  • PyPDF2:一個可以讀、寫、合并和分割PDF文件的庫。
  • Unstructured.io:一個可以使用文檔圖像分析模型分割PDF文檔的庫。

在這里插入圖片描述

下面是完成這個任務的Python代碼:

from PyPDF2 import PdfReader, PdfWriter
from unstructured.partition.pdf import partition_pdfimport os
from os import path# Create the output directory if it doesn't exist
# os.makedirs('./output', exist_ok=True)
path = path.abspath(path.dirname(__file__))# pdf_file = path + '/sample01.pdf'filename =  path + "/sample02.pdf"# Read the original PDF
input_pdf = PdfReader(f'{filename}')batch_size = 2
num_batches = len(input_pdf.pages) // batch_size + 1filename = path + "/output" 
# Extract batches of 100 pages from the PDF
for b in range(num_batches):writer = PdfWriter()# Get the start and end page numbers for this batchstart_page = b * batch_sizeend_page = min((b+1) * batch_size, len(input_pdf.pages))# Add pages in this batch to the writerfor i in range(start_page, end_page):writer.add_page(input_pdf.pages[i])# Save the batch to a separate PDF filebatch_filename = f'{filename}-batch{b+1}.pdf'with open(batch_filename, 'wb') as output_file:writer.write(output_file)# Now you can use the `partition_pdf` function from Unstructured.io to analyze the batchelements = partition_pdf(filename=batch_filename)print(elements)# Do something with `elements`...# This will process without issue# 抽取表格數據elements = partition_pdf("copy-protected.pdf", strategy="hi_res")

第一步:讀PDF文件

首先,我們從PyPDF2庫導入必要的類:PdfReader和PdfWriter。PdfReader類用于讀取原始PDF文件,該文件存儲在名為“exam-prep”的子目錄中。

步驟2:分區PDF

我們決定批大小,即PDF的每個塊將包含的頁數。在本例中,我們選擇了100頁的批處理大小,但這可以根據您的需要進行調整。

然后通過將PDF中的總頁數除以批大小來計算批數量。添加1以確保在頁面總數不是批大小的倍數時捕獲所有剩余頁面。

步驟3:寫PDF塊

接下來,循環遍歷每個批處理,為每個批處理創建一個新的PdfWriter對象。對于每個批處理,我們計算起始頁碼和結束頁碼,并使用add_page方法將該范圍內的每個頁碼添加到PdfWriter。

一旦添加了批處理的所有頁面,我們將它們寫入‘output’子目錄下的新PDF文件中。每個塊的文件名包括原始文件名和批號。

步驟4:分析PDF塊

將PDF分成更小的塊后,現在可以使用來自非結構化的partition_pdf函數。IO庫來分析每個批處理。該函數使用文檔圖像分析模型對PDF文檔進行分段,并返回已解析PDF文檔頁面中出現的元素列表。

最后總結

將大型PDF文件劃分為更小的塊可以使它們更容易、容錯和消耗更少的內存。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/72932.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/72932.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/72932.shtml

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

相關文章

neo4j隨筆-將csv文件導入知識圖譜

目錄 導入前的準備 導入csv文件 導入nodes1.1.csv并動態為節點添加標簽 ?編輯導入relations1.1.csv并動態為關系添加標簽 結果 導入前的準備 我有兩個csv文件 nodes1.1.csv存放節點信息,用記事本打開,能正常顯示,且編碼為UTF-8,就可以…

cpu 多級緩存L1、L2、L3 與主存關系

現代 CPU 的多級緩存(L1、L2、L3)和主存(DRAM)構成了一個層次化的內存系統,旨在通過減少內存訪問延遲和提高數據訪問速度來優化計算性能。以下是對多級緩存和主存的詳細解析: 1. 緩存層次結構 現代 CPU 通…

C++:入門詳解(關于C與C++基本差別)

目錄 一.C的第一個程序 二.命名空間(namespace) 1.命名空間的定義與使用: (1)命名空間里可以定義變量,函數,結構體等多種類型 (2)命名空間調用(&#xf…

Python的學習篇(七)--網頁結構

七、網頁(HTML)結構 7.1 HTML介紹 HTML(Hyper Text Markup Language),超文本標記語言。 超文本:比文本的功能要強大,通過鏈接和交互式的方式來組織與呈現信息的文本形式。不僅僅有文本,還可以包含圖片、…

*VulnHub-FristiLeaks:1.3暴力解法、細節解法,主打軟硬都吃,隧道搭建、尋找exp、提權、只要你想沒有做不到的姿勢

*VulnHub-FristiLeaks:1.3暴力解法、細節解法,主打軟硬都吃,隧道搭建、尋找exp、提權、只要你想沒有做不到的姿勢 一、信息收集 1、掃靶機ip 經典第一步,掃一下靶機ip arp-scan -l 掃描同網段 nmap -sP 192.168.122.0/242、指紋掃描、端口…

PHP:格式化JSON為PHP語法格式

1. 原生函數 $arr [1,2,3,4]; $str var_export($a,true); var_dump($str); 2. 自定義方法 class Export{private static $space;private static function do($a, string $prev){$res ;$next $prev . self::$space;if (is_array($a)) {$res . [;foreach ($a as $k > $…

【Python 數據結構 9.樹】

我裝作漠視一切,其實我在乎的太多,但我知道抓得越緊越容易失去 —— 25.3.6 一、樹的基本概念 1.樹的定義 樹是n個結點的有限集合,n0時為空樹。當n大于0的時候,滿足如下兩個條件: ① 有且僅有一個特定的結點&#xff…

pyqt聯合designer的運用和設置

PyQt Designer 簡介 PyQt Designer 是一個用于創建和設計 PyQt 應用程序用戶界面的可視化工具。它允許用戶通過拖放方式添加和排列各種控件,如按鈕、文本框、滑塊等,并設置它們的屬性和樣式,從而快速構建出美觀且功能完整的 UI 界面。 Windows版本:【免費】安裝包別管啊啊…

純html文件實現目錄和文檔關聯

目錄結構 效果圖 代碼 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>項目結題報告</title><style lang"scss">::-webkit-scrollbar {width: 6px;height: 6px;}::-webkit-scro…

python用戶圖形界面wxpython庫安裝與使用

要開始使用 wxPython 庫來創建 Python 用戶圖形界面&#xff0c;首先需要安裝這個庫。在大多數情況下&#xff0c;你可以通過 pip 來安裝 wxPython。下面我會指導你完成安裝過程&#xff0c;并給出一個簡單的例子來展示如何使用 wxPython 創建一個基本的窗口應用程序。 安裝 w…

MongoDB winx64 msi包安裝詳細教程

首先我們可以從官網上選擇對應版本和對應的包類型進行安裝&#xff1a; 下載地址&#xff1a;Download MongoDB Community Server | MongoDB 這里可以根據自己的需求&#xff0c; 這里我選擇的是8.0.5 msi的版本&#xff0c;采用的傳統裝軟件的方式安裝。無需配置命令。 下載…

如何借助 ArcGIS Pro 高效統計基站 10km 范圍內的村莊數量?

在當今數字化時代&#xff0c;地理信息系統&#xff08;GIS&#xff09;技術在各個領域都發揮著重要作用。 特別是在通信行業&#xff0c;對于基站周邊覆蓋范圍內的地理信息分析&#xff0c;能夠幫助我們更好地進行網絡規劃、資源分配以及市場分析等工作。 今天&#xff0c;就…

saltstack通過master下發腳本批量修改minion_id,修改為IP

通過master下發腳本批量修改minion_id&#xff0c;以修改為IP為例 通過cmd.script遠程執行shell腳本修改minion_id&#xff0c;步驟如下: # 下發腳本并執行 >> salt old_minion_id cmd.script salt://modify_minion_id.sh saltenvdev #輸出結果 old_minion_id:Minion di…

【大模型】WPS 接入 DeepSeek-R1詳解,打造全能AI辦公助手

目錄 一、前言 二、WPS接入AI工具優勢??????? 三、WPS接入AI工具兩種方式 3.1 手動配置的方式 3.2 Office AI助手 四、WPS手動配置方式接入AI大模型 4.1 安裝VBA插件 4.1.1 下載VBA插件并安裝 4.2 配置WPS 4.3 WPS集成VB 4.4 AI助手效果測試 4.5 配置模板文…

《蒼穹外賣》SpringBoot后端開發項目重點知識整理(DAY1 to DAY3)

目錄 一、在本地部署并啟動Nginx服務1. 解壓Nginx壓縮包2. 啟動Nginx服務3. 驗證Nginx是否啟動成功&#xff1a; 二、導入接口文檔1. 黑馬程序員提供的YApi平臺2. YApi Pro平臺3. 推薦工具&#xff1a;Apifox 三、Swagger1. 常用注解1.1 Api與ApiModel1.2 ApiModelProperty與Ap…

Mysql5.7-yum安裝和更改mysql數據存放路徑-2020年記錄

記錄下官網里用yum rpm源安裝mysql, 1 官網下載rpm https://dev.mysql.com/downloads/repo/yum/ https://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html&#xff08;附官網操作手冊&#xff09; wget https://repo.mysql.com//mysql80-community-release…

HTML5(Web前端開發筆記第一期)

p.s.這是萌新自己自學總結的筆記&#xff0c;如果想學習得更透徹的話還是請去看大佬的講解 目錄 三件套標簽標題標簽段落標簽文本格式化標簽圖像標簽超鏈接標簽錨點鏈接默認鏈接地址 音頻標簽視頻標簽 HTML基本骨架綜合案例->個人簡介列表表格表單input標簽單選框radio上傳…

Oracle19c進入EM Express(Oracle企業管理器)詳細步驟

以下是使用Oracle 19c進入Oracle Enterprise Manager Database Express&#xff08;EM Express&#xff09;的詳細步驟&#xff1a; ### **步驟 1&#xff1a;確認EM Express配置狀態** 1. **登錄數據庫服務器** 使用Oracle用戶或管理員權限賬戶登錄操作系統。 2. **查看EM…

JSAR 基礎 1.2.1 基礎概念_空間小程序

JSAR 基礎 1.2.1 基礎概念_空間小程序 空間空間自由度可嵌入空間空間小程序 最新的技術進展表明&#xff0c;官網之前的文檔準備廢除了&#xff0c;基于xsml的開發將退出歷史舞臺&#xff0c;three.js和普通web結合的技術將成為主導。所以后續學習請移步three.js學習路徑&#…

JavaWeb-servlet6中重定向、轉發、cookie、session、文件上傳和下載

請求重定向 一個 web 資源收到客戶端請求后&#xff0c;通知客戶端去訪問另外一個 web 資源&#xff0c;這稱之為請求重定向。 使用response對象提供的sendRedirect()方法&#xff0c;可以將網頁重定向到另一個頁面。SendRedirect()方法的語法格式&#xff1a; response.send…