python將pdf轉txt,并切割ai

python將pdf轉txt,并切割ai

step1:pdf轉換

from PIL import Image
import pytesseract
import os
import tempfile
from pdf2image import convert_from_path# 設置 Tesseract 路徑
pytesseract.pytesseract.tesseract_cmd = r'C:\Users\wangrusheng\AppData\Local\Programs\Tesseract-OCR\tesseract.exe'# 設置 Poppler 路徑
POPPLER_PATH = r'C:\Users\wangrusheng\AppData\Local\Programs\poppler-24.08.0\Library\bin'def pdf_to_txt(input_pdf, output_txt):"""將PDF文件轉換為文本文件參數:input_pdf -- 輸入的PDF文件路徑output_txt -- 輸出的文本文件路徑"""# 創建臨時目錄存儲轉換后的圖片with tempfile.TemporaryDirectory() as temp_dir:# 將PDF轉換為圖片列表images = convert_from_path(input_pdf,poppler_path=POPPLER_PATH,  # 添加關鍵配置output_folder=temp_dir,dpi=300,fmt='jpeg',thread_count=4)# 打開輸出文件with open(output_txt, 'w', encoding='utf-8') as f:# 處理每一頁圖片for i, image in enumerate(images):try:# 使用OCR識別文字text = pytesseract.image_to_string(image,lang='chi_sim+eng+jpn+rus+tha+kor+ara'  # 中英文混合識別)# 寫入識別結果f.write(f"--- 第 {i + 1} 頁內容 ---\n")f.write(text.strip())f.write("\n\n")print(f"已處理第 {i + 1} 頁")except Exception as e:error_msg = f"第 {i + 1} 頁識別失敗: {str(e)}"print(error_msg)f.write(error_msg + "\n")print(f"\n轉換完成!結果已保存至: {output_txt}")if __name__ == "__main__":# 輸入PDF路徑input_pdf = r"C:\Users\wangrusheng\Downloads\sdf.pdf"# 輸出TXT路徑output_txt = os.path.join(os.path.dirname(input_pdf),os.path.splitext(os.path.basename(input_pdf))[0] + ".txt")# 執行轉換pdf_to_txt(input_pdf, output_txt)

step2:

