分享一点PDF中获取表格的探索过程

版面分析:如何得到标题、如何的得到段落(正确的段落)、如何得到表格、如何得到图片,图和得到图片上的文字?

还有细节问题:双栏和多栏的问题、公式问题

扫描件:扫描件本质上是图片,如何从图片中解析得到文件。

本篇文章,探索的是,非扫描件PDF中,获取表格的思路。

挑选了可以解析PDF中表格的组件,进行了测试。主要测试了 pdfplumber 和 camelot
整体的感受是:网上看啥组件都好,实际测,啥组件都不行。效果好的不开源收费,开源的效果不好。测试下来,发现把组件融合起来,还是能不花钱解决问题的,都是麻烦折腾一些。

pdfplumber

实际测试情况:解析表格的能力比较差,它把三列的表格解析成了很多列。

安装

pip install pdfplumber

可运行代码

# 导入pdfplumber
import pdfplumber

# 读取pdf文件,保存为pdf实例
pdf =  pdfplumber.open("D:\\angus\\py\\困难pdf节选西藏奇正2022.pdf") 

# 访问第二页
first_page = pdf.pages[2]

# 自动读取表格信息,返回列表
table = first_page.extract_table()

print(table)

实际PDF中的表格

解析后的结果,可以看到都是错误的。因为它解析出来九列。

camelot

camelot可以正确的识别表格的列,问题是把正文当做表格。不过camelot的定位就是表格识别。

tips1:这里camelot是可以传入表格的坐标的,可以配合其它的python组件,获取到表格位置,然后只解析表格。camelot最佳的用途就是解析表格。也只能解析表格,所以可以把要解析的表格部分单独给camelot。

tips2:这里也可以考虑,把解析后为一列的表格去掉(表格为一列好像没有什么意义。虽然粗暴,但是没有太大问题)。

安装

pip install camelot-py[cv]

可运行代码

import camelot
import pandas as pd

def extract_table_data(pdf_path):
    tables = camelot.read_pdf(pdf_path, flavor='stream', pages='all')
    return tables

# 用法示例
pdf_path = "D:\\angus\\py\\困难pdf节选西藏奇正2022.pdf"
table_data = extract_table_data(pdf_path)
for idx, table in enumerate(table_data):
    print(f"Table {idx+1}:")
    print(table.df)
    print(f"Number of columns: {len(table.df.columns)}")
    print()

python pdf2table-v2.py

效果,正确解析了表格的列,但是把正文也当做了表格。

原始表格如下,表格解析没有问题。

最开始的想法是,把这些解析为一列的表格,通过LLM去分析段落。这并不是一个好主意

我把数据给通义千问,它表示目前没有这项能力

prompt如下

