”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 使用 Google Gemini 在 Python 行中从棘手的 PDF 中提取数据

使用 Google Gemini 在 Python 行中从棘手的 PDF 中提取数据

发布于2024-08-17
浏览:690

在本指南中,我将向您展示如何使用 Gemini Flash 或 GPT-4o 等视觉语言模型 (VLM) 从 PDF 中提取结构化数据。

Gemini 是 Google 最新的视觉语言模型系列,在文本和图像理解方面表现出了最先进的性能。这种改进的多模式功能和长上下文窗口使其特别适用于处理传统提取模型难以处理的视觉上复杂的 PDF 数据,例如图形、图表、表格和图表。

通过这样做,您可以轻松构建自己的数据提取工具,用于可视化文件和网页提取。方法如下:

Gemini 的长上下文窗口和多模式功能使其对于处理传统提取模型难以处理的视觉复杂 PDF 数据特别有用。

设置您的环境

在我们深入提取之前,让我们设置我们的开发环境。本指南假设您的系统上安装了 Python。如果没有,请从 https://www.python.org/downloads/

下载并安装它

⚠️ 请注意,如果您不想使用 Python,您可以使用 thepi.pe 的云平台上传文件并将结果下载为 CSV,而无需编写任何代码。

安装所需的库

打开终端或命令提示符并运行以下命令:

pip install git https://github.com/emcf/thepipe
pip install pandas

对于 Python 新手来说,pip 是 Python 的包安装程序,这些命令将下载并安装必要的库。

设置您的 API 密钥

要使用管道,您需要 API 密钥。

免责声明:虽然 thepi.pe 是一个免费的开源工具,但 API 是有成本的,每个代币大约为 0.00002 美元。如果您想避免此类成本,请查看 GitHub 上的本地设置说明。请注意,您仍然需要向您选择的 LLM 提供商付款。

获取和设置方法如下:

  1. 访问 https://thepi.pe/platform/
  2. 创建帐户或登录
  3. 在设置页面中查找您的 API 密钥

Extracting Data from Tricky PDFs with Google Gemini in lines of Python

现在,您需要将其设置为环境变量。该过程因您的操作系统而异:

  • 从 pi.pe 平台上的设置菜单复制 API 密钥

对于 Windows:

  1. 在开始菜单中搜索“环境变量”
  2. 点击“编辑系统环境变量”
  3. 点击“环境变量”按钮
  4. 在“用户变量”下,单击“新建”
  5. 将变量名称设置为 THEPIPE_API_KEY,并将值设置为您的 API 密钥
  6. 点击“确定”保存

对于 macOS 和 Linux:
打开终端并将此行添加到 shell 配置文件(例如 ~/.bashrc 或 ~/.zshrc):

export THEPIPE_API_KEY=your_api_key_here

然后,重新加载您的配置:

source ~/.bashrc # or ~/.zshrc

定义您的提取模式

成功提取的关键是为要提取的数据定义清晰的架构。假设我们正在从工程量清单文档中提取数据:

Extracting Data from Tricky PDFs with Google Gemini in lines of Python

工程量清单文档中的页面示例。每个页面上的数据独立于其他页面,因此我们“每页”进行提取。每页要提取多条数据,所以我们设置多次提取为True

查看列名,我们可能想要提取如下模式:

schema = {
  "item": "string",
  "unit": "string",
  "quantity": "int",
}

您可以在 pi.pe 平台上根据自己的喜好修改架构。单击“查看架构”将为您提供一个架构,您可以复制并粘贴以与 Python API 一起使用

Image description

从 PDF 中提取数据

现在,让我们使用 extract_from_file 从 PDF 中提取数据:

from thepipe.extract import extract_from_file
results = extract_from_file(
  file_path = "bill_of_quantity.pdf",
  schema = schema,
  ai_model = "google/gemini-flash-1.5b",
  chunking_method = "chunk_by_page"
)

在这里,我们有 chunking_method="chunk_by_page" 因为我们想将每个页面单独发送到 AI 模型(PDF 太大,无法一次全部发送)。我们还设置 multiple_extractions=True 因为每个 PDF 页面都包含多行数据。 PDF 页面如下所示:

Image description

在 pi.pe 平台上查看的工程量清单 PDF 的提取结果

处理结果

提取结果以字典列表的形式返回。我们可以处理这些结果来创建 pandas DataFrame:

