Skip to content

Repository files navigation

PDF Rename 📄

根據論文標題自動重新命名 PDF 檔案。提供 三種擷取標題的引擎,可依「能不能連外網 / 要不要花錢 / 內網安全性」選用。


三種版本一覽

檔案 標題引擎 要外網? 要花錢? 適合情境
pdf_rename.py DOI → CrossRef API ✅ 要 免費 能連外網,想要權威來源的標題
Pdf_rename_LLM_1v.py 雲端 Claude API ✅ 要 需 API 額度 能連外網,要最高準確度
pdf_rename_ollama.py 本機 Ollama(開源 LLM) ❌ 免 免費 內網 / 離線 / 資料不外流

三支共用同一套「關鍵區塊擷取」邏輯,只差判斷標題的引擎不同。


🚀 最簡單用法:雙擊 .bat(給不想碰命令列的人 / 同事)

直接用對應的啟動器,它會先預覽、問你確認 Y 才會真的改名:

  • pdf_rename_DOI.bat — DOI 版(需網路)
  • pdf_rename_Ollama.bat — 本機 Ollama 版(免費離線;需先開 Ollama)

兩種用法:

  1. 雙擊 → 輸入資料夾(或直接按 Enter = bat 所在資料夾)→ 看預覽 → 輸入 Y 才改名。
  2. 把 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.pypdf_rename_ollama.py 不是把整頁文字丟給模型,而是先在第一頁找出「最可能是標題的精簡區塊」,再交給 LLM 判斷。這樣 token 少、又準。

抓三個訊號:

  1. 最大字級候選 — 用 pypdf 的 visitor_text 取出每個文字片段的「字級大小」與「y 座標」,挑出整頁字級最大的那幾行。論文標題幾乎都是頭一頁最大的字。
  2. PDF metadata 標題 — PDF 內嵌的 title 欄位(有時不完整,例如希臘字母會掉)。
  3. 第一頁開頭文字 — 前約 1800 字。

⚠️ 為什麼不能只靠「最大字級」? 因為期刊浮水印 / 側邊欄(例如 Wiley 的「Downloaded from…」)有時字比標題還大。所以把三個訊號一起交給 LLM,讓它判斷哪個才是真正標題、並忽略浮水印。

除錯時可用 --show-region 印出抓到的關鍵區塊,確認候選對不對(只印不呼叫模型、不改檔名):

python pdf_rename_ollama.py --show-region paper.pdf

安裝

pip install -r requirements.txt

依引擎需要的套件:

  • 三支都要:pypdf
  • pdf_rename.py:requests
  • Pdf_rename_LLM_1v.py:anthropic
  • pdf_rename_ollama.py:requests + 安裝 Ollama

各版本使用方式

共通選項(三支都有):

  • --dry-run — 預覽模式,只顯示結果不實際改檔名(建議第一次都先加)
  • --show-region — 只印關鍵區塊,不改檔名(僅 LLM / Ollama 兩支)

💡 三支腳本會自己展開 *.pdf,所以 Windows 的 cmd / PowerShell 直接用 *.pdf 即可 (例:python pdf_rename.py --dry-run *.pdf),不用再特別處理萬用字元。

1. pdf_rename.py(DOI 查詢,免費需外網)

python pdf_rename.py paper.pdf
python pdf_rename.py --dry-run *.pdf

從第一頁找 DOI(如 10.1002/adma.200701819),透過 CrossRef API 取得官方標題,失敗才退回 metadata / 文字擷取。

2. Pdf_rename_LLM_1v.py(雲端 Claude,需 API 額度)

# 需先設定金鑰(環境變數)
$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)

3. pdf_rename_ollama.py(本機 Ollama,免費離線)👍 推薦內網用

前置(只需一次):

# 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

⚠️ 重要的坑(同事接手必看)

坑 1:Claude Code Pro 訂閱 ≠ API 額度

買了 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,免費)。

坑 2:中文使用者名稱 → 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」,再從開始選單重新開啟(或重開機)。之後每次開機都會自動用對的英文路徑。

坑 3:內網環境建議

公司內網通常擋外網,所以 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

About

依論文標題自動重新命名 PDF。三種引擎:DOI/CrossRef、雲端 Claude API、本機 Ollama(免費離線、適合內網)。附雙擊即用的 .bat。 / Auto-rename academic PDFs by paper title via DOI, Claude API, or local Ollama.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages