Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

PyMuPDF4LLM 安裝與使用指南

簡介

PyMuPDF4LLM 是一個基於 PyMuPDF 的工具,專門用於將 PDF 文件轉換為適合 LLM (Large Language Models) 使用的 Markdown 格式。

安裝步驟

1. 系統需求

  • Python 3.8 或更高版本
  • pip 套件管理工具

2. 安裝 PyMuPDF4LLM

pip3 install pymupdf4llm

或使用 Makefile:

make install

3. 驗證安裝

python3 -c "import pymupdf4llm; print(pymupdf4llm.__version__)"

使用方法

基本用法

方法一:Python 腳本

import pymupdf4llm

# 轉換 PDF 為 Markdown
pdf_path = 'input.pdf'
md_text = pymupdf4llm.to_markdown(pdf_path)

# 儲存為檔案
with open('output.md', 'w', encoding='utf-8') as f:
    f.write(md_text)

方法二:命令列

python3 -c "
import pymupdf4llm

pdf_path = 'input.pdf'
output_path = 'output.md'

md_text = pymupdf4llm.to_markdown(pdf_path)

with open(output_path, 'w', encoding='utf-8') as f:
    f.write(md_text)

print(f'轉換完成: {output_path}')
"

方法三:使用 Makefile

# 轉換單一檔案(預設:上市股票行情規格書.pdf)
make convert

# 轉換指定檔案
make convert PDF=your_file.pdf

進階選項

import pymupdf4llm

# 指定頁面範圍
md_text = pymupdf4llm.to_markdown(
    'input.pdf',
    pages=[0, 1, 2]  # 只轉換前三頁
)

# 自定義輸出選項
md_text = pymupdf4llm.to_markdown(
    'input.pdf',
    write_images=True,  # 提取圖片
    image_path='images'  # 圖片儲存路徑
)

功能特點

  1. 保留文件結構

    • 自動識別標題層級
    • 保留列表格式
    • 正確轉換表格
  2. 中文支援

    • 完整支援繁體中文
    • 正確處理中文字符編碼
  3. 格式化輸出

    • 生成標準 Markdown 格式
    • 適合 LLM 訓練和處理
  4. 高效能

    • 快速轉換大型 PDF
    • 低記憶體佔用

常見問題

Q1: 轉換後表格格式錯亂?

A: PyMuPDF4LLM 會盡力保留表格格式,但複雜表格可能需要手動調整。建議使用 Markdown 表格語法檢查工具。

Q2: 圖片無法顯示?

A: 使用 write_images=True 參數並指定 image_path

md_text = pymupdf4llm.to_markdown(
    'input.pdf',
    write_images=True,
    image_path='./images'
)

Q3: 特殊字符亂碼?

A: 確保使用 UTF-8 編碼儲存:

with open('output.md', 'w', encoding='utf-8') as f:
    f.write(md_text)

Q4: 記憶體不足?

A: 分頁處理大型 PDF:

import pymupdf

doc = pymupdf.open('large.pdf')
total_pages = len(doc)

for i in range(0, total_pages, 10):  # 每次處理 10 頁
    pages = list(range(i, min(i+10, total_pages)))
    md_text = pymupdf4llm.to_markdown('large.pdf', pages=pages)
    # 處理或儲存 md_text

實際範例

範例 1: 批次轉換多個 PDF

import pymupdf4llm
import os
from pathlib import Path

def batch_convert(input_dir, output_dir):
    input_path = Path(input_dir)
    output_path = Path(output_dir)
    output_path.mkdir(exist_ok=True)

    for pdf_file in input_path.glob('*.pdf'):
        print(f'正在轉換: {pdf_file.name}')

        md_text = pymupdf4llm.to_markdown(str(pdf_file))

        output_file = output_path / f'{pdf_file.stem}.md'
        with open(output_file, 'w', encoding='utf-8') as f:
            f.write(md_text)

        print(f'完成: {output_file}')

# 使用範例
batch_convert('./pdfs', './markdown')

範例 2: 加入進度顯示

import pymupdf4llm
import pymupdf
from tqdm import tqdm

def convert_with_progress(pdf_path, output_path):
    doc = pymupdf.open(pdf_path)
    total_pages = len(doc)

    print(f'總頁數: {total_pages}')

    md_text = pymupdf4llm.to_markdown(pdf_path)

    with open(output_path, 'w', encoding='utf-8') as f:
        f.write(md_text)

    print(f'轉換完成: {output_path}')
    print(f'檔案大小: {len(md_text)} 字元')

# 使用範例
convert_with_progress('input.pdf', 'output.md')

範例 3: 提取特定頁面

import pymupdf4llm

def extract_pages(pdf_path, start_page, end_page, output_path):
    """
    提取 PDF 指定頁面範圍並轉換為 Markdown

    Args:
        pdf_path: PDF 檔案路徑
        start_page: 起始頁(從 0 開始)
        end_page: 結束頁(不含)
        output_path: 輸出檔案路徑
    """
    pages = list(range(start_page, end_page))
    md_text = pymupdf4llm.to_markdown(pdf_path, pages=pages)

    with open(output_path, 'w', encoding='utf-8') as f:
        f.write(md_text)

    print(f'已提取第 {start_page+1} 到 {end_page} 頁')
    print(f'輸出: {output_path}')

# 使用範例:提取第 1-10 頁
extract_pages('input.pdf', 0, 10, 'output_pages_1-10.md')

與其他工具比較

工具優點缺點
PyMuPDF4LLM快速、輕量、中文支援佳表格複雜度有限
MinerU表格識別強、支援 OCR需要下載模型、較慢
pdfplumber表格處理優秀不直接輸出 Markdown
pdf2md簡單易用格式保留較差

參考資源

授權

PyMuPDF4LLM 使用 AGPL-3.0 授權。

更新日誌

  • v0.2.6 (2024): 改進表格識別
  • v0.2.0 (2024): 支援圖片提取
  • v0.1.0 (2023): 首次發布