import pandas as pd
df = pd.DataFrame(results)
# Display the first few rows of the DataFrame
print(df.head())

这将创建一个包含所有提取信息的 DataFrame,包括文本内容和图形和表格等视觉元素的描述。

导出为不同格式

现在我们已经将数据存储在 DataFrame 中,我们可以轻松地将其导出为各种格式。以下是一些选项:

导出到 Excel

df.to_excel("extracted_research_data.xlsx", index=False, sheet_name="Research Data")

这将创建一个名为“extracted_research_data.xlsx”的 Excel 文件,其中包含一个名为“Research Data”的工作表。 index=False 参数可防止 DataFrame 索引作为单独的列包含在内。

导出为 CSV

如果您喜欢更简单的格式,可以导出为 CSV:

df.to_csv("extracted_research_data.csv", index=False)

这将创建一个可以在 Excel 或任何文本编辑器中打开的 CSV 文件。

结束语

成功提取的关键在于定义清晰的模式并利用人工智能模型的多模式功能。随着您对这些技术越来越熟悉,您可以探索更高级的功能,例如自定义分块方法、自定义提取提示以及将提取过程集成到更大的数据管道中。

版本声明 本文转载于:https://dev.to/emcf/extracting-data-from-tricky-pdfs-with-google-gemini-in-10-lines-of-python-7ni?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • Python、Node js 和 PHP 中用于验证码识别的顶级模块
    Python、Node js 和 PHP 中用于验证码识别的顶级模块
    在我们的自动化时代,大多数解决方案都可以免费找到,我现在不是在谈论解决数学问题,而是稍微复杂的任务,例如数据解析,和我们的例子一样,还有 recapcha 识别。但如何找到一个好的模块呢?毕竟,随着技术的发展,每个人都得到了它,无论是认真的开发人员还是彻头彻尾的骗子。 我分析了验证码识别模块的市场,...
    编程 发布于2024-11-06
  • 以下是一些标题选项,重点关注问题格式和核心内容:

**选项 1(直接且简洁):**

* **如何在 PHP 中高效地循环多维数组?**

