工具分享 | PDF文档解析工具PyMuPDF

这篇具有很好参考价值的文章主要介绍了工具分享 | PDF文档解析工具PyMuPDF。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 需求描述

最近工作需要从PDF文档中按照章节解析出对应的文本和图片(后续可能还会有表格),经过调研,找到了一个功能强大的解析工具MuPDF,对应的Python包是PyMuPDF。本篇博客记录使用它来实现具体功能。

官方文档:https://pymupdf.readthedocs.io/en/latest/index.html

2 利用书签中标题划分章节

在PDF中,点击书签或者目录页中具体一个标题时,文档页面会跳转到对应的章节,“跳转”的实现说明了其背后有一套机制(交叉引用),记录了各级标题和正文页面的对应关系。

PyMuPDF解析书签中各层级标题的接口为Document.get_toc(),该接口可以返回书签的层级、名称、点击它跳转到的页码及具体到目标页的哪个位置。

  • 接口介绍

    get_toc(simple=True/False)
    
    # 参数simple=True时,返回简单版本的各级目录,包括[标题层级, 标题名称,跳转到的页码],例如:
    [
    2,             // 第二级
    '旅行规划',     // 名称
    9,             // 对应正文的第9(该字段index从1开始)
    ]
    
    # 参数simple=False时,在跳转到的页码基础上,增加了'to'指向跳转页具体的坐标点(x, y)
    [2, '用户手册介绍 ', 9, 
    {'kind': 1, 'xref': 3112, 
    'page': 8, 'to': Point(43.937, 29.877015), 
    'zoom': 0.0, 'collapse': False
    }]
    
  • 详细文档

    工具分享 | PDF文档解析工具PyMuPDF,Python,数据处理,python,pdf解析
     

利用对书签的解析,获取到了:
(1)文档的层级关系: 包含多少第一级大标题、每个第一级标题下又有多少二级标题,以此类推可以获取完整的文档结构;
(2)每一级标题在正文中的页面范围,例如从第3页(43,40)到第5页的(253, 400)。

因此可以实现按照章节的拆分。

3 基于章节的文本解析

划分章节后,每一章节在正文中的位置由:起始页面、起始页面的坐标、结束页面、结束页面坐标描述,例如,start_page = 5, (start_x = 43, start_y = 36),end_page = 8, (end_x = 134, end_y=238)。

  • 起始页和结束页只需要解析该章节范围内的文字,选择使用Page.get_textbox()方法获取矩形框rect范围内的文字:

    工具分享 | PDF文档解析工具PyMuPDF,Python,数据处理,python,pdf解析
     
    工具分享 | PDF文档解析工具PyMuPDF,Python,数据处理,python,pdf解析
     
  • 中间页需要在获取页面全部范围内的文字后,过滤页眉和页脚。因此选择使用Page.get_text(“blocks”)方法按块获取该页内所有段落的坐标、文字内容及类型(文本、图片),然后根据坐标过滤掉页眉、页码等不需要的文字内容。

    工具分享 | PDF文档解析工具PyMuPDF,Python,数据处理,python,pdf解析
     
  • 文本乱序问题:作者插入顺序可能不是按照阅读顺序,导致解析出来的文字出现了乱序,例如第5行的文字解析出来之后在第10行文字的后面;解决乱序问题主要是通过设置参数sort=True(默认为False),将解析的文本按照坐标排序,来获得按照自然阅读顺序的文本。

  • 单双列布局问题:双列布局的页面,根据页码的坐标来区分是左侧还是右侧。

4 扫描PDF解析

图片扫描成的PDF并不是按照PDF标准形成的文档,没有包含文本信息,按照 3 中的方法获取的文本是空的。

其中一种解决方法是使用OCR获取图片中的文本:

(1)OCR的工具有多种,如PyMuPDF文档提及的OCRMyPDF(免费)。选择OCRMyPDF的话需要配置依赖的两个软件:tesseract和gs,并且由于OCRMyPDF默认的文字识别模型支持英文,在中文情况下需下载对应的中文识别模型。



工具分享 | PDF文档解析工具PyMuPDF,Python,数据处理,python,pdf解析




 

(2)OCR获取文字会存在识别错误的情况,要考虑识别错误对后续处理是否会造成影响。

5 基于章节的图片解析

  • 使用Page.get_image_info(hashes=False, xrefs=False)接口获取图片的元信息,包括图片的原始宽高、嵌入到pdf后的bbox以及交叉引用的序号xref;获取元信息主要是为了使用位置信息来判断图片属于哪个章节;

    工具分享 | PDF文档解析工具PyMuPDF,Python,数据处理,python,pdf解析
     
  • 然后使用Document.extract_image(xref)根据元信息中的xref获取存储的图片信息并保存;文章来源地址https://www.toymoban.com/news/detail-680495.html

    工具分享 | PDF文档解析工具PyMuPDF,Python,数据处理,python,pdf解析
     

