如何用python将pdf转换为json格式
使用 Python 将 PDF 文件转换为 JSON 格式,主要步骤如下:
-
读取 PDF 内容:首先使用一个库读取 PDF 文件内容,如
PyMuPDF或pdfplumber。这些库可以逐页提取文本,并返回结构化的数据。 -
组织数据到 JSON:将提取的文本数据格式化为字典或嵌套字典,然后将其转化为 JSON 格式。
-
输出 JSON 文件:使用
json库将字典保存为 JSON 文件。
以下是使用 pdfplumber 的示例代码:
import pdfplumber
import jsondef pdf_to_json(pdf_path, json_path):data = []with pdfplumber.open(pdf_path) as pdf:for i, page in enumerate(pdf.pages):text = page.extract_text()# 可以根据需要进一步解析或分段文本data.append({"page": i + 1, "text": text})# 将数据写入 JSON 文件with open(json_path, 'w', encoding='utf-8') as f:json.dump(data, f, ensure_ascii=False, indent=4)# 使用方法
pdf_path = "sample.pdf"
json_path = "output.json"
pdf_to_json(pdf_path, json_path)
代码解释
pdfplumber.open(pdf_path): 打开 PDF 文件。pdf.pages[i].extract_text(): 从 PDF 文件的每一页提取文本。json.dump(data, f, ensure_ascii=False, indent=4): 将字典数据格式化为 JSON 并写入文件。
注意事项
- 如果 PDF 内容包含表格或复杂的结构,可能需要额外处理,例如使用
pdfplumber提供的extract_table()方法提取表格数据。 - 可以根据需要调整数据结构,将内容分为段落、标题等,以便生成更精确的 JSON 文件。
如果希望 JSON 的格式是包含 chapter 和 text 字段,可以先在 PDF 中查找章节标题(例如根据特定的关键字或字体格式),然后提取相应的文本内容。假设每个章节标题以 “Chapter” 开头,以下是一个可能的实现方法:
import pdfplumber
import json
import redef pdf_to_json(pdf_path, json_path):data = []current_chapter = Nonecurrent_text = []with pdfplumber.open(pdf_path) as pdf:for page in pdf.pages:text = page.extract_text()if text is None:continue# 按行分割文本,便于逐行检查lines = text.split('\n')for line in lines:# 检查是否是章节标题(例如以 "Chapter" 开头的行)if re.match(r'^\s*Chapter\s+\d+', line, re.IGNORECASE):# 保存上一章节内容到 data 中if current_chapter:data.append({"chapter": current_chapter, "text": "\n".join(current_text)})# 更新当前章节标题和内容current_chapter = line.strip()current_text = []else:# 将非章节标题的内容加入当前章节文本current_text.append(line)# 添加最后一个章节if current_chapter:data.append({"chapter": current_chapter, "text": "\n".join(current_text)})# 将数据写入 JSON 文件with open(json_path, 'w', encoding='utf-8') as f:json.dump(data, f, ensure_ascii=False, indent=4)# 使用方法
pdf_path = "sample.pdf"
json_path = "output.json"
pdf_to_json(pdf_path, json_path)
代码解释
current_chapter:用于保存当前章节标题。current_text:用于收集当前章节的所有文本内容。re.match(r'^\s*Chapter\s+\d+', line, re.IGNORECASE):使用正则表达式检查是否是章节标题(假设章节标题格式为 “Chapter X”)。- 当检测到一个新的章节时,将
current_chapter和current_text保存到data列表,然后开始新的章节记录。
注意事项
- 如果章节标题格式不同,修改正则表达式条件以适应实际标题格式。
- 可以根据需要调整数据结构,以实现更灵活的 JSON 格式。
相关文章:
如何用python将pdf转换为json格式
使用 Python 将 PDF 文件转换为 JSON 格式,主要步骤如下: 读取 PDF 内容:首先使用一个库读取 PDF 文件内容,如 PyMuPDF 或 pdfplumber。这些库可以逐页提取文本,并返回结构化的数据。 组织数据到 JSON:将提…...
STL关联式容器介绍
在前文中介绍了STL的序列式容器; STL序列式容器之vector-CSDN博客 STL序列式容器之list-CSDN博客 STL序列式容器之deque-CSDN博客 STL序列式容器之stack-CSDN博客 STL序列式容器之queue-CSDN博客 STL序列式容器之heap(堆)-CSDN博客 ST…...
java计算机毕业设计选题参考3000篇
基于微信小程序的springboot高校餐厅食品留样管理系统 springboot vue大学生创新创业训练项目管理系统 Springboot的疫情网课管理系统 基于微信小程序的计算机实验室排课与查询系统ssm后端 基于ssm后端的学生购电电费管理微信小程序weixin356 ssm机场网上订票系统 基于ssmvue的…...
JWT介绍、测试案例 以及实际开发中的使用
什么是JWT? JWT,通过数字签名的方式,以json对象为载体,在不同的服务终端之间安全的传输信息,用来解决传统session的弊端。 JWT在前后端分离系统,通过JSON形式作为WEB应用中的令牌(token),用于…...
快排和归并
目录 前言 快速排序 相遇位置一定比key小的原理(大): 避免效率降低方法(快排优化) 三数取中(选key优化) 小区间优化 hoare版本快排 挖坑法快排 前后指针快排 非递归快排 归并排序 非递…...
VUE+SPRINGBOOT实现邮箱注册、重置密码、登录功能
随着互联网的发展,网站用户的管理、触达、消息通知成为一个网站设计是否合理的重要标志。目前主流互联网公司都支持手机验证码注册、登录。但是手机短信作为服务端网站是需要付出运营商通信成本的,而邮箱的注册、登录、重置密码,无疑成为了这…...
Vue 项目打包后环境变量丢失问题(清除缓存),区分.env和.env.*文件
Vue 项目打包后环境变量丢失问题(清除缓存),区分.env和.env.*文件 问题背景 今天在导报项目的时候遇到一个问题问题:在开发环境中一切正常,但在打包后的生产环境中,某些环境变量(如 VUE_APP_B…...
创建vue+electron项目流程
一个vue3和electron最基本的环境搭建步骤如下:// 安装 vite vue3 vite-plugin-vue-setup-extend less normalize.css mitt pinia vue-router npm create vuelatest npm i vite-plugin-vue-setup-extend -D npm i less -D npm i normalize.css -S ࿰…...
3. 用Ruby on Rails创建一个在线商城
哎呀,你这是想要我写一篇超长篇的Ruby on Rails教程啊!好吧,既然你这么热情,那我就勉为其难地给你来一篇生动有趣、充满比喻夸张讽刺修辞手法的教程吧! 1. 准备工作 1.1. 安装Ruby和Rails 1.1.1 安装Ruby 下载Ruby…...
jmeter常用配置元件介绍总结之配置元件
系列文章目录 1.windows、linux安装jmeter及设置中文显示 2.jmeter常用配置元件介绍总结之安装插件 3.jmeter常用配置元件介绍总结之线程组 4.jmeter常用配置元件介绍总结之函数助手 5.jmeter常用配置元件介绍总结之取样器 6.jmeter常用配置元件介绍总结之jsr223执行pytho…...
SpringBoot获取请求参数
spring boot获取请求参数 文章目录 spring boot获取请求参数一、简单参数二、实体参数三、数组集合参数四、日期参数五、Json参数六、路径参数 开头概述 在Spring Boot框架中,处理HTTP请求并获取请求参数是开发Web应用程序中的一项基本任务。无论是简单的GET请求还是…...
【数据结构】树——顺序存储二叉树
写在前面 在学习数据结构前,我们早就听说大名鼎鼎的树,例如什么什么手撕红黑树大佬呀,那这篇笔记不才就深入浅出的介绍二叉树。 文章目录 写在前面一、树的概念及结构1.1、数的相关概念1.2、数的表示1.3 树在实际中的运用(表示文…...
Android中perform和handle方法的区别——以handleLaunchActivity与performLaunchActivity为例
在Android系统中,perform和handle方法经常出现在关键流程中,分别承担不同的职责。这种命名约定反映了框架设计中的分层思想,帮助开发者区分任务的调度与实现。本文通过handleLaunchActivity和performLaunchActivity这两个典型方法的源码分析&…...
聊聊依赖性测试
在软件测试中,我们常常面临一个挑战:多个模块之间高度耦合,任何一个模块的异常都可能导致整个系统崩溃。如何确保这些模块之间的协作无缝衔接?这就需要依赖性测试的助力! 什么是依赖性测试?它与功能测试、…...
C++11————线程库
thread 类的简单介绍 在 c11 之前,涉及到多线程问题,都是和平台相关的,比如 windows 和 linux 下各自有自己的接口,这使得代码的可移植性比较差。在 c11 中引入了线程库,使得 c在编程时不需要依赖第三方库了 函数名 …...
Java 动态代理初步
动态代理初步 package ReflectExercise;import ReflectExercise.pojo.BigStar; import ReflectExercise.pojo.ProxyUtil; import ReflectExercise.pojo.Star;/*** 动态代理* 无侵入的给方法增强功能*/ public class ReflectExercise {public static void main(String[] args) {…...
应用系统开发(10) 钢轨缺陷的检测系统
涡流检测系统框图 其中信号发生器为一定频率的正弦信号作为激励信号,这个激励信号同时输入给交流电桥中的两个检测线圈,将两个线圈输出的电压差值作为差分信号引出至差分放大电路进行放大,经过放大后信号变为低频的缺陷信号叠加在高频载波上…...
理解 \r、\n、\r\n 和 \n\r:换行符的区别和用法
\r(回车,Carriage Return): ASCII 码 13,对应的控制字符是 CR,将光标回到当前行的行首(而不会换到下一行),之后的输出会把之前的输出覆盖。\n(换行,Line Feed)…...
【jvm】StringTable为什么要调整
目录 1. 永久代内存限制与回收效率2. 堆内存的优势3. JDK版本的演进4. 实际应用的考虑 1. 永久代内存限制与回收效率 1.内存限制:在JDK 6及之前的版本中,StringTable位于永久代(PermGen space)中。然而,永久代的内存空…...
AI 驱动低代码平台:开创智能化用户体验新纪元
一、引言 人工智能技术如汹涌浪潮般迅猛发展,在各个行业掀起了颠覆性的变革风暴。于软件开发领域而言,AI 辅助编程与低代码平台的完美结合已然成为关键趋势,极大地提高了开发效率。然而,低代码平台的使命绝非仅仅局限于简化开发流…...
3D元器件库技术解析与工程应用指南
## 1. 3D元器件库技术解析与应用指南### 1.1 3D封装库的技术价值 在现代电子设计自动化(EDA)流程中,高质量的3D元器件库可显著提升设计效率。本套封装库包含1088个标准封装模型,涵盖电阻器、电容器、接线端子、IC芯片、晶振等常见电子元件,所…...
AutoSar标准文档下载全攻略:从官网入口到模块选择(附命名规则解析)
AutoSar标准文档高效获取与深度解析指南 引言 在汽车电子系统开发领域,AutoSar标准已经成为行业公认的架构规范。无论是ECU开发工程师、系统架构师还是测试验证人员,都需要频繁查阅AutoSar官方文档。然而,面对庞大的文档体系和复杂的命名规则…...
Java高频面试题:RocketMQ有哪些使用场景?
大家好,我是锋哥。今天分享关于【Java高频面试题:RocketMQ有哪些使用场景?】面试题 。希望对大家有帮助;Java高频面试题:RocketMQ有哪些使用场景?RocketMQ 是阿里巴巴开源的一款分布式消息中间件࿰…...
自然语言处理助力法律领域AI架构,提升司法服务质量
自然语言处理助力法律领域AI架构:从技术落地到司法服务升级的全链路实践 1. 引言:法律行业的“效率痛点”与NLP的破局之路 1.1 痛点引入:当法律遇到“信息过载”与“专业门槛” 深夜十点的律师办公室里,张律师还在揉着太阳穴核对第三份合同的条款——密密麻麻的法条引用…...
Ubuntu 24.04 环境实战:ROS 2 Kilted 实现 SLAM 建图与 Nav2 导航
一、构建地图 1、安装依赖 安装 slam_toolbox 算法库: sudo apt install ros-kilted-slam-toolbox安装 TurtleBot3 全套支持包: sudo apt install ros-kilted-turtlebot3*2、使用清华源 如果apt安装很慢,请先配置清华源: sud…...
免费降AI vs 付费降AI:省下的钱够不够你重新查重?
选降AI工具这件事,我前后折腾了大半个月。起因很简单:论文用DeepSeek写了初稿,知网一查AI率直接飙到90%多,导师让我三天内搞定。 先说结论:免费降AI率工具能用,但别指望它帮你一步到位。 我试了五六个免费…...
CTP行情接口避坑指南:从‘不合法的登录’到稳定接收tick数据的5个关键步骤
CTP行情接口实战避坑手册:从登录异常到稳定接收tick的深度解决方案 当你在深夜调试CTP行情接口时,突然看到控制台跳出"不合法的登录"错误提示,而距离第二天开盘只剩3小时——这种场景恐怕不少量化开发者都经历过。本文将分享5个关键…...
深度解析:Markdown Viewer v5.3如何通过自定义主题功能彻底改变文档阅读体验
深度解析:Markdown Viewer v5.3如何通过自定义主题功能彻底改变文档阅读体验 【免费下载链接】markdown-viewer Markdown Viewer / Browser Extension 项目地址: https://gitcode.com/gh_mirrors/ma/markdown-viewer Markdown Viewer作为一款备受开发者喜爱的…...
SpringBoot+Vue 毕业设计效率提升实战:从脚手架到自动化部署的全链路优化
SpringBootVue 毕业设计效率提升实战:从脚手架到自动化部署的全链路优化 毕业设计是每个计算机相关专业学生必须跨越的一道坎。回想我自己的经历,以及身边同学的故事,一个普遍的现象是:大家往往在技术选型和环境搭建上就耗费了大量…...
【MySQL | 第一篇】 深入理解三大日志(undo Redo Bin)
目录 Undo Log日志 Redo Log日志 Redo Log与Bin Log的区别 Bin Log日志 三大日志全流程 Undo Log日志 一、核心定义 Undo Log 是MySQL InnoDB存储引擎特有的事务回滚日志,核心作用是记录事务执行前的数据版本,用于事务回滚、MVCC实现,是…...