以下是一个文件的内容,请帮我分析提取真正的标题、正文
要求1:只需要根据内容,判断是否可以是标题。不要额外生成任何内容!!
要求2:其中正文要给我划分好段落!!
内容如下 :
{0                  西藏奇正藏药股份有限公司 2022 年年度报告全文
1     管理层负责按照企业会计准则的规定编制财务报表,使其实现公允反映,并设计、执行
2        和维护必要的内部控制,以使财务报表不存在由于舞弊或错误导致的重大错报。
3     在编制财务报表时,管理层负责评估奇正藏药的持续经营能力,披露与持续经营相关的
4   事项(如适用),并运用持续经营假设,除非管理层计划清算奇正藏药、停止营运或别无其
5                                    他现实的选择。
6         奇正藏药治理层(以下简称“治理层”)负责监督奇正藏药的财务报告过程。
7                          六、注册会计师对财务报表审计的责任
8    我们的目标是对财务报表整体是否不存在由于舞弊或错误导致的重大错报获取合理保证,
9   并出具包含审计意见的审计报告。合理保证是高水平的保证,但并不能保证按照审计准则执
10  行的审计在某一重大错报存在时总能发现。错报可能由于舞弊或错误所导致,如果合理预期
11  错报单独或汇总起来可能影响财务报表使用者依据财务报表作出的经济决策,则通常认为错
12                                    报是重大的。
13    在按照审计准则执行审计的过程中,我们运用了职业判断,并保持了职业怀疑。同时,
14                                我们也执行以下工作:
15    (一)识别和评估由于舞弊或错误导致的财务报表重大错报风险,设计和实施审计程序
16  以应对这些风险,并获取充分、适当的审计证据,作为发表审计意见的基础。由于舞弊可能
17  涉及串通、伪造、故意遗漏、虚假陈述或凌驾于内部控制之上,未能发现由于舞弊导致的重
18               大错报的风险高于未能发现由于错误导致的重大错报的风险。
19               (二)了解与审计相关的内部控制,以设计恰当的审计程序。
20       (三)评价管理层选用会计政策的恰当性和作出会计估计及相关披露的合理性。
21    (四)对管理层使用持续经营假设的恰当性得出结论。同时,根据获取的审计证据,就
22  可能导致对奇正藏药持续经营能力产生重大疑虑的事项或情况是否存在重大不确定性得出结
23  论。如果我们得出结论认为存在重大不确定性,审计准则要求我们在审计报告中提请报表使
24  用者注意财务报表中的相关披露;如果披露不充分,我们应当发表非无保留意见。我们的结
25  论基于截至审计报告日可获得的信息。然而,未来的事项或情况可能导致奇正藏药不能持续
26                                       经营。
27    (五)评价财务报表的总体列报、结构和内容,并评价财务报表是否公允反映相关交易
28                                      和事项。
29    (六)就奇正藏药中实体或业务活动的财务信息获取充分、适当的审计证据,以对财务
30    报表发表意见。我们负责指导、监督和执行集团审计。我们对审计意见承担全部责任。
31    我们与治理层就计划的审计范围、时间安排和重大审计发现等事项进行沟通,包括沟通
32                    我们在审计中识别出的值得关注的内部控制缺陷。
33    我们还就已遵守与独立性相关的职业道德要求向治理层提供声明,并与治理层沟通可能}m模

通义千问回答这活儿干不了

我再问chatGPT

首先给出了我正确的标题内容,但是段落还不是很OK。但是似乎离得不远了,之所以内容没有正确的分段落。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

oracle with check option 学习

with check option保证了通过视图进行的修改,必须也能通过该视图看到修改后的结果; 你插入,那么插入这条记录在刷新视图后必须可以看到; 如果修改,修改完的结果也必须能通过该视图看到; scott登录了以后创…

React中使用useActive

