如何用python将pdf转换为json格式

news2024/11/14 21:46:36

使用 Python 将 PDF 文件转换为 JSON 格式,主要步骤如下:

  1. 读取 PDF 内容:首先使用一个库读取 PDF 文件内容,如 PyMuPDFpdfplumber。这些库可以逐页提取文本,并返回结构化的数据。

  2. 组织数据到 JSON:将提取的文本数据格式化为字典或嵌套字典,然后将其转化为 JSON 格式。

  3. 输出 JSON 文件:使用 json 库将字典保存为 JSON 文件。

以下是使用 pdfplumber 的示例代码:

import pdfplumber
import json

def 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 的格式是包含 chaptertext 字段,可以先在 PDF 中查找章节标题(例如根据特定的关键字或字体格式),然后提取相应的文本内容。假设每个章节标题以 “Chapter” 开头,以下是一个可能的实现方法:

import pdfplumber
import json
import re

def pdf_to_json(pdf_path, json_path):
    data = []
    current_chapter = None
    current_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_chaptercurrent_text 保存到 data 列表,然后开始新的章节记录。

注意事项

  • 如果章节标题格式不同,修改正则表达式条件以适应实际标题格式。
  • 可以根据需要调整数据结构,以实现更灵活的 JSON 格式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2240424.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【珠海科技学院主办,暨南大学协办 | IEEE出版 | EI检索稳定 】2024年健康大数据与智能医疗国际会议(ICHIH 2024)

#IEEE出版|EI稳定检索#主讲嘉宾阵容强大!多位外籍专家出席报告 2024健康大数据与智能医疗国际会议(ICHIH 2024)2024 International Conference on Health Big Data and Intelligent Healthcare 会议简介 2024健康大数据与智能医疗国际会议…

字符串处理指南:Air780E软件的全新视角

今天我会把 Air780E软件的字符串处理详细解析,指南如下: 1、Lua字符串介绍 关于字符串,Lua提供了一些灵活且强大的功能,一些入门知识如下: 1.1 字符串定义 在Lua中,字符串可以用单引号或双引号"来定…

【MySQL 保姆级教学】事务的隔离级别(详细)--下(13)

事务的隔离级别 1. 如何理解事务的隔离性2. 事务隔离级别的分类3. 查看和设置事务隔离级别3.1 全局和会话隔离级别3.2 查看和设置隔离级别 4. 事务隔离级别的演示4.1 读未提交(Read Uncommitted)4.2 读已提交(Read Committed)4.3 …

再见 阿里巴巴EasyExcel替代品EasyExcel-Plus即将诞生

最近阿里发布公告通知,停止对EasyExcel 更新和维护,EasyExcel 是一款知名的 Java Excel 工具库,由阿里巴巴开源,作者是玉霄,在 GitHub 上有 30k stars、7.5k forks。 据了解,EasyExcel作者玉霄)去年已经从…

Acrobat Pro DC 2023(pdf免费转化word)

所在位置 通过网盘分享的文件:Acrobat Pro DC 2023(64bit).tar 链接: https://pan.baidu.com/s/1_m8TT1rHTtp5YnU8F0QGXQ 提取码: 1234 --来自百度网盘超级会员v4的分享 安装流程 打开安装所在位置 进入安装程序 找到安装程序 进入后点击自定义安装,这里…

13载匠心独运,BI+AI启航新征程

13载匠心独运,BIAI启航新征程! 思迈特的13年,是在坚守中持续创新,在创新中不断追求卓越,是在挑战与机遇并行中开创全新篇章的历程。感谢每一位陪伴走过这段旅程的人。展望未来,思迈特将继续以初心为舵、以…

【大数据学习 | HBASE高级】storeFile文件的合并

Compaction 操作分成下面两种: Minor Compaction:是选取一些小的、相邻的StoreFile将他们合并成一个更大的StoreFile,对于删除、过期、多余版本的数据不进行清除。 Major Compaction:是指将所有的StoreFile合并成一个StoreFile&am…

git config是做什么的?

git config是做什么的? git config作用配置级别三种配置级别的介绍及使用,配置文件说明 使用说明git confi查看参数 默认/不使用这个参数 情况下 Git 使用哪个配置等级? 一些常见的行为查看配置信息设置配置信息删除配置信息 一些常用的配置信…

Warped Universe游戏即将在Sui上推出,为玩家提供多样化的游戏体验

