NuExtract3:把 PDF 截圖變成乾淨資料

NuExtract3:把 PDF 截圖變成乾淨資料

📌 本文重點

  • NuExtract3 專門做「影像 / PDF → 結構化文字」
  • 直接輸出 JSON / Markdown,省掉後續清洗
  • 可自架本地部署,敏感資料不用上雲
  • 用 prompt 自訂欄位 schema,方便接到現有 workflow

把亂七八糟的 PDF、發票截圖、表格照片,丟進 NuExtract3,就能直接拿到乾淨的 JSON / Markdown 結構化資料,方便你後續丟進 Notion、Google Sheet 或資料庫繼續用。

官方開源介紹(含 Demo 連結):Reddit:NuExtract3 released


核心功能:三件事講完 NuExtract3

1. 多種文件型態,一次搞定

NuExtract3 是基於 Qwen3.5-4B 訓練的開源多模態模型(Apache-2.0 授權),主打「影像 / PDF → 結構化文字」。實際可以拿來處理:

  • 多頁 PDF:報表、合約、研究報告
  • 發票、收據、報銷單:紙本拍照、掃描檔
  • 表格:Excel 匯出成 PDF、紙本表單的掃描
  • 表單截圖:Google Form 結果頁、線上後台報表截圖

你只要準備:

  • 一個檔案(PDF / 圖片)
  • 一個「你想要的結構」描述(例如:請輸出成 JSON,欄位有 datevendortotal_amount

就能讓它幫你把畫面裡的內容拉成乾淨結構。

💡 關鍵: 只要定義好欄位結構,NuExtract3 就能把任何格式雜亂的文件,轉成統一結構的資料,後續處理成本會大幅下降。


2. 直接輸出 JSON / Markdown,少一個清洗步驟

NuExtract3 的設計重點不是「純 OCR」,而是「OCR + 結構化輸出」。實際測試時,你可以要求:

  • 輸出 JSON:適合丟進程式、API、資料庫
  • 輸出 Markdown:適合整理筆記、放進 Notion、Obsidian

例如你給他一張發票照片,提示可以這樣寫:

你是一個資料錄入助手。從這張發票中擷取欄位,並輸出 JSON:
{
  "date": "發票日期 (YYYY-MM-DD)",
  "vendor": "商家名稱",
  "invoice_number": "發票號碼",
  "items": [
    {"name": "品項名稱", "quantity": 數量, "unit_price": 單價, "amount": 金額}
  ],
  "subtotal": 小計,
  "tax": 稅額,
  "total": 總金額
}
如果沒有某個欄位,填 null。

輸出就會直接是可用的 JSON,不用再寫額外的字串處理把文字拆欄位。


3. 本地部署,自已控管資料隱私

NuExtract3 以「開源權重、自架」為主:

  • 模型權重可下載,Apache-2.0 授權,可商用
  • 可以在自己筆電、公司伺服器上跑
  • 不需要把發票、合約等敏感文件上傳到第三方雲端

你可以先在官方 Hugging Face Space 線上試,用得順手再搬回本地。

線上 Demo(免註冊):搜「NuExtract3」即可在 Hugging Face Spaces 上找到官方 Space。

💡 關鍵: 在合約、財務等敏感場景,自架 + 開源授權讓你既能自動化,又不必冒資料外流風險。


適合誰用:三個典型場景

1. 財務 / 行政:發票、報銷單半自動錄入

適用情境:

  • 同事每個月丟一堆發票照片、PDF 報銷單
  • 你要把日期、金額、商家、發票號碼一筆筆打進系統或 Excel

可以這樣用:

  1. 把所有發票照片存進一個資料夾
  2. 用腳本逐張丟給 NuExtract3,要求輸出統一格式的 JSON
  3. 把 JSON 轉成 CSV,匯入到:
  4. 公司報銷系統
  5. Google Sheet 統計報表

立即可做的行動
– 把你現有的 2–3 張發票/收據,丟進官方 Space,測試能不能抓出你要的欄位(日期/金額/店名)。


2. 自媒體 / 法務:整理掃描合約、條款重點

適用情境:

  • 合作合約只有掃描版 PDF
  • 你只關心「合約雙方」「金額」「期限」「解約條件」「付款節點」

你可以:

  1. 把 PDF 上傳 NuExtract3
  2. 用自然語言指定要的欄位,例如:
請閱讀這份合約,並用 JSON 回答:
{
  "party_a": "甲方名稱",
  "party_b": "乙方名稱",
  "contract_term": "合約期間(文字說明)",
  "payment_terms": "付款條件摘要",
  "termination_clause": "解約條款摘要"
}
  1. 把輸出貼進 Notion,或丟給 ChatGPT / 其他 LLM 再做風險檢查

立即可做的行動
– 找一份你平常會反覆查的合約掃描檔,試著用 NuExtract3 生成「合約摘要 Markdown」,看可讀性如何。


3. 數據分析師:報表、問卷結果結構化

適用情境:

  • 手上有 PDF 報表、問卷紙本掃描
  • 想要的,是一張可以直接做分析的表格

使用方式:

  1. 對著一頁表格截圖
  2. 提示要求輸出成「每列一筆紀錄」的 JSON 陣列
把這頁問卷結果表格,轉成 JSON 陣列,每列是一位受訪者:
[
  {
    "id": "編號",
    "age": 年齡,
    "gender": "性別",
    "q1": "問題1答案",
    "q2": "問題2答案"
  }
]
  1. 把 JSON 轉成 CSV 後丟進 Python / R / Excel 分析

立即可做的行動
– 拿一頁報表截圖,試著讓 NuExtract3 幫你還原成表格,再貼進 Google Sheet 看欄位是否正確。


怎麼開始:五分鐘上手路線

步驟 0:先線上玩一次(不用裝任何東西)

  1. 打開瀏覽器,前往 Hugging Face Space(搜尋 NuExtract3
  2. 上傳一張發票 / 合約 / 表格截圖
  3. 在「指令」欄位輸入你想要的輸出格式(JSON / Markdown + 欄位定義)
  4. 看輸出結果是否符合你平常的工作需求

如果這步已經感覺能用,再考慮搬回本機或公司伺服器。

💡 關鍵: 先用線上 Demo 驗證「欄位抓得準不準」,再投入時間做 Docker 與腳本整合,能避免白做工。


步驟 1:在本機 / 伺服器用 Docker 跑起服務

以下是假設官方提供 Docker 映像的典型流程(實際請以官方 README 為準):

# 1. 拉取映像
docker pull numind/nuextract3:latest

# 2. 啟動服務(假設開在 8000 port)
docker run -d \
  --gpus all \
  -p 8000:8000 \
  --name nuextract3 \
  numind/nuextract3:latest

啟動後通常會有一個簡單 API,例如:

curl -X POST http://localhost:8000/extract \
  -F "file=@invoice.jpg" \
  -F 'prompt=請擷取發票資訊並輸出 JSON,欄位:date, vendor, total_amount'

回傳的就是 JSON 結果,可以直接被腳本處理。


步驟 2:用簡單 Python Script 跑推論

如果你偏好直接在 Python 裡呼叫(例如透過 vLLM / Transformers),典型流程會像這樣(範例示意):

from PIL import Image
import requests
import json

API_URL = "http://localhost:8000/extract"

image_path = "./samples/invoice.jpg"
prompt = "請從這張發票擷取日期(date)、商家(vendor)、總金額(total_amount),並輸出 JSON。"

files = {"file": open(image_path, "rb")}
data = {"prompt": prompt}

resp = requests.post(API_URL, files=files, data=data)
result = resp.json()

print(json.dumps(result, ensure_ascii=False, indent=2))

這段可以直接嵌入到你現有的報表處理、RPA 流程裡。


步驟 3:自訂你的欄位 schema

NuExtract3 沒有「固定欄位」,而是靠你的提示(prompt)決定要萃取什麼。實作時可以:

  1. 先在 Notion / Google Sheet 寫好你要的欄位列表,例如:
  2. date
  3. vendor
  4. category
  5. subtotal
  6. tax
  7. total
  8. 在提示裡把這些欄位寫成 JSON 模板,明確說明格式
  9. 要求:
  10. 用固定欄位名稱
  11. 金額用數字,不要加貨幣符號
  12. 缺失欄位填 null

這樣輸出就更穩定,後續程式處理也比較不容易爆炸。


步驟 4:組一個簡單 workflow:NuExtract3 + Google Sheet / Notion

你可以很快做出一個「半自動錄入」流程:

發票例子:

  1. 把所有發票照片放進 invoices/ 資料夾
  2. 用 Python 跑一個簡單批次處理:
  3. 逐張呼叫 NuExtract3 API
  4. 收集 JSON 結果
  5. 把 JSON 轉成 CSV:
  6. pandas 寫入 Google Sheet(透過 Google API)
  7. 或匯出 CSV 手動上傳

概念範例:

import os, json, requests, csv

API_URL = "http://localhost:8000/extract"

rows = []
for fname in os.listdir("./invoices"):
  with open(os.path.join("./invoices", fname), "rb") as f:
    resp = requests.post(
      API_URL,
      files={"file": f},
      data={"prompt": "請輸出 JSON,欄位:date, vendor, total_amount"}
    )
  data = resp.json()
  rows.append([data["date"], data["vendor"], data["total_amount"]])

with open("invoices.csv", "w", newline="", encoding="utf-8") as fp:
  writer = csv.writer(fp)
  writer.writerow(["date", "vendor", "total_amount"])
  writer.writerows(rows)

Notion 的話,則可以用 Notion API 建立資料庫頁面,把每一筆 JSON 轉成一筆資料列。


小結:什麼時候值得用 NuExtract3?

  • 你有大量掃描檔、截圖要轉成結構化資料
  • 內容多是表格、發票、收據、合約這類「格式固定但樣式雜」的文件
  • 你在意 資料不能丟到雲端,希望自架

先在 Hugging Face Space 玩 10 分鐘,如果覺得可用,再花半天把 Docker + 簡單腳本接起來,你就多了一個專門幫你「把亂檔變乾淨資料」的本地工具。

🚀 你現在可以做的事

  • 上 Hugging Face 搜尋 NuExtract3,用 2–3 張發票或表格截圖測試輸出 JSON / Markdown
  • 在 Notion 或 Google Sheet 列出你常用的欄位 schema,順手寫一個對應的 prompt 模板
  • 在本機用 Docker 跑起 nuextract3,照文中的 curl 或 Python 範例打一次 API,驗證能否接到現有流程

留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *