如何用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 辅助编程与低代码平台的完美结合已然成为关键趋势,极大地提高了开发效率。然而,低代码平台的使命绝非仅仅局限于简化开发流…...
02.Linux常用文件操作命令
1.mkdir 目录名:创建目录 mkdir 目录名 mkdir -p a/b/c 创建多级目录 2.touch 创建空文件 touch 文件名 touch 文件名 文件名 创建多个文件 3.文件写入内容 echo写入 覆盖写入 echo 文件内容 >文件名 追加写入(日志必用) echo 文件内容 >…...
AutoSAR实战:NVRAM Manager配置避坑指南(附完整代码示例)
AutoSAR实战:NVRAM Manager配置避坑指南(附完整代码示例) 在汽车电子开发领域,AutoSAR框架的NVRAM Manager(NvM)模块是管理非易失性数据的关键组件。许多工程师在初次配置时容易陷入性能陷阱和功能误区&…...
计算机毕业设计springboot基于的游戏后台管理系统 基于SpringBoot的网游运营管理平台的设计与实现 基于SpringBoot架构的电子竞技服务支撑系统的设计与实现
计算机毕业设计springboot基于的游戏后台管理系统(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着互联网技术的飞速发展和智能终端设备的全面普及,游戏产业已迅速…...
36 Python 时序和文本:中文文本处理入门:为什么要先做分词和停用词过滤?
中文文本处理入门:为什么要先做分词和停用词过滤? 刚接触文本分析时,很多人都会有一个疑问: 文本明明已经有内容了,为什么不能直接拿去做分类、聚类或者情感分析? 这个问题其实正好指向了文本挖掘里最基础、…...
DALL-E2-pytorch训练日志完全解读指南:如何从loss曲线判断模型健康状态
DALL-E2-pytorch训练日志完全解读指南:如何从loss曲线判断模型健康状态 【免费下载链接】DALLE2-pytorch Implementation of DALL-E 2, OpenAIs updated text-to-image synthesis neural network, in Pytorch 项目地址: https://gitcode.com/gh_mirrors/da/DALLE2…...
实测2-5分钟:CogVideoX-2b生成速度与画质平衡的真实体验报告
实测2-5分钟:CogVideoX-2b生成速度与画质平衡的真实体验报告 1. 从文字到视频:CogVideoX-2b能做什么? 想象一下,你只需要输入一段文字描述,就能在几分钟内获得一段6秒的高清视频。这不是科幻电影里的场景,…...
无线通信入门:为什么说DFT是提升OFDM信道估计性能的“降噪神器”?
无线通信中的降噪艺术:DFT如何让OFDM信道估计更精准 想象一下,你正试图在嘈杂的咖啡馆里听清朋友的谈话。背景音乐、周围人的聊天声、杯盘碰撞声都在干扰你获取清晰的信息。无线通信中的信道估计面临类似的挑战——如何在充满噪声的传输环境中࿰…...
光场相机入门:Macro Pixel与SAI如何让你的照片秒变3D(附Python代码示例)
光场相机实战指南:用Macro Pixel与SAI技术打造沉浸式3D影像 当你第一次看到光场相机拍摄的照片能在屏幕上自由切换焦点时,那种震撼感就像发现了摄影的新维度。这背后是Macro Pixel和SAI两项核心技术的完美配合——它们让静态图像拥有了动态的视角选择能力…...
GB28181实战:Windows环境下WVP-GB28181部署全攻略
1. Windows环境下WVP-GB28181部署全攻略 如果你正在寻找一个在Windows系统上快速搭建GB28181视频监控平台的方法,那么WVP-GB28181绝对是个不错的选择。作为一个开源的视频监控平台,WVP-GB28181支持国标GB/T28181协议,能够帮助你轻松实现视频设…...
手把手教你解决Unity视频播放问题:H264编码设置与RawImage的正确用法
Unity视频播放全攻略:H264编码优化与RawImage实战解析 在Unity项目开发中,视频播放功能看似简单,却暗藏诸多技术细节。许多开发者都曾遇到过视频不同步、颜色失真或性能低下的困扰。本文将深入剖析视频播放的核心技术要点,从编码格…...
