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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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` 工具 – 重采样…