6 小结

  • 最近解析文档最大收获在于:要明确自己的需求,根据需求去选择工具;PyMuPDF提供的接口功能很强大,面对布局多样的文档,不要急于动手,可以多查阅官方文档寻找更合适的接口,在此基础上设计方案。
  • 分享发现的宝藏博客,博主的系列文章记录了使用PyMuPDF将pdf文档转为word的过程。

到了这里,关于工具分享 | PDF文档解析工具PyMuPDF的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python】好用的办公能手:利用OCR进行PDF文档解析(附教程)

    OCR (Optical Character Recognition,光学字符识别)是通过计算机视觉对图像中的文本进行检测和提取的过程。它是在第一次世界大战期间发明的,当时以色列科学家伊曼纽尔·戈德堡(Emanuel Goldberg)发明了一台能读取字符并将其转换为电报代码的机器。到了现在该领域已经达到了一个非

    2024年02月15日
    浏览(42)
  • Java【代码 16】将word、excel文件转换为pdf格式和将pdf文档转换为image格式工具类分享(Gitee源码)aspose转换中文乱码问题处理

    感谢小伙伴儿的分享: ● 不羁 ● 郭中天 整合调整后的工具类Gitee地址:https://gitee.com/yuanzhengme/java_application_aspose_demo ● WordToPdfUtil用于将word文档转换为pdf格式的工具类 ● ExcelToPdfUtil用于将excel文档转换为pdf格式的工具类 ● PdfToImageUtil用于将pdf文档转换为image格式的工具类

    2024年01月24日
    浏览(83)
  • python之pdfminer:从PDF文档中抽取信息的工具

    pdfminer是一个用于从PDF文档中抽取信息的Python库。它提供了一系列的功能,使我们能够读取和解析PDF文件,并从中提取文本内容、元数据、页面布局和图片等。本文将详细介绍pdfminer库的使用示例,包括安装、解析文档、提取文本和图片等操作。 首先,我们需要安装pdfminer库。

    2024年02月11日
    浏览(40)
  • 使用PyMuPDF添加PDF水印

    使用Python添加PDF水印的博客文章。 C:pythoncodenewpdfwatermark.py 在日常工作中,我们经常需要对PDF文件进行处理。其中一项常见的需求是向PDF文件添加水印,以保护文件的版权或标识文件的来源。本文将介绍如何使用Python编程语言和PyMuPDF库在PDF文件中添加水印。 在开始之前,确

    2024年02月11日
    浏览(68)
  • PyMuPDF`库实现PDF旋转功能

    本文介绍了一个简单的Python应用程序,用于将PDF文件转换为旋转90度的PDF文件。主要用于csdn网站中导出的博客pdf是横向的,看起来不是很方便,才想到用python编制一个将pdf从横向转为纵向的功能。 该PDF转换工具具有以下功能: 选择PDF文件:通过点击“选择文件”按钮,用户

    2024年02月12日
    浏览(47)
  • 🔥🔥Java开发者的Python快速实战指南:实用工具之PDF转DOCX文档(可视化界面)

    首先,大家对Python语法的了解已经基本完成,现在我们需要开始进行各种练习。我为大家准备了一些练习题目,比如之前的向量数据库等,这些题目可以参考第三方的SDK来进行操作,文档也是比较完善的。这个过程有点像我们之前使用Java对接第三方接口的方式,所以今天我想

    2024年02月05日
    浏览(62)
  • Java开发者的Python快速实战指南:实用工具之PDF转DOCX文档(可视化界面)

    首先,大家对Python语法的了解已经基本完成,现在我们需要开始进行各种练习。我为大家准备了一些练习题目,比如之前的向量数据库等,这些题目可以参考第三方的SDK来进行操作,文档也是比较完善的。这个过程有点像我们之前使用Java对接第三方接口的方式,所以今天我想

    2024年02月05日
    浏览(64)
  • SpringBoot与文档excel,pdf集成案例分享

    Excel一款电子表格软件。直观的界面、出色的计算功能和图表工具,在系统开发中,经常用来把数据转存到Excel文件,或者Excel数据导入系统中,这就涉及数据转换问题。 PDF是可移植文档格式,是一种电子文件格式,具有许多其他电子文档格式无法相比的优点。PDF文件格式可以

    2024年02月16日
    浏览(40)
  • Word怎么转换成PDF文档?多个Word转换成PDF步骤分享

    word文档是一种非常好用的文件格式,可以帮助用户们很好的保存图片和文字内容,不过并不是只有word这一种文档类文件格式,还有一种pdf文档也深受用户们的欢迎,在工作或者学习过程中这两种文档是可以互相转换格式的,那么Word怎么转换成PDF文档?下面小编就为大家介绍一

    2024年02月12日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包