PDF 文件的解析

1、文本 PDF 的解析

1.1、文本的提取

进行文本提取的 Python 库包括:pdfminer.six、PyMuPDF、PyPDF2 和 pdfplumber,效果最好的是 PyMuPDF,PyMuPDF 在进行文本提取时能够最大限度地保留 PDF 的阅读顺序,这对于双栏 PDF 文件的抽取非常有用。下面就以难度比较大的双栏 PDF 为例,来介绍使用 PyMuPDF 库进行文字抽取的效果。
我们以下面的 PDF 为例来看使用 PyMuPDF 进行文字提取的效果。
在这里插入图片描述
进行文本提取的代码如下:

import pymupdfpages = pymupdf.open("./test_data/2022110404_pdf.pdf")
text = pages[0].get_text()print(text)

打印的结果如下:

局进行了首次 HTV-2 飞行试验,试验未取得成功,但验证了助推火箭与高超声速飞行器分离
的技术,为未来发展奠定了基础。美国国防高级研究计划局计划于 2011 年进行 HTV_2 的第
二次飞行试验。目前,美国还在开展 HCV 缩比技术验证机 HTV-3 的设计,以及 HCV 推进方案
的选型工作。
HTV-2 超高速飞行器
(2)“常规打击导弹”计划
“常规打击导弹”计划是美国空军正在研制的另外一种快速全球打击武器,以“猎鹰”
计划的“高超声速技术验证机”为基础进行研制。它也是一种无动力的高超声速滑翔飞行器,
在大气层内滑翔时间约 800(后续型号将达到 3000),最大飞行距离 11000 千米,可以
投送包括“小直径炸弹”、“联合直接攻击弹药”、情报/监视/侦察/毁伤评估无人机等多
种有效载荷。目前,“常规打击导弹”的研制已进入第二阶段,将开展载荷投送飞行器的实
际设计、研制和飞行试验。美空军计划在 2012 年初进行“常规打击导弹”投送载荷飞行器
的飞行试验,2017-2020 年在本土部署首个“常规打击导弹”系统。

1.2、表格的提取

表格提取效果比较好的库有 camelot 和 tabula ,表格又可以分为有线表和少线表。下面就分别以有线表和少线表为例来介绍 camelot 和 tabula 的使用。
我们以下面的 PDF 为例来看使用 camelot 和 tabula 进行有线表格提取的效果。
在这里插入图片描述
使用 camelot 进行表格提取的代码如下:

import camelot
tables = camelot.read_pdf('data.pdf')
print(tables[0].df)

输出结果如下:

0          学校       城市排名      地区排名               学校类型                 学校地址
1      江苏天一中学   无锡市第 1 名  锡山区第 1 名  普通,公办,省级示范校,国家级重点     无锡锡山区东亭二泉中路 182     无锡市第一中学   无锡市第 2 名  梁溪区第 1 名            公办,省重点,         无锡市运河东路 983   江苏省锡山高级中学   无锡市第 3 名  惠山区第 1 名    公办,省级示范校,省一级重点,    江苏省无锡市惠山区政和大道 14   江苏省太湖高级中学   无锡市第 4 名  滨湖区第 1 名          公办,省级示范校,       江苏省无锡市滨湖区太湖镇方桥
5   江苏省梅村高级中学   无锡市第 5 名  滨湖区第 2 名            公办,省重点,  江苏省无锡市湖滨区沁园新村 1466   无锡市第一女子中学   无锡市第 6 名  新吴区第 1 名          公办,省级示范校,       江苏省无锡市新区梅村镇梅育路
7   无锡市第三高级中学   无锡市第 7 名  梁溪区第 2 名                 公办     江苏省无锡市崇宁路崇宁弄 68   无锡市洛社高级中学   无锡市第 8 名  新吴区第 2 名            公办,省重点,      江苏无锡惠山区羊腰湾 509   江苏省锡东高级中学   无锡市第 9 名  惠山区第 2 名             普通,省重点           无锡市洛社镇新兴东路
10  无锡市辅仁高级中学  无锡市第 10 名  锡山区第 2 名              国家级重点   无锡市锡山区安镇街道文瑞路 60

使用 tabula 进行表格提取的代码如下:

import tabuladfs = tabula.read_pdf("data.pdf")
print(dfs[0])

输出结果如下:

