」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 使用 Google Gemini 在 Python 行中從棘手的 PDF 中提取數據

使用 Google Gemini 在 Python 行中從棘手的 PDF 中提取數據

發佈於2024-08-17
瀏覽:171

在本指南中,我將向您展示如何使用 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如有侵犯,請聯絡study_golang @163.com刪除
最新教學 更多>
  • 如何解決 MySQL C# 中的文字編碼問題?
    如何解決 MySQL C# 中的文字編碼問題?
    修復MySQL C# 中的文字編碼問題使用實體框架在C# 中處理MySQL 資料庫時,使用者可能會遇到文字編碼問題,特別是帶有特殊字符,例如“ë”,渲染不正確。本文探討了解決此常見問題的最合適的解決方案。 要修正編碼問題,必須執行以下操作:驗證排序規則設定: 確保所涉及的資料庫或表的排序規則與UTF...
    程式設計 發佈於2024-11-06
  • 如何將美麗搜尋與 Node.js 集成
    如何將美麗搜尋與 Node.js 集成
    作為 Node.js 開發人員,建立能夠提供快速且準確的搜尋結果的應用程式非常重要。使用者期望立即得到相關的回應,但實現起來可能具有挑戰性,特別是在處理大型資料集時。 這就是美麗搜尋的用武之地——一個為輕鬆滿足這些需求而構建的搜尋引擎。 什麼是美麗搜尋? Meilisearch ...
    程式設計 發佈於2024-11-06
  • 平行 JavaScript 機
    平行 JavaScript 機
    作者:Vladas Saulis,PE Prodata,克萊佩達,立陶宛 2024 年 5 月 18 日 抽象的 本文提出了一種新的程式設計模型,可以以簡單且自動平衡的方式利用多核心 CPU 系統。該模型還提出了一種更簡單的程式設計範例,用於在大多數大規模平行計算領域(例如天氣預報、核子物理、搜尋引...
    程式設計 發佈於2024-11-06
  • 推薦項目:人事管理系統資料庫設置
    推薦項目:人事管理系統資料庫設置
    LabEx 的這個綜合計畫提供了深入研究資料庫管理世界的寶貴機會,重點是人事管理系統的創建和實施。無論您是新手資料庫管理員還是經驗豐富的開發人員,這種實務經驗都將為您提供必要的技能,以便在關聯式資料庫環境中有效管理和操作資料。 深入了解資料庫基礎知識 這個專案首先引導您完成使用 s...
    程式設計 發佈於2024-11-06
  • Python 中實例方法和類別方法有什麼不同?
    Python 中實例方法和類別方法有什麼不同?
    類別與實例方法Python 的PEP 8 風格指南建議使用“self”作為實例方法的第一個參數,使用“ cls」作為類別方法的第一個參數。理解這兩類方法之間的區別對於有效的物件導向程式設計至關重要。 實例方法實例方法與類別的特定實例相關聯。它們對實例的資料進行操作,並且通常接收“self”作為它們的...
    程式設計 發佈於2024-11-06
  • 將 AdoptiumJDK 原始碼載入到 Eclipse IDE 中
    將 AdoptiumJDK 原始碼載入到 Eclipse IDE 中
    AdoptiumJDK 的安裝程式中沒有內建原始程式碼文件,如果您需要透過 Eclipse IDE 檢查如何使用任何本機 JDK 方法,這是不可能的。 依照以下步驟在Eclipse IDE中載入原始碼: 造訪 AdoptiumJDK 官方網站並按所需的 JDK 版本進行過濾,在我的例子中是 11....
    程式設計 發佈於2024-11-06
  • 絕對定位與相對定位:為什麼它們的行為如此不同?
    絕對定位與相對定位:為什麼它們的行為如此不同?
    了解絕對位置與相對位置:寬度、高度等處理網頁上的元素定位時,了解這些概念絕對位置與相對位置的區別至關重要。讓我們深入探討經常引起疑問的四個關鍵點:1。相對寬度與絕對寬度為何相對定位的div會自動佔據100%寬度,而絕對定位的div只佔據內容寬度? 原因是設定位置:absolute 從文件結構的正常流...
    程式設計 發佈於2024-11-06
  • 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 = { myFirstFunc...
    程式設計 發佈於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,可以使用多種方法:char c = 34; std::strin...
    程式設計 發佈於2024-11-06

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3