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

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

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

在本指南中,我將向您展示如何使用 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刪除
最新教學 更多>
  • CSS強類型語言解析
    CSS強類型語言解析
    您可以通过其强度或弱输入的方式对编程语言进行分类的方式之一。在这里,“键入”意味着是否在编译时已知变量。一个例子是一个场景,将整数(1)添加到包含整数(“ 1”)的字符串: result = 1 "1";包含整数的字符串可能是由带有许多运动部件的复杂逻辑套件无意间生成的。它也可以是故意从单个真理...
    程式設計 發佈於2025-06-07
  • 在Python中如何創建動態變量?
    在Python中如何創建動態變量?
    在Python 中,動態創建變量的功能可以是一種強大的工具,尤其是在使用複雜的數據結構或算法時,Dynamic Variable Creation的動態變量創建。 Python提供了幾種創造性的方法來實現這一目標。 利用dictionaries 一種有效的方法是利用字典。字典允許您動態創建密鑰並...
    程式設計 發佈於2025-06-07
  • 大批
    大批
    [2 數組是對象,因此它們在JS中也具有方法。 切片(開始):在新數組中提取部分數組,而無需突變原始數組。 令ARR = ['a','b','c','d','e']; // USECASE:提取直到索引作...
    程式設計 發佈於2025-06-07
  • 解決Spring Security 4.1及以上版本CORS問題指南
    解決Spring Security 4.1及以上版本CORS問題指南
    彈簧安全性cors filter:故障排除常見問題 在將Spring Security集成到現有項目中時,您可能會遇到與CORS相關的錯誤,如果像“訪問Control-allo-allow-Origin”之類的標頭,則無法設置在響應中。為了解決此問題,您可以實現自定義過濾器,例如代碼段中的MyFi...
    程式設計 發佈於2025-06-07
  • Go語言如何動態發現導出包類型?
    Go語言如何動態發現導出包類型?
    與反射軟件包中的有限類型的發現能力相反,本文探索了替代方法,探索了在Runruntime。 go import( “ FMT” “去/進口商” ) func main(){ pkg,err:= incorter.default()。導入(“ time”) 如果er...
    程式設計 發佈於2025-06-07
  • 在JavaScript中如何並發運行異步操作並正確處理錯誤?
    在JavaScript中如何並發運行異步操作並正確處理錯誤?
    同意操作execution 在執行asynchronous操作時,相關的代碼段落會遇到一個問題,當執行asynchronous操作:此實現在啟動下一個操作之前依次等待每個操作的完成。要啟用並發執行,需要進行修改的方法。 第一個解決方案試圖通過獲得每個操作的承諾來解決此問題,然後單獨等待它們: c...
    程式設計 發佈於2025-06-07
  • 為什麼不使用CSS`content'屬性顯示圖像?
    為什麼不使用CSS`content'屬性顯示圖像?
    在Firefox extemers屬性為某些圖像很大,&& && && &&華倍華倍[華氏華倍華氏度]很少見,卻是某些瀏覽屬性很少,尤其是特定於Firefox的某些瀏覽器未能在使用內容屬性引用時未能顯示圖像的情況。這可以在提供的CSS類中看到:。 googlepic { 內容:url(&...
    程式設計 發佈於2025-06-07
  • 為什麼PHP的DateTime :: Modify('+1個月')會產生意外的結果?
    為什麼PHP的DateTime :: Modify('+1個月')會產生意外的結果?
    使用php dateTime修改月份:發現預期的行為在使用PHP的DateTime類時,添加或減去幾個月可能並不總是會產生預期的結果。正如文檔所警告的那樣,“當心”這些操作的“不像看起來那樣直觀。 考慮文檔中給出的示例:這是內部發生的事情: 現在在3月3日添加另一個月,因為2月在2001年只有2...
    程式設計 發佈於2025-06-07
  • MySQL中如何高效地根據兩個條件INSERT或UPDATE行?
    MySQL中如何高效地根據兩個條件INSERT或UPDATE行?
    在兩個條件下插入或更新或更新 solution:的答案在於mysql的插入中...在重複鍵更新語法上。如果不存在匹配行或更新現有行,則此功能強大的功能可以通過插入新行來進行有效的數據操作。如果違反了唯一的密鑰約束。 實現所需的行為,該表必須具有唯一的鍵定義(在這種情況下為'名稱'...
    程式設計 發佈於2025-06-07
  • 在UTF8 MySQL表中正確將Latin1字符轉換為UTF8的方法
    在UTF8 MySQL表中正確將Latin1字符轉換為UTF8的方法
    在UTF8表中將latin1字符轉換為utf8 ,您遇到了一個問題,其中含義的字符(例如,“jáuòiñe”)在utf8 table tabled tablesset中被extect(例如,“致電。為了解決此問題,您正在嘗試使用“ mb_convert_encoding”和“ iconv”轉換受...
    程式設計 發佈於2025-06-07
  • 如何使用node-mysql在單個查詢中執行多個SQL語句?
    如何使用node-mysql在單個查詢中執行多個SQL語句?
    Multi-Statement Query Support in Node-MySQLIn Node.js, the question arises when executing multiple SQL statements in a single query using the node-mys...
    程式設計 發佈於2025-06-07
  • 在Ubuntu/linux上安裝mysql-python時,如何修復\“ mysql_config \”錯誤?
    在Ubuntu/linux上安裝mysql-python時,如何修復\“ mysql_config \”錯誤?
    mysql-python安裝錯誤:“ mysql_config找不到”“ 由於缺少MySQL開發庫而出現此錯誤。解決此問題,建議在Ubuntu上使用該分發的存儲庫。使用以下命令安裝Python-MysqldB: sudo apt-get安裝python-mysqldb sudo pip in...
    程式設計 發佈於2025-06-07
  • 如何在Java的全屏獨家模式下處理用戶輸入?
    如何在Java的全屏獨家模式下處理用戶輸入?
    在Java 中,以全屏幕獨立模式運行Java應用程序時,通常無法按期望的工作可能無法使用JAVA應用程序時,將用戶輸入在Java ProblemPassive rendering mode allows the use of KeyListener and ActionListener inter...
    程式設計 發佈於2025-06-07
  • Python環境變量的訪問與管理方法
    Python環境變量的訪問與管理方法
    Accessing Environment Variables in PythonTo access environment variables in Python, utilize the os.environ object, which represents a mapping of envir...
    程式設計 發佈於2025-06-07
  • 在細胞編輯後,如何維護自定義的JTable細胞渲染?
    在細胞編輯後,如何維護自定義的JTable細胞渲染?
    在JTable中維護jtable單元格渲染後,在JTable中,在JTable中實現自定義單元格渲染和編輯功能可以增強用戶體驗。但是,至關重要的是要確保即使在編輯操作後也保留所需的格式。 在設置用於格式化“價格”列的“價格”列,用戶遇到的數字格式丟失的“價格”列的“價格”之後,問題在設置自定義單元...
    程式設計 發佈於2025-06-07

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

Copyright© 2022 湘ICP备2022001581号-3