当前位置:首页 > 科技  > 软件

用Python替代Adobe,零成本从PDF提取数据

来源: 责编: 时间:2023-11-28 09:34:28 180观看
导读一、简介PDF文件是官方报告、发票和数据表的通用语言,然而从PDF文件中提取表格数据可能是一项挑战。尽管Adobe Acrobat等工具提供了解决方案,但它们并不总是易于获取或可自动化运行,而Python则是编程语言中的瑞士军刀。

一、简介

PDF文件是官方报告、发票和数据表的通用语言,然而从PDF文件中提取表格数据可能是一项挑战。尽管Adobe Acrobat等工具提供了解决方案,但它们并不总是易于获取或可自动化运行,而Python则是编程语言中的瑞士军刀。本文将探讨如何利用Python轻松实现PDF数据提取,而无需使用昂贵的软件。KnO28资讯网——每日最新资讯28at.com

二、了解挑战

PDF文件是为展示而设计的,而不是为提取数据。它们通常包含复杂的布局,在视觉上很吸引人,但在计算上却无法访问。因此,提取表格等结构化信息非常困难。KnO28资讯网——每日最新资讯28at.com

三、使用PyMuPDF提取文本

PyMuPDF是一款轻量级的库,擅长读取PDF文件并提取文本。只需几行代码,就可以读取PDF并从任意页面提取文本。本文从奔驰集团2022年第四季度年度报告中提取“股东权益变动综合报表(Consolidated Statement of Changes in Equity)”,代码如下。KnO28资讯网——每日最新资讯28at.com

import fitz  import pandas as pdimport re# --- PDF处理 ---# 定义PDF文件的路径并打开文档pdf_path = '..../Merc 2022Q4 Rep.pdf'pdf_document = fitz.open(pdf_path)# 选择要阅读的特定页面page = pdf_document[200]# 获取页面的尺寸page_rect = page.rectpage_width, page_height = page_rect.width, page_rect.height# 定义感兴趣区域的矩形(不包括脚注)non_footnote_area_height = page_height * 0.90clip_rect = fitz.Rect(0, 0, page_width, non_footnote_area_height)# 从定义的区域提取文本page_text = page.get_text("text", clip=clip_rect)lines_page = page_text.strip().split('/n')

四、规整数据

提取的文本通常带有不需要的字符或格式。这就是预处理发挥作用的地方。Python的字符串处理功能使用户能够清洗和准备数据以转换为表格格式。KnO28资讯网——每日最新资讯28at.com

# --- 数据清洗 ---# 定义要搜索的字符串并查找其索引search_string = 'Balance at 1 January 2021 (restated) 'try:    index = lines_page.index(search_string)    data_lines = lines_page[index:]except ValueError:    print(f"The string '{search_string}' is not in the list.")    data_lines = []# 如果不是数字或连字符,则合并连续字符串条目def combine_consecutive_strings(lines):    combined = []    buffer = ''        for line in lines:        if isinstance(line, str) and not re.match(r'^[-/d,.]+$', line.strip()):            buffer += ' ' + line if buffer else line        else:            if buffer:                combined.append(buffer)                buffer = ''            combined.append(line.strip())        if buffer:        combined.append(buffer)        return combinedcleaned_data = combine_consecutive_strings(data_lines)

五、使用Pandas创建表格

一旦数据清洗完成,就可以使用pandas了。这个功能强大的数据分析库可以将一系列数据点转换为DataFrame,即一个二维的、大小可变的、可能是异构的带有标记轴的表格数据结构。KnO28资讯网——每日最新资讯28at.com

# --- 创建DataFrame ---# 根据列数将清洗后的数据分割成块num_columns = 6data_chunks = [cleaned_data[i:i + num_columns] for i in range(0, len(cleaned_data), num_columns)]# 定义DataFrame的表头headers = [    'Description',    'Share capital',    'Capital reserves',    'Retained earnings (restated)',    'Currency translation (restated)',    'Equity instruments / Debt instruments']# 使用数据块和表头创建DataFramefinancial_df = pd.DataFrame(data_chunks, columns=headers)# Display the head of the DataFrame to verify its structurefinancial_df.head()

如下所示是从PDF文件中提取的表格结果。KnO28资讯网——每日最新资讯28at.com

图片图片KnO28资讯网——每日最新资讯28at.com

六、结语

通过利用Python强大的库,可以自动化繁琐的PDF数据提取任务。这种方法不仅成本低,而且提供了Python开发者所喜爱的灵活性和强大功能。KnO28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-34615-0.html用Python替代Adobe,零成本从PDF提取数据

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 秒杀系统 Go 并发编程实践!

下一篇: 层次分析法--可以帮助你做决策的简单算法

标签:
  • 热门焦点
  • 6月安卓手机性能榜:vivo/iQOO霸占旗舰排行榜前三

    6月安卓手机性能榜:vivo/iQOO霸占旗舰排行榜前三

    2023年上半年已经正式过去了,我们也迎来了安兔兔V10版本,在新的骁龙8Gen3和天玑9300发布之前,性能榜的榜单大体会以骁龙8Gen2和天玑9200+为主,至于那颗3.36GHz的骁龙8Gen2领先
  • SpringBoot中使用Cache提升接口性能详解

    SpringBoot中使用Cache提升接口性能详解

    环境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架从 3.1 开始,对 Spring 应用程序提供了透明式添加缓存的支持。和事务支持一样,抽象缓存允许一致地使用各
  • 一文搞定Java NIO,以及各种奇葩流

    一文搞定Java NIO,以及各种奇葩流

    大家好,我是哪吒。很多朋友问我,如何才能学好IO流,对各种流的概念,云里雾里的,不求甚解。用到的时候,现百度,功能虽然实现了,但是为什么用这个?不知道。更别说效率问题了~下次再遇到,
  • 慕岩炮轰抖音,百合网今何在?

    慕岩炮轰抖音,百合网今何在?

    来源:价值研究所 作者:Hernanderz“难道就因为自己的一个产品牛逼了,从客服到总裁,都不愿意正视自己产品和运营上的问题,选择逃避了吗?”这一番话,出自百合网联合创
  • 腾讯VS网易,最卷游戏暑期档,谁能笑到最后?

    腾讯VS网易,最卷游戏暑期档,谁能笑到最后?

    作者:无锈钵来源:财经无忌7月16日晚,上海1862时尚艺术中心。伴随着幻象的精准命中,硕大的荧幕之上,比分被定格在了14:12,被寄予厚望的EDG战队以绝对的优势战胜了BLG战队,拿下了总决
  • 微博大门常打开,迎接海外画师漂洋东渡

    微博大门常打开,迎接海外画师漂洋东渡

    作者:互联网那些事“起猛了,我能看得懂日语了”。“为什么日本人说话我能听懂?”“中文不像中文,日语不像日语,但是我竟然看懂了”…&hell
  • 小米公益基金会捐赠2500万元驰援北京、河北暴雨救灾

    小米公益基金会捐赠2500万元驰援北京、河北暴雨救灾

    8月2日消息,今日小米科技创始人雷军在其微博上发布消息称,小米公益基金会宣布捐赠2500万元驰援北京、河北暴雨救灾。携手抗灾,京冀安康!以下为公告原文
  • 2022爆款:ROG魔霸6 冰川散热系统持续护航

    2022爆款:ROG魔霸6 冰川散热系统持续护航

    喜逢开学季,各大商家开始推出自己的新产品,进行打折促销活动。对于忠实的端游爱好者来说,能够拥有一款梦寐以求的笔记本电脑是一件十分开心的事。但是现在的
  • 电博会上海尔智家模拟500平大平层,还原生活空间沉浸式体验

    电博会上海尔智家模拟500平大平层,还原生活空间沉浸式体验

    电博会为了更好地让参展观众真正感受到智能家居的绝妙之处,海尔智家的程传岭先生同样介绍了展会上海尔智家的模拟500平大平层,还原生活空间沉浸式体验。程传
Top