Skip to content

Navigation Menu

Sign in
Sign up

Repository files navigation

doc-cleaner

GitHub release License: MIT Python 3.9+ Supported Formats Last Commit

日常文件轉 Markdown —— 涵蓋 PDF、Office、Apple Keynote/Numbers、EPUB 電子書等 16 種格式。中文友好、表格保留、隱私優先、全程本地。

屬於 notoriouslab 開源工具組的一員 · 需要 Python 3.9+

English README

下載桌面 App(無需 Python)

平台 下載 架構
macOS Doc Cleaner-1.6.0.dmg Universal(Intel + Apple Silicon)
Windows Doc Cleaner-1.6.0.msi x86_64(含 ARM Windows)

首次開啟 macOS 版:右鍵 → 開啟(Ventura 以前)或系統設定 → 隱私權與安全性 → 仍要開啟(Sonoma/Sequoia)

或在 Terminal 執行一次:xattr -cr /Applications/Doc\ Cleaner.app


核心定位

doc-cleaner 專注日常文件抽取——把你每天遇到的文件轉成乾淨、可讀的 Markdown:PDF、Word、Excel、PowerPoint、Apple Keynote/NumbersEPUB 電子書,中文無損、表格完整、全程本地不上雲。

能同時做到中文友好 + 表格保留,又涵蓋 Apple Keynote/Numbers 與 EPUB 的免費工具並不多——這個組合正是 doc-cleaner 的強項。

典型使用:

  • 🖥️ 桌面 App — 拖放文件或整個資料夾、自選輸出位置、轉後可即時預覽;零設定,macOS/Windows 雙擊即用(非技術用戶首選)
  • 📊 金融對帳單 — Big5/CP950 自動偵測,交易清單與數字完整無損
  • 🎬 簡報/電子書 — Keynote 投影片、EPUB 章節,依閱讀順序抽成 Markdown
  • 📄 多格式批處理 — 16 種格式混合輸入,統一輸出 Markdown(CLI)
  • 🔒 隱私優先--ai none 純文字或 Ollama 本地推理,文件不上雲端
  • 🤖 AI Agent 整合 — OpenClaw 等框架可直接 shell 呼叫,附帶 SKILL.md 支援

三大特色

特色 做法
日常格式最完整 PDF、Office、Apple Keynote/Numbers、EPUB、DXF... 16 種格式,一個工具搞定
中文 + 表格無損 Big5/CP950/UTF-16 自動偵測;DOCX/XLSX/PDF 表格 → Markdown pipe table,數字完整
隱私 & 無 AI 模式 --ai none 純文字提取(零 API key、零雲端);或用 Ollama 本地推理

快速開始

選項 A:桌面 App(非技術用戶)

下載 DMG(macOS)或 MSI(Windows),安裝後拖放文件即用,不需要 Python。 詳見上方「下載桌面 App」表格。

選項 B:CLI(技術用戶,三步)

# 1. Clone
git clone https://github.com/notoriouslab/doc-cleaner.git && cd doc-cleaner
# 2. 安裝
pip install -r requirements.txt
# 3. 執行
python cleaner.py --input ./documents/ --ai none

輸出: ./output/ 下每個檔案對應的 .md 檔案

常見使用場景

場景 1:純文字提取(無 API key)

# 最簡單的方式,零成本
python cleaner.py --input statement.pdf --ai none

場景 2:用 Gemini 提高品質(雲端推薦)

cp .env.example .env
# 編輯 .env,填入 GEMINI_API_KEY
python cleaner.py --input statement.pdf --ai gemini

場景 3:本地 Ollama(隱私優先)

# 需先安裝並啟動 Ollama(見下方 Ollama 選型)
python cleaner.py --input statement.pdf --ai ollama

場景 4:預覽不寫入

python cleaner.py --input ./documents/ --dry-run --verbose

進階安裝(選裝)

高品質 PDF 表格提取、PDF 解密、PPTX/DXF 支援等:

# 高品質 PDF 提取(推薦)
pip install opendataloader-pdf # 需要 Java 11+
# PDF 視覺模式(掃描 PDF)
pip install pdf2image # 另需 poppler:brew install poppler
# PDF 解密
pip install pikepdf
# 額外格式(PPTX / DXF)
pip install python-pptx ezdxf

設定 API key(若使用雲端):

cp config.example.json config.json
cp .env.example .env
# 編輯 .env 填入 GEMINI_API_KEY 或 GROQ_API_KEY

核心概念

PDF 智慧分流

不是所有 PDF 都一樣。doc-cleaner 自動分類後決定處理策略:

類型 特徵 處理方式
原生文字 字元密度 ≥8,亂碼 <5%,短行 ≤70% 直接提取(快速、免費)
格式破碎 短行 >70%(表格被壓扁) opendataloader-pdf 表格提取 / AI 視覺 + 文字
掃描圖片 字元密度 <8 PDF 轉圖 + AI 視覺處理