1.引入 import { useActivate } from "react-activation";2.React Activation 在React中使用react-activation,其实就是类似于Vue中的keep-alive,实现数据的缓存; 源码: import { ReactNode, ReactNodeArray, Context, Component…

YOLOv8改进,添加GSConv+Slim Neck,有效提升目标检测效果,代码改进(超详细)

目录 摘要 主要想法 GSConv GSConv代码实现 slim-neck slim-neck代码实现 yaml文件 完整代码分享 总结 摘要 目标检测是计算机视觉中重要的下游任务。对于车载边缘计算平台来说,巨大的模型很难达到实时检测的要求。而且,由大量深度可分离卷积层构…

2024-02-28(Kafka,Oozie,Flink)

1.Kafka的数据存储形式 一个主题由多个分区组成 一个分区由多个segment段组成 一个segment段由多个文件组成(log,index(稀疏索引),timeindex(根据时间做的索引)) 2.读数据的流程 …

Laravel - API 项目适用的图片验证码

1. 安装 gregwar/captcha 图片验证码接口的流程是: 生成图片验证码 生成随机的 key,将验证码文本存入缓存。 返回随机的 key,以及验证码图片 # 不限于 laravel 普通 php 项目也可以使用额 $ composer require gregwar/captcha2. 开发接口 …

51单片机(6)-----直流电机的介绍与使用(通过独立按键控制电机的运行)

前言:感谢您的关注哦,我会持续更新编程相关知识,愿您在这里有所收获。如果有任何问题,欢迎沟通交流!期待与您在学习编程的道路上共同进步。 目录 一. 直流电机模块介绍 1.直流电机介绍 2.电机参数 二. 程序设计…

Oracle 直接路径插入(Direct-Path Insert)

直接路径插入(Direct Path Insert)是Oracle一种数据加载提速技术,可以在使用insert语句或SQL*Loader工具大批量加载数据时使用。直接路径插入处理策略与普通insert语句完全不同,Oracle会通过牺牲空间,安全性&#xff0…

防御保护:防火墙内容安全

一、IAE(Intelligent Awareness Engine)引擎 二、深度检测技术(DFI和DPI) 1.DPI – 深度包检测技术 DPI主要针对完整的数据包(数据包分片,分段需要重组),之后对数据包的内容进行识别。&#x…

2024年阿里云2核4G云服务器性能如何?价格便宜有点担心

阿里云2核4G服务器多少钱一年?2核4G服务器1个月费用多少?2核4G服务器30元3个月、85元一年,轻量应用服务器2核4G4M带宽165元一年,企业用户2核4G5M带宽199元一年。本文阿里云服务器网整理的2核4G参加活动的主机是ECS经济型e实例和u1…

第三节-docker-cs架构分析

一、组成 docker engine:docker-client、rest-api、dockerd containerd: 1、管理容器生命周期 2、拉取/推送镜像 3、存储管理 4、调用runc 5、管理网络 containerd-shim:相当于一个驱动,containerd通过containerd-shim驱使…

SpringCloudNacos配置管理及热更新

文章目录 统一配置管理在nacos中添加配置文件从微服务拉取配置配置热更新方式1方式2 配置优先级 之前对 Nacos注册中心入门 已经做了演示. 这篇文章对 Nacos 的服务分级存储模型做理论与实践. 本篇文章阐述 Nacos 做配置中心的理论和实践. 统一配置管理 当微服务部署的实例越…

Vue NextTick工作原理及使用场景

$nextTick的定义及理解: 定义:在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。 所以就衍生出了这个获取更新后的DOM的Vue方法。所以放在Vue.nextTick()回调函数中的执行的应该是会对DOM进行操…

热点参数流控(Sentinel)

热点参数流控 热点流控 资源必须使用注解 SentinelResource 编写接口 以及 热点参数流控处理器 /*** 热点流控 必须使用注解 SentinelResource* param id* return*/ RequestMapping("/getById/{id}") SentinelResource(value "getById", blockHandler …

Media Encoder 2024 for Mac v24.2.1中文激活版

Adobe Media Encoder 2024 for Mac 是一款专业的视频和音频编码工具,专为 Mac 用户打造。它可以将原始素材转换为各种流行格式,以满足不同的播放和发布需求。借助其先进的编码技术和预设设置,用户可以轻松优化输出质量,同时保持文…

森林监测VR虚拟情景再现系统更便利

AI人工智能技术已经逐渐渗透到各个领域,为我们的生活带来了诸多便利。在虚拟仿真教学领域,AI技术的应用也日益丰富,为虚拟情景交互体验带来了前所未有的好处。 提高VR虚拟情景的逼真度 通过深度学习和计算机视觉等技术,AI/VR虚拟现…

[unity]lua热更新——个人复习笔记【侵删/有不足之处欢迎斧正】

一、AssetBundle AB包是特定于平台的资产压缩包,类似于压缩文件 相对于RESOURCES下的资源,AB包更加灵活轻量化,用于减小包体大小和热更新 可以在unity2019环境中直接下载Asset Bundle Browser 可以在其中设置关联 AB包生成的文件 AB包文件…

2024.02.28作业

模拟面试 1. 什么是回调函数 将函数作为另一函数的参数 实现:通过函数指针,如线程的创建函数 2. 结构体和共用体的区别 结构体的每个成员都会分配内存,大小为各个成员所占内存之和,内存对齐 共用体的内存以最大成员为主 3. 赋…

MATLAB练习题:投骰子经过100格的概率

​讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili 有一个人从原点(第0格)开始扔一个六面…

【Ansys Fluent Web 】全新用户界面支持访问大规模多GPU CFD仿真

基于Web的技术将释放云计算的强大功能,加速CFD仿真,从而减少对硬件资源的依赖。 主要亮点 ✔ 使用Ansys Fluent Web用户界面™(UI),用户可通过任何设备与云端运行的仿真进行远程交互 ✔ 该界面通过利用多GPU和云计算功…

玩客云刷机(保姆级教程)ArmBian+Casaos

最近我发现自己买的玩客云会24小时写我的硬盘,后面了解了一下,玩客云有链克计划,会一直写你的盘,且关不掉,所以我就自己刷了个机,刷成了Armbian,下面就是我的教程 准备材料 一根usb公对公的线…