**选项2
    以下是一些标题选项,重点关注问题格式和核心内容: **选项 1(直接且简洁):** * **如何在 PHP 中高效地循环多维数组?** **选项2
    在 PHP 中循环多维数组多维数组可能是解析的一个挑战,特别是在处理不同深度级别和非顺序索引时。考虑一个保存事件信息的数组,其中可以包含多个艺术家及其相应的链接,如下所示:array(2) { [1]=> array(3) { ["eventID"]...
    编程 发布于2024-11-06
  • 通过 Linting 提高代码质量
    通过 Linting 提高代码质量
    Whenever I start a new project, one of the first things I do is put in place a code linter. For the uninitiated, linters analyze your project and call...
    编程 发布于2024-11-06
  • 如何有效地执行JavaScript中的回调函数?
    如何有效地执行JavaScript中的回调函数?
    理解 JavaScript 中回调函数的本质在 JavaScript 中,回调函数提供了一种方便的机制,可以在另一个函数完成后执行一个函数它的执行。虽然概念很简单,但回调的最佳实现有时可能不清楚。让我们探讨一个简化的示例:var myCallBackExample = { myFirstFu...
    编程 发布于2024-11-06
  • Vue 框架简介
    Vue 框架简介
    What is Vue? from the Vue website Vue is a "progressive" JavaScript framework for building user interfaces. It works by build...
    编程 发布于2024-11-06
  • 逃离戏剧:为什么 HydePHP 是您的 WordPress 替代品
    逃离戏剧:为什么 HydePHP 是您的 WordPress 替代品
    WordPress 戏剧 随着 WordPress 生态系统面临前所未有的混乱,许多开发人员和网站所有者正在重新考虑他们的平台选择。最近 WordPress 联合创始人 Matt Mullenweg 和 WP Engine 之间的冲突凸显了 WordPress 社区内的控制、贡献和...
    编程 发布于2024-11-06
  • Go 中的并发模式;工作池和扇出/扇入
    Go 中的并发模式;工作池和扇出/扇入
    Go 以其卓越的并发模型而闻名,但许多开发人员只关注 goroutine 和通道。然而,工作池和扇出/扇入等并发模式提供了真正的效率。 本文将介绍这些高级概念,帮助您最大限度地提高 Go 应用程序的吞吐量。 为什么并发很重要 并发允许程序高效地执行任务,特别是在处理 I/O 操作、...
    编程 发布于2024-11-06
  • 如何在 C++ 中将单个字符转换为 std::string?
    如何在 C++ 中将单个字符转换为 std::string?
    从单个字符创建字符串人们可能会遇到需要将表示为 char 数据类型的单个字符转换为std::string。从字符串中获取字符很简单,只需在所需位置索引字符串即可。然而,相反的过程需要不同的方法。要从单个字符创建 std::string,可以使用多种方法:使用 std::string参数计数为 1:c...
    编程 发布于2024-11-06
  • JavaScript 变量名称中美元符号的含义是什么?
    JavaScript 变量名称中美元符号的含义是什么?
    JavaScript 变量名称中美元符号的意义在编程领域,命名约定的使用对于增强代码至关重要可读性并遵循最佳实践。在 JavaScript 中,美元符号 ($) 通常作为变量名称的前缀出现,特别是引用 jQuery 对象的变量名称。美元符号的用途是什么?与流行的看法相反,JavaScript 变量名...
    编程 发布于2024-11-06
  • 如何重新排列 CSS 网格布局中的列以实现移动响应?
    如何重新排列 CSS 网格布局中的列以实现移动响应?
    在 CSS 网格布局中重新排序列在 CSS 网格布局中,有多种技术可以修改列的顺序以实现具体布局。本问题探讨了重新排列移动布局列的可能性,例如将列移动到底部,同时在桌面布局上保持所需的列顺序。解决方案选项:grid-template-areas: 此属性允许您在网格内定义命名区域,然后将网格项分配给...
    编程 发布于2024-11-06
  • Hacktoberfest 周在线拍卖系统
    Hacktoberfest 周在线拍卖系统
    概述 在 Hacktoberfest 的第三周,我决定为一个较小但有前途的项目做出贡献:在线拍卖系统。尽管该项目仍处于早期阶段,但它已经显示出增长潜力,而且我看到了帮助改进其代码库的机会。我的任务是通过减少冗余代码和改进整体结构来重构项目,使其更具可维护性和可扩展性。 ...
    编程 发布于2024-11-06
  • 如何使用“exception_ptr”在 C++ 线程之间传播异常?
    如何使用“exception_ptr”在 C++ 线程之间传播异常?
    在 C 中的线程之间传播异常 当从主线程调用的函数生成多个线程时,就会出现在 C 中的线程之间传播异常的任务用于 CPU 密集型工作的工作线程。挑战在于处理工作线程上可能发生的异常并将其传播回主线程​​以进行正确处理。传统方法一种常见方法是手动捕获工作线程上的各种异常,记录它们的详细信息,然后在主线...
    编程 发布于2024-11-06
  • 如何使用 3D CSS 变换修复 Firefox 中的锯齿状边缘?
    如何使用 3D CSS 变换修复 Firefox 中的锯齿状边缘?
    使用 3D CSS 变换时 Firefox 中的锯齿状边缘与 Chrome 中使用 CSS 变换时的锯齿状边缘问题类似,Firefox 在 3D 变换中也出现了这个问题。背面可见性作为 Chrome 中的潜在解决方案,在 Firefox 中被证明无效。解决方法:要在 Firefox 中缓解此问题,您...
    编程 发布于2024-11-06
  • 为什么 PHP 的 mail() 函数给电子邮件发送带来挑战?
    为什么 PHP 的 mail() 函数给电子邮件发送带来挑战?
    为什么 PHP 的 mail() 函数达不到要求:限制和陷阱虽然 PHP 提供了 mail() 函数用于发送电子邮件,但它却失败了与专用库或扩展相比较短。以下是与使用 mail() 相关的缺点和限制的全面检查:格式问题:mail() 可能会遇到以下问题:标题和内容格式,尤其是操作系统之间的换行符差异...
    编程 发布于2024-11-06
  • 使用 npyConverter 简化 NumPy 文件转换
    使用 npyConverter 简化 NumPy 文件转换
    如果您使用 NumPy 的 .npy 文件并需要将其转换为 .mat (MATLAB) 或 .csv 格式,npyConverter 就是适合您的工具!这个简单的基于 GUI 的工具通过干净且用户友好的界面提供 .npy 文件的批量转换。 主要特点 批量转换:将目录下所有.npy文件...
    编程 发布于2024-11-06

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3