0          学校       城市排名      地区排名               学校类型                 学校地址
1      江苏天一中学   无锡市第 1 名  锡山区第 1 名  普通,公办,省级示范校,国家级重点     无锡锡山区东亭二泉中路 182     无锡市第一中学   无锡市第 2 名  梁溪区第 1 名            公办,省重点,         无锡市运河东路 983   江苏省锡山高级中学   无锡市第 3 名  惠山区第 1 名    公办,省级示范校,省一级重点,    江苏省无锡市惠山区政和大道 14   江苏省太湖高级中学   无锡市第 4 名  滨湖区第 1 名          公办,省级示范校,       江苏省无锡市滨湖区太湖镇方桥
5   江苏省梅村高级中学   无锡市第 5 名  滨湖区第 2 名            公办,省重点,  江苏省无锡市湖滨区沁园新村 1466   无锡市第一女子中学   无锡市第 6 名  新吴区第 1 名          公办,省级示范校,       江苏省无锡市新区梅村镇梅育路
7   无锡市第三高级中学   无锡市第 7 名  梁溪区第 2 名                 公办     江苏省无锡市崇宁路崇宁弄 68   无锡市洛社高级中学   无锡市第 8 名  新吴区第 2 名            公办,省重点,      江苏无锡惠山区羊腰湾 509   江苏省锡东高级中学   无锡市第 9 名  惠山区第 2 名             普通,省重点           无锡市洛社镇新兴东路
10  无锡市辅仁高级中学  无锡市第 10 名  锡山区第 2 名              国家级重点   无锡市锡山区安镇街道文瑞路 60

从结果可以看出,在提取有线表时,不管是 camelot 还是 tabula 都能很好地进行提取,而且不需要过多的参数设置。

1.3、扫描 PDF 的解析

1.3.1、文本的提取

在从扫描的 PDF 文件中提取文本时,使用开源的 PaddleOCR,并且用 PPStructure 做版面的分析。我们还是以下面的 PDF 文件为例,不过这是的 PDF 文件是扫描 PDF。
在这里插入图片描述
提取文本的代码如下:

import os
import cv2
from paddleocr import PPStructure, draw_structure_result, save_structure_res
from PIL import Imageimg_path = "./bert-1.png"table_engine = PPStructure(show_log=True)
save_folder = './output'
img = cv2.imread(img_path)
result = table_engine(img)
save_structure_res(result, save_folder, os.path.basename(img_path).split('.')[0])font_path = './fonts/simfang.ttf'
image = Image.open(img_path).convert('RGB')
im_show = draw_structure_result(image, result, font_path=font_path)
im_show = Image.fromarray(im_show)
im_show.save('result.jpg')

提取结果如下:
在这里插入图片描述
图中的左边是根据给出的版面分析结果画出来的,可以看出对双栏 PDF 做了正确的解析。右边是根据识别出来的文本以及文本的坐标画出来的,可以看出基本上和左边的版面以及内容是一致的。

1.3.1、表格的提取

我们还是以下面的 PDF 文件为例,不过这是的 PDF 文件是扫描 PDF。
在这里插入图片描述
代码如下:

import os
import cv2
from paddleocr import PPStructure,draw_structure_result,save_structure_res
from PIL import Imagetable_engine = PPStructure(show_log=True)
save_folder = './output'
img_path = './bert-6.png'
img = cv2.imread(img_path)
result = table_engine(img)
save_structure_res(result, save_folder,os.path.basename(img_path).split('.')[0])for line in result:line.pop('img')print(line)

在上面的输出结果中,有一行类型为 table 的输出,我们将这一行中 html 标签下的内容拷贝出来,放到一个 html 文件中,得到如下的表格:
在这里插入图片描述
可以看出在表头这一块还是有一些差异,但是其他的信息基本都是正确的,应该说效果还是不错的。

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

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

相关文章

MyBatis3.4全集笔记

MyBatis 1. MyBatis 简介 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。 iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Ja…

SpringSecurity6从入门到实战之SpringSecurity整合自动装配详解(源码级讲解,耐心看完)

SpringSecurity6从入门到实战之SpringSecurity整合自动装配详解 这里我先引出问题然后再来一步步进行剖析,SpringSecurity到底是如何实现引入依赖后所有请求都需要进行认证并且会弹出login登录表单页面. 接下来会对SpringBoot的自动装配进行详解,SpringSecurity也是通过自动装配…

AI绘画Stable Diffusion 制作幻术光影字:使用Brightness亮度控制模型,超简单!

大家好,我是灵魂画师向阳。 今天给大家分享的教程是利用AI工具Stable Diffusion 制作光影文字。这是一种通过模拟自然光线照射和阴影效果,使文字看起来具有立体感和逼真感的设计风格。 它的主要目的是让文字自然的融合在场景中。 先来看组实例图。 …

【机器学习数据挖掘】基于ARIMA 自回归积分滑动平均模型的销售价格库存分析报告 附完整python代码

资源地址:Python数据分析大作业 4000字 图文分析文档 销售分析 完整python代码 ​ 完整代码分析 同时销售量后1000的sku品类占比中(不畅销产品)如上,精品类产品占比第一,达到66.7%,其次是香化类产品&#…

【赠书活动】好书推荐—《详解51种企业应用架构模式》

