PDF 文件的解析

news2024/11/19 19:24:45

1、文本 PDF 的解析

1.1、文本的提取

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

import pymupdf

pages = 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 tabula

dfs = 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 Image

img_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 Image
 
table_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.coloradmin.cn/o/1799013.html

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

相关文章

刷完50题,搞定十大网络基础知识

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 上午好,我的网工朋友 咱新手网工,入行之前最需要做的准备之一,就是抓住网络基础知识,毕竟是饭碗&…

C语言野指针、规避野指针、assert宏断言

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

上位机快速开发框架

右上角向下按钮 -> 后台配置 系统菜单 角色管理 分配权限 用户管理 设备配置 通道管理 首页界面设计 设备1配置 带反馈按钮,如:用户按键00105,PLC反馈状态00106 设备2配置 参数说明: TagName_Main:主要信息&#…

加密经济浪潮:探索Web3对金融体系的颠覆

随着区块链技术的快速发展,加密经济正在成为全球金融领域的一股新的浪潮。而Web3作为下一代互联网的代表,以其去中心化、可编程的特性,正深刻影响着传统金融体系的格局和运作方式。本文将深入探讨加密经济对金融体系的颠覆,探索We…

SpringBoot+百度地图+Mysql实现中国地图可视化

通过SpringBoot百度地图Mysql实现中国地图可视化 一、申请百度地图的ak值 进入百度开发者平台 编辑以下内容 然后申请成功 二、Springboot写一个接口 确保数据库里有数据 文件目录如下 1、配置application.properties文件 #访问端口号 server.port9090 # 数据库连接信息 spr…

Xamarin.Android实现通知推送功能(1)

目录 1、背景说明1.1 开发环境1.2 实现效果1.2.1 推送的界面1.2.2 推送的设置1.2.3 推送的功能实现1.2.3.1、Activity的设置【重要】1.2.3.2、代码的实现 2、源码下载3、总结4、参考资料 1、背景说明 在App开发中,通知(或消息)的推送&#x…

CiteScore 2023发布,AI Open斩获45分,位列全球计算机领域前1%

与影响因子(IF)一样,引用分数(CiteScore)同样是衡量学术期刊影响力的重要指标之一,且大有赶超前者的势头。 6 月 6 日,CiteScore 2023 正式发布,人工智能领域可自由访问的期刊平台 …

塑造财务规划团队的未来角色

随着企业不断改革,其财务规划团队的格局也在不断变化,领先行业的专业人士已经开始利用更创新的财务知识和思维来驾驭现代化财务规划角色的复杂性。财务团队需要不同的职能角色和技能组合来支持其发展,多学科团队和跨职能协作带来的挑战和机遇…

刷代码随想录有感(95):合并区间

题干&#xff1a; 代码&#xff1a; class Solution { public:static bool cmp(vector<int>& a, vector<int>& b){return a[0] < b[0];}vector<vector<int>> merge(vector<vector<int>>& intervals) {sort(intervals.begi…

水务设备数字化管理

在数字化浪潮席卷全球的今天&#xff0c;水务行业也迎来了数字化转型的重要契机。传统水务管理模式中&#xff0c;设备监控、数据收集、运行维护等环节往往存在效率低下、成本高昂、安全隐患多等问题。而HiWoo Cloud平台的出现&#xff0c;以其强大的设备接入能力、高效的数据处…

安卓虚拟屏幕锁屏画面源码分析部分KeyguardPresentation

背景&#xff1a; 在搞虚拟多屏和投屏相关业务时候&#xff0c;发现在锁屏时候一个画面比较特殊&#xff0c;但是明显我们自己也没有给虚拟屏幕和投屏有绘制过这个页面。 具体页面如下&#xff1a; 这个圈中小方框就是虚拟屏幕&#xff0c;在息屏待机时候居然也有个类似锁屏…

【android 9】【input】【8.发送按键事件2——InputDispatcher线程】

系列文章目录 本人系列文章-CSDN博客 目录 系列文章目录 1.简介 1.1流程介绍 1.2 时序图 2.普通按键消息发送部分源码分析&#xff08;按键按下事件&#xff09; 2.1 开机后分发线程阻塞的地方 2.2 InputDispatcher::dispatchOnceInnerLocked 2.3 InputDispatcher::disp…

从零开始手把手Vue3+TypeScript+ElementPlus管理后台项目实战四(引入Axios,并调用第一个接口)

RealWorld接口综述 本项目调用的是RealWorld项目的开放接口。 接口文档如下&#xff1a; https://main--realworld-docs.netlify.app/docs/specs/backend-specs/endpoints https://main--realworld-docs.netlify.app/docs/specs/frontend-specs/swagger RealWorld 是一个适…

GAT1399协议分析(10)--单图像删除

一、官方接口 由于批量删除的接口,图像只能单独删除。 二、wireshark实例 这个接口比较简单,调用request delete即可 文本化: DELETE /VIID/Images/34078100001190001002012024060513561300065 HTTP/1.1 Host: 10.0.201.56:31400 User-Agent: python-requests/2.32.3 Acc…

推荐ChatGPT4.0——Code Copilot辅助编程、Diagrams: Show Me绘制UML图、上传PDF并阅读分析

5月14日凌晨1点、太平洋时间的上午 10 点&#xff0c;OpenAI的GPT-4o的横空出世&#xff0c;再次巩固了其作为行业颠覆者的地位。GPT-4o的发布不仅仅是一个产品的揭晓&#xff0c;它更像是向世界宣告AI技术已迈入了一个全新的纪元&#xff0c;连OpenAI的领航者萨姆奥特曼也不禁…

Redis客户端界面工具QuickRedis

介绍 QuickRedis 是一款 永久免费 的 Redis 可视化管理工具。它支持直连、哨兵、集群模式&#xff0c;支持亿万数量级的 key&#xff0c;还有令人兴奋的 UI。QuickRedis 支持 Windows 、 Mac OS X 和 Linux 下运行。 QuickRedis 是一个效率工具&#xff0c;当别人在努力敲命令…

代码随想录第27天|贪心算法part1

455.分发饼干 先给孩子和饼干排序&#xff0c;每次选取一个最大的饼干给一个最大胃口的孩子&#xff0c;直到饼干分完或者遍历完孩子 class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {sort(g.begin(), g.end());sort(…

【vector模拟实现】附加代码讲解

vector模拟实现 一、看源代码简单实现1. push_backcapacity&#xff08;容量&#xff09;sizereserve&#xff08;扩容&#xff09;operator[ ] &#xff08;元素访问&#xff09; 2. pop_back3. itorator&#xff08;迭代器&#xff09;4.insert & erase &#xff08;头插…

逻辑过期解决缓存击穿

我先说一下正常的业务流程&#xff1a;需要查询店铺数据&#xff0c;我们会先从redis中查询&#xff0c;判断是否能命中&#xff0c;若命中说明redis中有需要的数据就直接返回&#xff1b;没有命中就需要去mysql数据库查询&#xff0c;在数据库中查到了就返回数据并把该数据存入…

设置密码重要性!美国一配件制造商因忘设密码影响50 多万客户

1、Cox Biz 身份验证绕过漏洞使数百万台设备暴露于接管 美国一家领先宽带提供商cox的基础架构中存在 API 授权绕过漏洞&#xff0c;如果被利用攻击者不仅可以访问企业客户的个人身份信息 &#xff08;PII&#xff09;&#xff0c;还可以访问 Wi-Fi 密码和连接设备上的信息&…