推薦做法(最省錢):

# 步驟 1:全部用 --ai none 提取(快速、免費、隱私)
python cleaner.py --input ./documents/ --ai none --output-dir ./output/raw
# 步驟 2:檢查 log,只對「掃描圖片」的檔案跑 AI
python cleaner.py --input scanned.pdf --ai gemini

廣告清洗

台灣金融業對帳單常見投資風險告知、法律聲明等固定內容。兩種清洗機制:

機制 行為 場景
尾部截斷 第一次匹配後全部截掉 文件尾部的法律聲明
中間移除 單獨移除該段落 夾在中間的行銷廣告

config.json 設定:

{
 "ad_truncation_patterns": ["謹慎理財.{0,20}信用至上"],
 "ad_strip_patterns": ["(注記)運動賺回饋"]
}

安全機制:若截斷會移除 >70% 內容,程式自動跳過並警告。所有正則在啟動時驗證。

表格保留

表格在 doc-cleaner 是一等公民:

  • DOCX:python-docx 直接提取 → Markdown pipe table
  • XLSX/CSV:pandas.to_markdown() — 所有工作表
  • PDF:opendataloader-pdf 直接輸出完整 pipe table(無需 AI)
  • AI 提示詞:明確指示保留現有表格原樣

隱私和安全

選項 效果
--ai none 零 API key、零雲端,本機純提取
--ai ollama 本地 Ollama 推理,文件不上網
--ai gemini / --ai groq 雲端推理,更高品質

其他安全機制:

  • 原子寫入 — 臨時檔 + os.replace(),無半殘輸出
  • 機密隔離 — API key 只在 .env,啟動時自動檢查
  • OOM 防護 — PDF 視覺模式預設最多 15 頁(可調整)
  • JSON 降級 — AI 回傳失效時自動降級為 raw text

桌面 App 建置與打包 (開發者)

本專案使用 BeeWare Briefcase 進行跨平台桌面應用程式的建置與打包。

建置前置準備

  1. 確保已安裝 Python 3.9+。
  2. 建立並啟用 Python 虛擬環境:
    python -m venv venv
    # 啟用虛擬環境 (Windows PowerShell)
    .\venv\Scripts\Activate.ps1
    # 啟用虛擬環境 (macOS/Linux)
    source venv/bin/activate
  3. 升級 pip 並安裝 Briefcase 與專案依賴套件:
    pip install --upgrade pip
    pip install briefcase
    pip install -r requirements.txt

跨平台建置指令

在啟用虛擬環境的狀態下,於專案根目錄執行以下 Briefcase 指令:

步驟 指令 說明
1. 建立結構 briefcase create 下載適用於當前平台的 Python 嵌入式運行環境,並建立專案結構
2. 編譯應用程式 briefcase build 編譯應用程式 (在 Windows 會建置出 Doc Cleaner.exe)
3. 執行測試 briefcase run 在開發測試模式下直接運行建置好的 App 視窗
4. 打包安裝檔 briefcase package 封裝成平台的安裝檔。在 Windows 會自動安裝 WiX 並產生 .msi 安裝包

建置完成後的安裝套件將會生成於 dist/ 目錄中。


進階參考

命令列選項

python cleaner.py [選項]
 --input, -i 要處理的檔案或目錄(必填,不遞迴)
 --output-dir, -o 輸出目錄(預設:./output)
 --config 設定檔路徑(預設:<程式目錄>/config.json)
 --ai gemini | groq | ollama | none(預設:config 或 gemini)
 --password PDF 解密密碼(優先於 .env 和 config)
 --summary 輸出 JSON 摘要到 stdout(供腳本/Agent 解析)
 --format, -f 輸出格式:md (預設) | epub | both (同時產出 Markdown 與 EPUB)
 --epub-zh-hant 將簡體中文轉換為繁體中文
 --translate-zh-hant 將英文內容翻譯成繁體中文 (台灣習慣用語)
 --dry-run 預覽不寫入
 --verbose 除錯日誌
 --version 版本資訊

Exit code: 0 = 全部成功 · 1 = 部分失敗 · 2 = 設定錯誤

設定檔 (config.json)

{
 "ai": {
 "backend": "gemini", // 預設後端
 "prompt_template": "prompts/default.txt", // 提示詞路徑
 "gemini": { "model": "gemini-2.5-pro" },
 "groq": {
 "model": "meta-llama/llama-4-scout-17b-16e-instruct",
 "timeout": 120
 },
 "ollama": {
 "model": "qwen3.5:9b",
 "host": "http://localhost:11434"
 }
 },
 "pdf": {
 "dpi": 200,
 "max_pages": 15
 },
 "output": { "frontmatter": true },
 "ad_truncation_patterns": ["謹慎理財.{0,20}信用至上"],
 "ad_strip_patterns": ["(注記)運動賺回饋"]
}

機密管理: API key 只在 .env,不可config.json。啟動時自動驗證。

# .env 範例
GEMINI_API_KEY=...
GROQ_API_KEY=...
PDF_PASSWORD=...

自訂 AI 提示詞

doc-cleaner 內建 2 個提示詞範本:

檔案 用途
prompts/default.txt 通用文件清洗
prompts/finance.txt 銀行對帳單、財務報表

自訂:prompts/ 新增 .txt 檔,AI 輸出必須是 JSON:

{
 "title": "簡短標題",
 "summary": "1-2 句摘要",
 "refined_markdown": "完整清洗後 Markdown",
 "tags": ["標籤1", "標籤2"]
}

Ollama 選型

表格重建是高難度,小模型力不從心。資源夠可試試 qwen3.5 系列(原生視覺):

模型 大小 視覺 表格重建 中文 建議
qwen3.5:27b 17 GB 效果最佳
qwen3.5:9b 6.6 GB 預設,平衡最佳
qwen3.5:4b 3.4 GB 輕量但表格勉強
qwen3:30b 19 GB MoE 快速,無視覺

建議: qwen3.5:9b 可跑掃描 PDF;qwen3:30b 只用原生文字 PDF。8GB RAM 用戶建議用 --ai gemini--ai none

支援格式完整表

格式 Parser 表格 備註
PDF(原生) PyMuPDF find_tables() / opendataloader-pdf pipe table find_tables 無需額外安裝;ODL 需 Java
PDF(掃描) pdf2image → AI 視覺 AI 重建 需 poppler(選裝)
PDF(加密) pikepdf pipe table 選裝
DOCX python-docx pipe table 跨平台
XLSX / XLS pandas + xlrd pipe table 全工作表
CSV pandas pipe table 自動偵測編碼
PPTX python-pptx pipe table 投影片+備忘錄
PPT macOS textutil / LibreOffice macOS 內建;Windows 需 LibreOffice
DOC macOS textutil / LibreOffice macOS 內建;Windows 需 LibreOffice
DXF ezdxf 工程圖文字、尺寸
TXT / MD stdlib Big5/CP950/UTF-16
JSONL 內建 Claude Code session transcript → Markdown
NUMBERS numbers-parser pipe table Apple 試算表,每表格分節
KEY keynote-parser Apple Keynote,每投影片分節(IWA 解析)
PAGES QuickLook PDF Apple Pages;新版需在 Pages 匯出 PDF 後再轉
EPUB 內建(lxml) 電子書,依章節分節,含書名/作者

整合與生態

AI Agent 框架

doc-cleaner 是標準 CLI,任何 AI agent 框架可透過 shell 呼叫。附帶 SKILL.mdOpenClaw 使用。

# Agent 範例:處理 + JSON 摘要
python cleaner.py --input document.pdf --ai none --summary

--summary 輸出:

{"version":"1.0.0","total":1,"success":1,"failed":0,"files":[{"file":"document.pdf","output":"./output/document.md","status":"ok"}]}

notoriouslab 組合拳

gmail-statement-fetcher → Gmail 自動下載 PDF 對帳單
 ↓
 doc-cleaner → PDF/DOCX/XLSX → 結構化 Markdown
 ↓
 personal-cfo → 月度審計 + 退休滑翔路徑(開發中)

各工具獨立可用,合併使用構成完整個人財務自動化流水線。


安全政策詳見 SECURITY.md


貢獻

最簡單的貢獻方式:

  1. 新增廣告正則 — 加入你銀行的截斷/移除規則到 config.example.json
  2. 新增提示詞範本 — 在 prompts/ 建立新的 .txt
  3. 回報編碼問題 — 附上匿名化樣本和 log

詳見 CONTRIBUTING.md


Star History

Star History Chart


授權

本專案程式碼採 MIT 授權。

引用的開源套件

doc-cleaner 建立在這些套件之上,誠實列出與其授權:

套件 用途 授權
PyMuPDF PDF 解析、表格偵測 AGPL-3.0/商業雙授權
python-docx DOCX MIT
pandas · openpyxl · xlrd XLSX/XLS/CSV BSD/MIT
python-pptx PPTX MIT
ezdxf DXF MIT
numbers-parser Apple Numbers MIT
keynote-parser Apple Keynote MIT
lxml EPUB/XML 解析 BSD
Pillow 影像處理 HPND
pywebview 桌面 GUI BSD
tabulate Markdown 表格輸出 MIT

PyMuPDF 採 AGPL-3.0/商業雙授權;本專案原始碼公開於 GitHub,分發時符合 AGPL 的原始碼公開要求。

About

doc-cleaner:一個為繁體中文金融文件設計的開源文件清洗工具,支援完全離線運行,你的文件,不該為了整理而離開你的電腦 :)

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

AltStyle によって変換されたページ (->オリジナル) /