根據論文標題自動重新命名 PDF 檔案。提供 三種擷取標題的引擎,可依「能不能連外網 / 要不要花錢 / 內網安全性」選用。
| 檔案 | 標題引擎 | 要外網? | 要花錢? | 適合情境 |
|---|---|---|---|---|
pdf_rename.py |
DOI → CrossRef API | ✅ 要 | 免費 | 能連外網,想要權威來源的標題 |
Pdf_rename_LLM_1v.py |
雲端 Claude API | ✅ 要 | 需 API 額度 | 能連外網,要最高準確度 |
pdf_rename_ollama.py |
本機 Ollama(開源 LLM) | ❌ 免 | 免費 | 內網 / 離線 / 資料不外流 |
三支共用同一套「關鍵區塊擷取」邏輯,只差判斷標題的引擎不同。
直接用對應的啟動器,它會先預覽、問你確認 Y 才會真的改名:
pdf_rename_DOI.bat— DOI 版(需網路)pdf_rename_Ollama.bat— 本機 Ollama 版(免費離線;需先開 Ollama)
兩種用法:
- 雙擊 → 輸入資料夾(或直接按 Enter = bat 所在資料夾)→ 看預覽 → 輸入
Y才改名。 - 把 PDF 拖到
.bat圖示上 → 直接預覽那幾個檔 → 輸入Y確認。
前提:電腦要有 Python(到 https://www.python.org/downloads/ 安裝,勾選「Add Python to PATH」)。Ollama 版另需安裝 Ollama 並下載模型。
💡 為什麼不是
.exe? 未簽章的 exe 會被 Windows Smart App Control / 公司 IT 政策擋下(訊息:「應用程式控制原則已封鎖」)。.bat是去呼叫已信任的 Python,不會被擋,所以改用.bat。
Pdf_rename_LLM_1v.py 與 pdf_rename_ollama.py 不是把整頁文字丟給模型,而是先在第一頁找出「最可能是標題的精簡區塊」,再交給 LLM 判斷。這樣 token 少、又準。
抓三個訊號:
- 最大字級候選 — 用 pypdf 的
visitor_text取出每個文字片段的「字級大小」與「y 座標」,挑出整頁字級最大的那幾行。論文標題幾乎都是頭一頁最大的字。 - PDF metadata 標題 — PDF 內嵌的 title 欄位(有時不完整,例如希臘字母會掉)。
- 第一頁開頭文字 — 前約 1800 字。
⚠️ 為什麼不能只靠「最大字級」? 因為期刊浮水印 / 側邊欄(例如 Wiley 的「Downloaded from…」)有時字比標題還大。所以把三個訊號一起交給 LLM,讓它判斷哪個才是真正標題、並忽略浮水印。
除錯時可用 --show-region 印出抓到的關鍵區塊,確認候選對不對(只印不呼叫模型、不改檔名):
python pdf_rename_ollama.py --show-region paper.pdfpip install -r requirements.txt依引擎需要的套件:
- 三支都要:
pypdf pdf_rename.py:requestsPdf_rename_LLM_1v.py:anthropicpdf_rename_ollama.py:requests+ 安裝 Ollama
共通選項(三支都有):
--dry-run— 預覽模式,只顯示結果不實際改檔名(建議第一次都先加)--show-region— 只印關鍵區塊,不改檔名(僅 LLM / Ollama 兩支)
💡 三支腳本會自己展開
python pdf_rename.py --dry-run *.pdf),不用再特別處理萬用字元。
python pdf_rename.py paper.pdf
python pdf_rename.py --dry-run *.pdf從第一頁找 DOI(如 10.1002/adma.200701819),透過 CrossRef API 取得官方標題,失敗才退回 metadata / 文字擷取。
# 需先設定金鑰(環境變數)
$env:ANTHROPIC_API_KEY="sk-ant-..." # PowerShell
python Pdf_rename_LLM_1v.py --dry-run *.pdf環境變數:
| 變數 | 說明 |
|---|---|
ANTHROPIC_API_KEY |
API key,或公司內部 gateway 的 token |
ANTHROPIC_BASE_URL |
走公司內部 LLM gateway 時,設成它的網址 |
PDF_RENAME_MODEL |
模型,預設 claude-opus-4-8(想省可設 claude-haiku-4-5) |
前置(只需一次):
# 1) 安裝 Ollama:https://ollama.com/download
# 2) 下載模型
ollama pull llama3.2 # 約 2GB,英文論文夠用
# ollama pull llama3.1 # 8B,更準
# ollama pull qwen2.5 # 多語,中文標題較強使用:
$env:OLLAMA_MODEL="llama3.2"
python pdf_rename_ollama.py --dry-run (Get-ChildItem *.pdf | % FullName)環境變數:
| 變數 | 說明 |
|---|---|
OLLAMA_HOST |
Ollama 服務網址,預設 http://localhost:11434 |
OLLAMA_MODEL |
要用的模型,預設 llama3.1 |
買了 Claude Code / Claude Pro 訂閱,不等於有 Anthropic API 額度 —— 這是兩套分開計費的系統:
| Pro 訂閱 | Anthropic API(Pdf_rename_LLM_1v.py 用的) |
|
|---|---|---|
| 用在哪 | Claude.ai 網頁、Claude Code CLI | 程式用 SDK 呼叫(sk-ant- key) |
| 計費 | 固定訂閱費 | 用多少付多少,需先在 Console 儲值 |
| 互通 | ❌ 訂閱不含 API 額度 | ❌ API 不吃訂閱 |
用 Pdf_rename_LLM_1v.py 會跑出 credit balance is too low 就是這個原因 —— 要到 console.anthropic.com → Plans & Billing 儲值(最低 $5,一篇成本約零點幾美分)。
不想花錢就用 pdf_rename_ollama.py(本機 Ollama,免費)。
若 Windows 使用者名稱含中文(本機路徑像 C:\Users\江由之\),Ollama 預設把模型放在 C:\Users\江由之\.ollama\models,底層 llama.cpp 無法用中文路徑載入模型(下載成功,但載入時回 HTTP 500:failed to load model from ...)。
解法:把模型放到純英文路徑。
# 1) 設定模型存放路徑為純英文(Public 是英文又可寫,免系統管理員)
setx OLLAMA_MODELS "C:\Users\Public\OllamaModels"
# 2) 重開 Ollama(從開始選單),讓它讀新路徑
# 3) 重新下載模型(或把舊的 .ollama\models 內容複製到新路徑)
ollama pull llama3.2本機已套用此設定(OLLAMA_MODELS=C:\Users\Public\OllamaModels)。
⚠️ 設定OLLAMA_MODELS後,要完整重啟 Ollama 一次才會生效:右下角系統匣的 Ollama 圖示按右鍵 →「Quit」,再從開始選單重新開啟(或重開機)。之後每次開機都會自動用對的英文路徑。
公司內網通常擋外網,所以 pdf_rename.py(CrossRef)與 Pdf_rename_LLM_1v.py(直連 api.anthropic.com)都會連不到。內網請用:
pdf_rename_ollama.py(本機 Ollama,完全離線,資料不出公司)— 最推薦;或Pdf_rename_LLM_1v.py+ 設ANTHROPIC_BASE_URL指向公司內部 LLM gateway(費用走公司,個人不用付)。
- 檔名清理 — 移除 Windows/Linux 不允許的字元、合併空白、限長 120 字(保留完整單字)。
- 衝突處理 — 新檔名若已存在,自動加序號(
title (1).pdf),不覆蓋不同檔案。 - 離線備援 — LLM / Ollama 連不到時,自動退回 metadata + 最大字級候選(略不準但不會中斷)。
Q:三種版本準確度差在哪? A:DOI > 雲端 LLM ≈ 本機 LLM > 純啟發式(離線備援)。DOI 來自權威資料庫最可靠,但需外網且 PDF 要有 DOI;LLM 對排版怪、有浮水印的 PDF 較穩。
Q:可以撤銷重新命名嗎?
A:不行。請先用 --dry-run 預覽,確認無誤再執行。
Q:本機 Ollama 想更準?
A:換大一點的模型 ollama pull llama3.1(8B)並設 OLLAMA_MODEL=llama3.1;中文標題論文可用 qwen2.5。
MIT