import osdef read_txt_file(txt_path):"""讀取TXT文件內容"""with open(txt_path, 'r', encoding='utf-8') as f:return f.read()def split_text_by_size(text, max_bytes, output_dir):"""按文件大小切割文本(確保不截斷行和UTF-8字符):param text: 完整文本內容:param max_bytes: 每個文件的最大字節數:param output_dir: 輸出文件目錄:return: 生成的文件列表"""# 確保輸出目錄存在os.makedirs(output_dir, exist_ok=True)# 計算備注信息的字節大小(UTF-8編碼)note_text = """請ai保持批判性思維,模仿袁的口吻,講述材料中的歷史故事。具體要求如下:1.
風格: 采用經典的評書口吻和結構。例如,開頭要有上一回和下一回的標題,內容部分必須拆分小標題,小段落,能拆分的全部拆分2.
內容:?
嚴格遵循歷史: 只講述真實發生的事件、人物和時間,不能有任何虛構或戲說。?
邏輯連貫: 清晰解釋事件發生的原因、過程和結果。?
自動補全背景: 在故事中自然地融入必要的背景信息,讓邏輯連貫,轉場絲滑。3.
語言: 絕對簡單易懂,使用口語化的詞匯和短句,讓小學生能毫無障礙地聽懂故事里發生了什么事。可以用夸張,比喻,隱喻,諷刺等手法,但需基于史實。請從‘第一回:xxx’開始講起。
"""  # 修改后的固定備注信息note_bytes = note_text.encode('utf-8')note_size = len(note_bytes)# 調整最大字節數(預留備注信息空間)max_bytes = max_bytes - note_sizeif max_bytes <= 0:raise ValueError("文件大小設置過小,無法容納備注信息")# 初始化字母組合生成器def generate_suffix():for first in range(26):for second in range(26):yield f"{chr(97 + first)}{chr(97 + second)}"suffix_gen = generate_suffix()files_created = []encoded_text = text.encode('utf-8')  # 整個文本的UTF-8字節表示while encoded_text:# 獲取當前塊的最大字節數chunk_size = min(max_bytes, len(encoded_text))# 查找安全切割點(優先在換行符處切割)cut_index = chunk_sizeif b'\n' in encoded_text[:chunk_size]:# 查找最后一個換行符作為切割點cut_index = encoded_text.rindex(b'\n', 0, chunk_size) + 1else:# 嘗試在字符邊界處切割while cut_index > 0:try:# 驗證是否在完整字符處encoded_text[:cut_index].decode('utf-8')breakexcept UnicodeDecodeError:cut_index -= 1# 提取當前塊并更新剩余文本chunk = encoded_text[:cut_index]encoded_text = encoded_text[cut_index:]# 獲取下一個字母組合后綴suffix = next(suffix_gen)# 寫入文件(添加備注信息)output_file = os.path.join(output_dir, f"{suffix}.txt")with open(output_file, 'wb') as f:f.write(chunk)f.write(note_bytes)  # 在文件底部添加備注信息files_created.append(output_file)print(f"已創建: {output_file} (大小: {len(chunk) + note_size:,} 字節)")return files_createddef process_txt(input_txt, output_dir, max_size_kb=20):"""處理TXT文件:按大小切割:param input_txt: 輸入的TXT文件路徑:param output_dir: 輸出文件目錄:param max_size_kb: 每個文件的最大大小(KB)"""# 檢查文件是否存在if not os.path.exists(input_txt):raise FileNotFoundError(f"文件不存在: {input_txt}")# 讀取TXT文件text_content = read_txt_file(input_txt)if not text_content.strip():print("警告: 文件內容為空")# 按大小切割max_bytes = max_size_kb * 1024  # KB轉為字節return split_text_by_size(text_content, max_bytes, output_dir)# 使用示例
if __name__ == "__main__":input_file = r"C:\Users\wangrusheng\Downloads\ust.txt"  # TXT文件路徑output_dir = r"C:\Users\wangrusheng\Downloads\accc"  # 輸出文件目錄max_size_kb = 15  # 每個文件最大20KBcreated_files = process_txt(input_file, output_dir, max_size_kb)print(f"切割完成! 共生成 {len(created_files)} 個文件")

step3:查詢頁數

from pdf2image import convert_from_path
import os# 設置 Poppler 路徑
POPPLER_PATH = r'C:\Users\wangrusheng\AppData\Local\Programs\poppler-24.08.0\Library\bin'def get_pdf_page_count(input_pdf):"""獲取PDF文件的頁數參數:input_pdf -- 輸入的PDF文件路徑返回:page_count -- PDF文件的頁數"""# 將PDF轉換為圖片列表(不寫入磁盤)images = convert_from_path(input_pdf,poppler_path=POPPLER_PATH,dpi=50,  # 降低DPI以提高速度fmt='jpeg',thread_count=4,use_pdftocairo=True,  # 使用更穩定的轉換引擎strict=False  # 忽略部分錯誤)return len(images)if __name__ == "__main__":# 輸入PDF路徑input_pdf = r"D:\Users\wangrusheng\Downloads\pe.pdf"try:page_count = get_pdf_page_count(input_pdf)print(f"PDF文件頁數: {page_count}")except Exception as e:print(f"處理PDF時出錯: {str(e)}")

end

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

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

相關文章

Ubuntu22.04更換阿里鏡像源,ubuntu更換源

在 Ubuntu 22.04 上更換為阿里云鏡像源可以加速軟件包的下載和更新&#xff0c;大幅提升系統更新速度。以下是更換阿里云鏡像源的步驟&#xff1a;1. 備份現有源列表在更換鏡像源之前&#xff0c;建議先備份當前的源配置文件&#xff1a;bashsudo cp /etc/apt/sources.list /et…

Git版本控制工具+基礎命令

Git是什么&#xff1f;Git是目前世界上最先進的分布式版本控制系統代碼托管平臺&#xff1a;Gitlab/Github/Gitee&#xff08;碼云&#xff09;什么是版本控制系統&#xff1f;指對軟件開發過程中各種程序代碼、配置文件及說明文檔等文件變更的管理。版本控制最主要的功能就是追…

圖解設計模式【3】

本系列共分為三篇文章&#xff0c;其中包含的設計模式如下表&#xff1a; 名稱設計模式圖解設計模式【1】Iterator、Adapter、Template Method、Factory Method、Singleton、Prototype、 Builder、Abstract Factory、 Bridge、 Strategy圖解設計模式【2】Composite、 Decorato…

(純新手教學)計算機視覺(opencv)實戰十四——模板與多個對象匹配

圖片旋轉、圖片鏡像相關教學&#xff1a; &#xff08;純新手教學&#xff09;計算機視覺&#xff08;opencv&#xff09;實戰十三——圖片旋轉、圖片鏡像 的幾種常用方法-CSDN博客https://blog.csdn.net/2302_78022640/article/details/151356600?spm1011.2415.3001.5331 模板…

Java面試核心知識點總結:Redis與MySQL高可用、高并發解決方案

在分布式系統開發中&#xff0c;高并發場景下的數據一致性、系統可用性以及性能優化始終是核心挑戰。本文基于Java技術棧&#xff0c;結合Redis與MySQL的工程實踐&#xff0c;系統梳理分布式系統設計的關鍵技術要點。一、Redis集群架構演進與高可用實踐1.1 主從哨兵模式部署方案…

R 語言科研繪圖第 72 期 --- mantel檢驗圖

在發表科研論文的過程中&#xff0c;科研繪圖是必不可少的&#xff0c;一張好看的圖形會是文章很大的加分項。 為了便于使用&#xff0c;本系列文章介紹的所有繪圖都已收錄到了 sciRplot 項目中&#xff0c;獲取方式&#xff1a; R 語言科研繪圖模板 --- sciRplothttps://mp.…

4.2-中間件之MySQL

4.2.1MySQL的基本知識SQL語句用于存取數據以及查詢、更新和管理關系數據庫系統。包括&#xff1a;DQL&#xff08;select&#xff09;、DML&#xff08;insert,update,delete&#xff09;、DDL&#xff08;create,alter,drop&#xff09;、DCL&#xff08;grant,revoke&#xf…

LVS + Keepalived 高可用負載均衡集群

目錄 一、核心組件與作用 1. LVS&#xff08;Linux Virtual Server&#xff09; 2. Keepalived 二、DR 模式下的 LVS Keepalived 工作原理 1. 整體架構 2. 數據包流向&#xff08;DR 模式&#xff09; 三、部署步驟&#xff08;DR 模式&#xff09; 3.1 環境規劃 3.2…

知識沉淀過于碎片化如何形成體系化框架

要將過于碎片化的知識沉淀轉變為體系化的框架&#xff0c;必須采取一套自上而下設計與自下而上歸集相結合的系統性方法&#xff0c;其核心路徑在于首先進行戰略性診斷與頂層藍圖設計、其次構建統一且可擴展的知識架構&#xff08;分類與標簽體系&#xff09;、然后實施系統性的…

XLua教程之C#調用Lua

上一篇文章 XLua教程之入門篇-CSDN博客 在C#腳本中訪問lua全局數據&#xff0c;特別是table以及function&#xff0c;代價比較大&#xff0c;建議盡量少做相關操作。 LuaEnv.Global.Get 用于獲取一個全局變量&#xff0c;但是無法獲取局部變量(用local修飾) 全局基本類型變量…

C++ 標準庫中的哈希函數:從std::hash到自定義哈希器

C 標準庫中的哈希函數&#xff1a;從 std::hash 到自定義哈希器 1. 引言 在上一篇中&#xff0c;我們介紹了哈希表為什么能夠實現 O(1) 查找。 核心秘密在于&#xff1a;哈希函數。 在 C 標準庫中&#xff0c;哈希表容器&#xff08;如 unordered_map、unordered_set&#xff0…

在圖形 / 游戲開發中,為何 Pixels Per Unit(PPU)數值越小,物體在屏幕上顯示的尺寸越大?

1. 什么是 PPU&#xff1f; PPU&#xff08;Pixels Per Unit&#xff09;指的是 多少像素對應游戲世界中的一個單位&#xff08;Unit&#xff09;。 在 Unity 等游戲引擎中&#xff0c;1 Unit 通常被視為世界空間的基本長度&#xff0c;比如 1 米。2. PPU 與物體大小的關系PPU …

【ZYNQ開發篇】Petalinux和電腦端的靜態ip地址配置

使用Petalinux工具為ZYNQ板卡搭建嵌入式Linux操作系統&#xff0c;成功搭建后&#xff0c;用戶通常會使用客戶端軟件對ZYNQ板卡上的Linux系統進行訪問&#xff0c;軟件需要知道ZYNQ板卡的ip地址才能進行訪問&#xff0c;如果ip地址是動態變化的&#xff0c;軟件每次訪問都要重新…

AVL樹知識總結

AVL樹概念性質一顆AVL樹或是空樹&#xff0c;或者具有一下性質的二叉搜索樹&#xff1a;左右都是AVL樹&#xff0c;左右子樹高度差的絕對值不超過1AVL樹有n個結果&#xff0c;高度保持在O&#xff08;logN&#xff09; 搜索時間復雜度O(logN&#xff09;模擬實現插入定義&#…

返利app的跨域問題解決方案:CORS與反向代理在前后端分離架構中的應用

返利app的跨域問題解決方案&#xff1a;CORS與反向代理在前后端分離架構中的應用 大家好&#xff0c;我是阿可&#xff0c;微賺淘客系統及省賺客APP創始人&#xff0c;是個冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 在返利APP的前后端分離架構中&#xff0c;跨…

【dl】python基礎 深度學習中需要用到的python基礎

直接在jupyter寫筆記然后導出md格式真的太好用了本文筆記來自小破站視頻BV1K14y1c75ePython 基礎 1. 變量 1.1 三種基本變量類型 # 字符串 str str_v "123"# 數字 int或float num_v 11 float_v 12.0# 布爾型 bool bool_v True1.1.1 字符串 f字符串&#xff1a;在…

Vue FullPage.js 完整使用指南:Vue 3 官方全屏滾動解決方案

概述 vue-fullpage.js 是 FullPage.js 的官方 Vue.js 3 包裝器&#xff0c;為 Vue 3 應用提供了強大的全屏滾動功能。該插件基于成熟的 FullPage.js 庫&#xff0c;支持多種滾動效果和豐富的配置選項&#xff0c;特別適用于企業級數據大屏、產品展示、單頁應用等場景。 官方信…

軟件工程實踐一:Git 使用教程(含分支與 Gitee)

文章目錄目標一、快速上手1. Windows 安裝 Git2. 初始化 / 克隆二、核心概念速覽三、常用命令清單1) 查看狀態與差異2) 添加與提交3) 歷史與回溯4) 撤銷與恢復&#xff08;Git 2.23 推薦新命令&#xff09;5) 忽略文件四、分支與合并&#xff08;Branch & Merge&#xff09…

css`min()` 、`max()`、 `clamp()`

min() 用來計算多個數值中最小的那個&#xff0c;非常適合做自適應。 width: min(50vw, 500px) 50vw 表示 視口寬度的 50% 500px 表示 500px min(50vw, 500px) 表示會取兩者中 最小的那個 作為最終的寬度&#xff0c;。 使用場景 限制某個元素寬度不超過某個值&#xff1b; 響…

【WRF-VPRM 預處理器】HEG 安裝(服務器)-MRT工具替代

目錄 HEG 安裝 驗證 HEG 安裝與否 設置環境變量(建議) 命令行接口(Command Line Interface) hegtool 工具 hegtool 用法 Header File 格式 功能1:`gdtif` 工具 – MISR 數據處理 `gdtif` 使用方式 參數文件格式(Parameter File Format) 功能2:`resample` 工具 – 重采樣…