导读: 企业应用包括哪些?它们又分别有哪些架构模式?世界著名软件开发大师Martin Fowler给你答案。 01 什么是企业应用 我的职业生涯专注于企业应用,因此,这里所谈及的模式也都是关于企业应用的。(企业应用…

逐步掌握最佳Ai Agents框架-AutoGen 八 开源模型

前言 本篇文章,我们来探索下AutoGen使用其它LLM大模型。主要原因是AutoGen在使用chatgpt3.5/chatgpt 4等付费模型时,token开销比较大。如果我们的业务,社区里的开源模型就能搞定,那当然就开冲了。 接下来就让我们看下&#xff0…

书籍《钱从哪里来5:微利社会》观后感

样例 前几周看完了这本书,《钱从哪里来5:微利社会》,这应该算是,作者香帅在“得到”出的第5本书了。个人来看,或者说尽自己而言,现在并不是对财理相关话题,有很大兴趣,只是在跨年的时…

有哪些好用的ai工具,可以提升科研、学习、办公等效率?

最近,Sora的诞生为AI再添了一把火。 据介绍,这款“文生视频”的Sora可以直接输出长达60秒的视频,并且包含高度细致的背景、复杂的多角度镜头,以及富有情感的多个角色。 不仅能准确呈现细节,还能理解物体在物理世界中…

指针的认识(野指针、规避野指针、assert宏断言)

目录 a.野指针成因 1.指针未初始化 2.指针越界访问 3.指针指向的空间释放 b.规避野指针 1.指针初始化 2.小心指针越界 3.指针变量不再使用时,及时置NULL,指针使用之前检查有效性 4.避免返回局部变量的地址 c.assert宏断言的使用 概念&#xff1…

容器化部署Pig微服务快速开发框架

系统说明 基于 Spring Cloud 、Spring Boot、 OAuth2 的 RBAC 企业快速开发平台, 同时支持微服务架构和单体架构 提供对 Spring Authorization Server 生产级实践,支持多种安全授权模式 提供对常见容器化方案支持 Kubernetes、Rancher2 、Kubesphere、E…

适合小白学习的项目1901java体育馆管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java体育馆管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助采用了java设计,系统具有完整的源代码和数据库,系统采用web模式,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&am…

【STL深入浅出】之string类的简单模拟实现

📃博客主页: 小镇敲码人 💚代码仓库,欢迎访问 🚀 欢迎关注:👍点赞 👂🏽留言 😍收藏 🌏 任尔江湖满血骨,我自踏雪寻梅香。 万千浮云遮碧…

“慢公司”小红书,加速布局大模型

自成立至今,小红书一直保持低调并被形容为“慢公司”,而这也反映在大模型相关产品线上。尽管上线了多项功能和应用,存在感却稍显不足。 进入2024年,小红书在大模型领域的探索悄然加速,持续引发市场关注度。 多方消息…

BIOS主板(非UEFI)安装fedora40的方法

BIOS主板(非UEFI)安装fedora40的方法 现实困难:将Fedora-Workstation-Live-x86_64-40-1.14.iso写入U盘制作成可启动U盘启动fedora40,按照向导将fedora40安装到真机的sda7分区中得到报错如下内容: Failed to find a suitable stage1 device: E…

socket.gaierror: [Errno 11001] getaddrinfo failed

socket.gaierror: [Errno 11001] getaddrinfo failed 错误通常表示在解析主机名或 IP 地址时出现问题。这可能是因为提供的 IP 地址或主机名无效,或者存在 DNS 解析问题。 打印日志发现config.ini中的host不能加引号

Javaweb基础之json

大家好,这里是教授.F 目录 引入: 定义格式: json规制: 字符串转json: json转字符串: 字符串和json转化细节: json在java中的使用: 应用实例: JavaBean和json字符串的转换: l…

ZL-GL-4离体组织灌流系统测试在恒温条件下离体标本的肌张拉力

简单介绍: 离体组织灌流系统为生理实验及药理实验提供恒温环境,在麦氏浴皿内加养液同时能通氧,测试在恒温条件下离体标本的肌张拉力,离体组织灌流系统具有进气口,配备微调固定器,省时省力,并提高了实验效率,同时可方便串联恒温供水…

prometheus+alertmanager+webhook钉钉机器人告警

版本:centos7.9 python3.9.5 alertmanager0.25.0 prometheus2.46.0 安装alertmanager prometheus 配置webhook # 解压: tar -xvf alertmanager-0.25.0.linux-amd64.tar.gz tar -xvf prometheus-2.46.0.linux-amd64.tar.gz mv alertmanager-0.25.0.linu…

C/S模型测试及优化

1 1.1代码示例 #include<stdio.h> #include<stdio.h>#include <sys/types.h> /* See NOTES */ #include <sys/socket.h>#include <netinet/in.h> #include <netinet/ip.h> /* superset of previous */ #include <arpa/inet.…

计算机基础知识

计算机基础知识 计算机是如何工作的 在本节内容中,介绍了计算机核心工作机制,计算机结构,框架等,计算机需求在人类的历史中是广泛存在的,发展大体经历了从一般计算工具到机械计算机到目前的电子计算的发展过程 文章目录 计算机基础知识一、冯诺依曼体系结构二、CPUCPU的核心参…