分享一点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 pddef 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.hqwc.cn/news/498140.html

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

相关文章

Java 网络通信

两台或多台设备通过一定物理设备连接起来构成了网络。 根据网络的覆盖范围不同,对网络分类: 局域网:覆盖范围小,仅仅覆盖一个教室或一个机房。城域网:覆盖范围较大,可以覆盖一个城市。广域网:…

Python轴承故障诊断 (14)高创新故障识别模型

目录 往期精彩内容: 创新点: 前言 1 模型整体结构 1.1 模型整体结构如下所示: 1.2 创新点详细介绍: 2 轴承故障数据的预处理 2.1 导入数据 2.2 故障FFT变换可视化 2.3 故障VMD分解可视化 2.4 故障数据的特征预处理数据集…

基于B/S+MySQL+Tomcat开发的旅游信息管理系统

基于B/SMySQLTomcat开发的旅游信息管理系统 项目介绍💁🏻 塞北村镇旅游网站设计主要用于实现旅游景点信息管理,基本功能包括:主界面模块设计,用户注册模块,旅游景点模块,酒店预订模块&#xff0…

如何利用IP代理高效采集产品数据,打造爆品?

文章目录 一、什么是网络爬虫?二、普通人如何通过网络爬虫赚钱?2.1、心得分享2.2、工具自动化收集信息 三、 动态IP代理3.1、覆盖范围3.2、性价比3.3、教程中心F&Q使用教程 3.4、在网络数据采集中的重要性 四、实战应用案例一:ebay电商【…

C++面试常见八股分享

1.unordered_set和set,unordered_map和map的区别 set 和 map 是 C STL 中的两种关联容器,而 unordered_set 和 unordered_map 是 C11 新增的基于哈希表的关联容器。它们之间的主要区别在于底层的数据结构和操作复杂度。 set 和 unordered_set&#xff1…

IntelliJ IDEA 常用快捷键和下载链接

下载链接(windows) 下载 IntelliJ IDEA – 领先的 Java 和 Kotlin IDE 编码时: 跳转到引用方法的地方 (有多个引用时会出现下拉列表) ctrl鼠标左键 跳转后回到原来的地方 …

uniapp:启动图 .9png 制作教程

1、工具安装:自行下载Android Studio 2、制作.9png 注意上图3条黑线的位置,意思是:标注黑线的位置可以进行缩放。 对其大多数启动图来说,标注以上3条黑线即可。

java上机编程题面试,记一次美团Java研发岗的面试经历

第一篇:SpringBoot面试篇 1.1 35常见SpringBoot知识点 问题一:Spring Boot、Spring MVC 和 Spring 有什么区别? 问题二:什么是自动配置? 问题三:什么是 Spring Boot Stater ? 问题四&#x…

进销存是什么意思?如何开发一款进销存管理系统?

这篇给大家详细介绍一下,进销存到底是什么,进销存管理系统有什么用?企业如何开发一款进销存管理系统? 以下内容示例工具均来自于JDY——https://www.jiandaoyun.com 一、进销存是什么? 1、基本概念 进销存&#xff0…

11.以太网交换机工作原理

目录 一、以太网协议二、以太网交换机原理三、交换机常见问题思考四、同网段数据通信全过程五、跨网段数据通信全过程六、关键知识七、调试命令 前言:在网络中传输数据时需要遵循一些标准,以太网协议定义了数据帧在以太网上的传输标准,了解以…

kafka消费者接收不到消息

背景: 对kafka消息进行监听,生产者发了消息,但是消费端没有接到消息,监听代码 消费端,kafka配置 spring.kafka.bootstrap-serverskafka.cestc.dmp:9591 spring.kafka.properties.sasl.jaas.configorg.apache.kafka.…

Docker之数据卷自定义镜像

文章目录 前言一、数据卷二、自定义镜像 前言 Docker提供了一个持久化存储数据的机制,与容器生命周期分离,从而带来一系列好处: 总的来说Docker 数据卷提供了一种灵活、持久、可共享的存储机制,使得容器化应用在数据管理方面更加…