基于 Python 将 PDF 转 Markdown 并拆解为 JSON,支持自定义标题处理

server/2024/12/22 20:49:16/

在日常工作中,我们经常需要将 PDF 文件转换为可编辑、可结构化的数据格式,比如 Markdown 和 JSON。但实际操作中,自动化工具往往会出现标题识别不准确的问题,尤其是 PDF 转换过程中,缺乏明确的标题标识。这篇文章将教你如何使用 Python 将 PDF 转换为 Markdown,并通过自定义规则精准识别标题,最终将内容按标题结构拆解为 JSON,方便后续快速检索与使用。


1. 实现目标

  1. 将 PDF 文件转换为 Markdown 格式,保留内容和大致结构。
  2. 自定义处理标题,解决自动识别不准确的问题。
  3. 将 Markdown 内容解析并按标题结构拆解为 JSON,支持通过标题快速查找对应内容。

2. 技术方案

我们将使用以下技术工具:

  • pdfminer.six:提取 PDF 中的文本。
  • markdownify:将纯文本转换为 Markdown 格式。
  • 自定义标题识别:通过规则或关键词判断哪些行是标题。
  • JSON 结构化输出:将 Markdown 内容拆解并按标题结构存储为 JSON。

3. 依赖安装

首先,确保你的环境已安装所需的 Python 库:

pip install pdfminer.six markdownify

4. 代码实现

以下是完整的代码实现,分为 PDF 转 Markdown标题自定义处理生成 JSON 三个步骤。

4.1 PDF 转 Markdown

使用 pdfminer.six 提取 PDF 文本,然后通过 markdownify 转换为 Markdown 格式:

python">from pdfminer.high_level import extract_text
from markdownify import markdownifydef pdf_to_markdown(pdf_path):"""将 PDF 文件转换为 Markdown 文本"""# 提取 PDF 文本raw_text = extract_text(pdf_path)# 将原始文本转换为 Markdown 格式markdown_text = markdownify(raw_text)return markdown_text

4.2 自定义标题识别与解析

标题识别不准确时,可以通过自定义规则进行判断:

  1. 根据 关键词(如“第”、“章”、“节”)判断是否是标题。
  2. 通过 文本长度大写格式 等规则进一步判断。