Warped Games选择Sui作为其即将推出的创新多类型游戏Warped Universe的首选Web3技术。Warped Universe让玩家可以体验第三视角实时动作、回合制策略和基地建设等玩法。该游戏使用Unreal Engine 5开发,将借助Sui的技术使玩家能够拥有、交易和变现其游戏内资产。 War…

Autosar CP XCP规范导读

XCP 模块在汽车电子系统架构中起到重要作用,通过与多个模块的连接,实现了数据采集、校准、诊断等功能。它通过 RTE 进行控制,通过 PDUR 进行数据路由,通过通信硬件抽象层访问底层硬件,并与操作系统和其他相关模块协同工作,确保系统的稳定运行。 主要功能用途 通信协议支…

Scala学习记录,case class,迭代器

case class case class创建的对象的属性是不可改的 创建对象,可以不用写new 自动重写:toString, equals, hashCode, copy 自动重写方法:toString,equals,hashCode,copy 小习一下 1.case class 的定义语法是什么 基本形式:case …

B2B订货系统功能设计与代码开发(PHP + MySQL)

在B2B(Business to Business)电子商务中,企业之间的商品订购、交易和供应链管理是核心功能。一个高效的B2B订货系统可以帮助企业管理库存、订单、采购等业务流程。本文将介绍一个基于PHP与MySQL技术栈的B2B订货系统的功能设计与开发流程。 一…

前端CSS3 渐变详解

文章目录 CSS3 渐变详解一、引言二、CSS3 渐变基础1、线性渐变1.1、基本线性渐变1.2、改变渐变方向 2、径向渐变2.1、基本径向渐变2.2、设置径向渐变的中心 三、高级渐变技巧1、重复渐变1.1、重复线性渐变1.2、重复径向渐变 四、总结 CSS3 渐变详解 一、引言 在现代网页设计中…

2024-11-13 Unity Addressables2——寻址资源设置

文章目录 1 设置可寻址资源2 资源组窗口2.1 资源信息2.2 右键资源选项2.3 右键分组选项2.4 创建分组2.5 配置文件2.6 Tools 工具2.7 Play Mode Script2.7 构建打包 3 补充 1 设置可寻址资源 方法一:勾选 Inspector 窗口中的 “Addressable”。方法二:选…

课程讲解--哈夫曼树:原理、特性、应用与实践

前言 在这个信息如潮水般涌动的时代,我,一篇小小的文章,静静地躺在某个角落,怀揣着一份期待,一份对认可的渴望。 我可能没有华丽的辞藻堆砌成的璀璨外表,也没有跌宕起伏如传奇故事般的情节,但…

HP G10服务器ESXI6.7告警提示ramdisk tmp已满

物理服务器是HP G10 VCENTER内两台服务器报错提示ramdisk"tmp"已满,无法写入文件 登录ESXI命令行后发现两台主机的/tmp目录都没有空间了 定位到是ams-bbUsg.txt文件占用了大量的空间 1、关闭集群的DRS功能 2、迁移当前主机上面运行的所有虚拟机至其他主…

Mysql篇-Buffer Pool中的三大链表

为什么要有 Buffer Pool? 虽然说 MySQL 的数据是存储在磁盘里的,但是也不能每次都从磁盘里面读取数据,这样性能是极差的。 要想提升查询性能,那就加个缓存。所以,当数据从磁盘中取出后,缓存内存中&#xf…

万字长文解读深度学习——ViT、ViLT、DiT

文章目录 🌺深度学习面试八股汇总🌺ViT1. ViT的基本概念2. ViT的结构与工作流程1. 图像分块(Image Patch Tokenization)2. 位置编码(Positional Encoding)3. Transformer 编码器(Transformer En…

PNG图片批量压缩exe工具+功能纯净+不改变原始尺寸

小编最近有一篇png图片要批量压缩,大小都在5MB之上,在网上找了半天要么就是有广告,要么就是有毒,要么就是功能复杂,整的我心烦意乱。 于是我自己用python写了一个纯净工具,只能压缩png图片,没任…

2.索引:MySQL 索引分类

MySQL中的索引是提高数据查询速度的重要工具,就像一本书的目录,可以帮助我们快速定位到所需的内容。选择适合的索引类型对数据库设计和性能优化至关重要。本文将详细介绍MySQL中常见的索引类型,并重点讲解聚集索引和二级索引的概念及应用。 1…