python">import redef is_custom_title(line, keywords=None, min_length=10, max_length=50):"""自定义判断是否是标题的逻辑:param line: 待判断的行:param keywords: 标题中常见的关键词列表:param min_length: 最小标题长度限制:param max_length: 最大标题长度限制:return: 是否为标题(布尔值)"""if not line.strip():return False# 规则1:根据关键词判断if keywords:for keyword in keywords:if keyword in line:return True# 规则2:根据文本长度判断if min_length <= len(line.strip()) <= max_length:return True# 规则3:大写或特殊标识判断if line.isupper() or re.match(r'^[A-Z0-9\s]+\:?', line):return Truereturn False

4.3 Markdown 拆解并生成 JSON

将处理后的 Markdown 内容拆解为 JSON,按标题与内容分级存储:

python">import jsondef markdown_to_json(markdown_text, keywords=None):"""将 Markdown 文本拆解成基于标题的 JSON 结构"""result = {}current_section = Nonecontent_buffer = []for line in markdown_text.split("\n"):line = line.strip()# 自定义标题判断if is_custom_title(line, keywords=keywords):# 保存上一部分内容if current_section:result[current_section] = "\n".join(content_buffer)# 新标题current_section = line.strip()content_buffer = []else:content_buffer.append(line)# 保存最后一部分内容if current_section:result[current_section] = "\n".join(content_buffer)return resultdef save_to_json(data, output_path):"""将数据保存为 JSON 文件"""with open(output_path, "w", encoding="utf-8") as f:json.dump(data, f, ensure_ascii=False, indent=4)

4.4 主函数入口

整合所有步骤:

python">def main(pdf_path, output_json, custom_keywords=None):# 1. PDF 转 Markdownmarkdown_text = pdf_to_markdown(pdf_path)# 2. 解析 Markdown 并自定义标题处理result_json = markdown_to_json(markdown_text, keywords=custom_keywords)# 3. 保存 JSON 数据save_to_json(result_json, output_json)print(f"JSON 数据已保存至:{output_json}")if __name__ == "__main__":# 输入 PDF 文件路径和输出 JSON 文件路径input_pdf = "example.pdf"  # 替换为你的 PDF 文件路径output_json = "output.json"# 自定义关键词列表(可以根据实际情况调整)custom_keywords = ["第", "章", "节", "引言", "方法", "总结", "讨论"]# 执行主程序main(input_pdf, output_json, custom_keywords)

5. 示例演示

5.1 输入示例

PDF 转换后的 Markdown 文本示例:

第一章 引言
本章介绍了研究的背景和目标。数据采集过程
数据通过传感器和手工记录获取。第二章 研究方法
本章主要描述了数据处理和算法实现的过程。讨论与总结
总结了本研究的关键发现。

5.2 输出 JSON

json">{"第一章 引言": "本章介绍了研究的背景和目标。","数据采集过程": "数据通过传感器和手工记录获取。","第二章 研究方法": "本章主要描述了数据处理和算法实现的过程。","讨论与总结": "总结了本研究的关键发现。"
}

6. 自定义规则说明

  • 关键词匹配:如“第”、“章”、“节”、“引言”等。
  • 长度约束:排除过长或过短的行,避免误判。
  • 格式特征:如全大写、冒号分隔等。

7. 应用场景

  1. 文档结构化
    • 将技术文档、电子书章节自动拆解为 JSON,方便后续数据分析。
  2. 知识检索
    • 通过标题快速定位内容,实现高效的文档查询。
  3. 大规模数据处理
    • 对批量 PDF 进行自动化转换和整理。

8. 总结

通过本文的方法,你可以将 PDF 文档 自动转换为 Markdown 格式,并通过自定义标题识别规则,实现精确的 章节拆解JSON 数据结构化 输出。这种方法对于大规模文档处理、自动化知识整理等场景非常实用。你还可以根据自己的需求进一步优化标题识别规则或扩展功能,比如引入机器学习模型提高标题判断的智能性。

代码可直接运行,简单易用,赶快试试吧!


http://www.ppmy.cn/server/152320.html

相关文章

MVC 发布

关于MVC发布&#xff0c;我为您整理了以下信息&#xff1a; SpringMVC发布&#xff1a;SpringMVC是Spring框架的一部分&#xff0c;它基于MVC架构&#xff0c;具有解耦合、轻量级和对注解的广泛支持等优点。发布SpringMVC项目通常涉及配置中央调度器、编写控制器类和设置视图解…

汽车服务管理系统(源码+数据库+报告)

一、项目介绍 基于SpringBoot的汽车服务管理系统&#xff0c;系统包含三种角色&#xff1a;管理员、员工、用户,系统分为前台和后台两大模块。 二、项目技术 编程语言&#xff1a;Java 数据库&#xff1a;MySQL 项目管理工具&#xff1a;Maven 前端技术&#xff1a;Vue 后端技…

16.2、网络安全风险评估技术与攻击

目录 网络安全风险评估技术方法与工具 网络安全风险评估技术方法与工具 资产信息收集&#xff0c;可以通过调查表的形式把我们各类的资产信息进行一个统计和收集&#xff0c;掌握被评估对象的重要资产分布&#xff0c;进而分析这些资产关联的业务面临的安全威胁以及存在的安全…

Ubuntu RTSP 客户端和服务器实现

在 Ubuntu RTSP 客户端和服务器&#xff0c;通常需要在系统中搭建一个 RTSP 服务器&#xff0c;推送视频流&#xff0c;接收视频流&#xff0c;并在客户端播放。这里我将通过代码实现一个简单的 RTSP 服务器和客户端的模拟&#xff0c;使用 C 和常用的开源库 Live555 来完成。 …

如何从零开始搭建公司自动化测试框架

题主的意思&#xff0c;搭建的自动化测试框架要包括API测试&#xff0c;UI测试&#xff0c;APP测试三类。以上三类其实可以简化为两类&#xff0c;那就是&#xff1a; 1&#xff09;接口自动化测试框架搭建 2&#xff09;UI自动化测试框架搭建。 没问题&#xff0c;安排&#x…

中阳科技:从量化交易到智能金融的创新实践

量化交易的出现改变了传统金融市场的游戏规则&#xff0c;它通过算法驱动和数据分析实现了自动化、智能化的交易流程。作为这一领域的佼佼者&#xff0c;中阳科技专注于探索量化模型的创新&#xff0c;助力投资者在复杂的市场中获取竞争优势。 量化交易的优势剖析 量化交易依赖…

git从入门到实践

文章目录 1. Git 基础概念什么是 Git&#xff1f;Git 的核心概念 2. 安装与配置安装 Git配置 Git 3. 创建与管理本地仓库初始化一个 Git 仓库添加文件并提交查看状态与日志 4. 分支与合并创建与切换分支合并分支删除分支 5. 远程仓库关联远程仓库推送与拉取 6. 冲突处理7. 标签…

ML307R 串口开发--OpenCPU应用程序开发学习笔记(2)

前言&#xff1a; 上一篇文章已经把如何配置和安装开发环境介绍了一下&#xff0c;开发环境准备完毕之后就可以进行具体的项目开发了&#xff0c;这个款芯片的外设接口很多&#xff0c;我个人觉得用的最多的还是串口&#xff0c;这篇文章就介绍一下串口的开发流程&#xff0c;如…