mcpField
T
translate-pdf

translate-pdf

github.com/morphet81ドキュメント094 回インストール24 週間前に更新
リポジトリ

translate-pdf について

translate-pdf は、PDFから構造化されたMarkdownを抽出し、翻訳して新しいPDFを生成するスキルです。出力前に抽出したテキストや表を確認する手順も含まれます。

主な機能

  1. 01PDF内容をMarkdownに抽出
  2. 02抽出テキストと表の確認
  3. 03構造を保った翻訳
  4. 04対象言語のPDF生成
  5. 05依存関係と出力ファイルの確認

活用シーン

  1. 01テキストベースのレポートの翻訳
  2. 02表を維持したマニュアルの翻訳
  3. 03原文書から翻訳版PDFを作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/morphet81/cheat-sheets --skill translate-pdf

インストール後、Claude Code で/translate-pdfを入力して読み込まれたか確認します。

同梱ファイルtranslate_pdf.py

詳細

PDF ドキュメントを最初から最後まで翻訳します。元の PDF から構造化された Markdown を抽出し、内容を翻訳して、翻訳先の言語で新しい PDF を作成します。

使用方法:

  • /translate-pdf ./report.pdf French English — フランス語の PDF を英語に翻訳します
  • /translate-pdf /path/to/manual.pdf English Spanish — 英語の PDF をスペイン語に翻訳します
  • /translate-pdf invoice.pdf German French — ドイツ語の PDF をフランス語に翻訳します

手順:

  1. 位置引数を解析します:

    • $1 = 元の PDF ファイルのパス
    • $2 = PDF の現在の言語
    • $3 = 翻訳先の言語
    • $1、$2、$3 のいずれかが指定されていない場合は、以下を表示して停止します:
      ## 引数が不足しています
      
      使用方法:/translate-pdf <path-to-pdf> <source-language> <target-language>
      
      例:
        /translate-pdf ./report.pdf French English
        /translate-pdf /path/to/manual.pdf English Spanish
        /translate-pdf invoice.pdf German French
      
  2. PDF ファイルが存在することを確認します:

    • パスを解決し、ファイルが存在して .pdf 拡張子が付いていることを確認します
    • ファイルが存在しない場合は、エラーを表示して停止します:
      ファイルが見つかりません:「<path>」
      PDF ファイルの有効なパスを指定してください。
      
  3. Python の依存関係を確認します:

    このスキルは、skills/translate-pdf/translate_pdf.py(このリポジトリからの相対パス)にある Python スクリプトに依存しています。このスクリプトには以下が必要です:

    • pymupdf — PDF テキストの抽出
    • markdown — Markdown から HTML への変換
    • weasyprint — HTML から PDF へのレンダリング(システムライブラリの cairo、pango、gdk-pixbuf も必要)

    a) 依存関係がインストールされているか確認します: Bash ツールを使って python3 -c "import fitz; import markdown; from weasyprint import HTML; print('OK')" を実行します。

    b) 確認に失敗した場合は、AskUserQuestion を使用して開発者に質問します:

    以下の Python パッケージが必要ですが、すべてはインストールされていません:

    • pymupdf(PDF の抽出)
    • markdown(Markdown → HTML)
    • weasyprint(HTML → PDF。システムライブラリの cairo、pango、gdk-pixbuf も必要)

    今すぐインストールしますか?

    次の 2 つの選択肢を提示します:

    • はい — pip でインストールする → pip install pymupdf markdown weasyprint を実行します
    • いいえ — 自分で対応する → 手動インストール手順を表示して停止します:
      ## 手動インストール
      
      Python パッケージをインストールします:
        pip install pymupdf markdown weasyprint
      
      weasyprint にはシステムライブラリも必要です。使用している OS に合わせてインストールしてください:
      
      macOS(Homebrew):
        brew install cairo pango gdk-pixbuf libffi
      
      Ubuntu/Debian:
        sudo apt install libcairo2-dev libpango1.0-dev libgdk-pixbuf2.0-dev libffi-dev
      
      その後、スキルを再実行してください。
      
  4. ステップ 1 — PDF を Markdown に抽出します:

    出力ディレクトリを決定します。元の PDF と同じディレクトリを使用してください。

    抽出スクリプトを実行します:

    python3 <repo-root>/skills/translate-pdf/translate_pdf.py extract "<pdf-path>" -o "<output-dir>/<filename>_source.md"
    

    <filename> は拡張子を除いた PDF のファイル名です。

    抽出後、生成された Markdown ファイルを読み、内容に問題がないか確認します。Markdown がほとんど空、または文字化けしている場合(PDF がスキャン画像ベースである場合など)は、開発者に警告します:

    この PDF は画像ベースであるか、抽出可能なテキストがほとんどないようです。翻訳が不完全または不正確になる可能性があります。まず OCR ツールの使用を検討してください。

  5. ステップ 1b — 表が保持されていることを確認します:

    抽出スクリプトは、PyMuPDF の find_tables() を使って PDF 内の表を自動検出し、Markdown の表形式に変換します。抽出後、表が正しく保持されていることを必ず確認してください:

    a) Read ツールを使って元の PDF を読み、ドキュメント内のすべての表を目視で確認します。表の数と、おおよその内容(見出し、行数)を記録します。 b) 抽出された Markdown ファイルを読み込み、すべての Markdown テーブル(| で始まる行)を特定します。各テーブルについて、次の点を確認します。

    • ヘッダー行、区切り行(| --- | --- |)、正しい数のデータ行があること
    • 元の PDF にデータがある箇所で、セルの内容が存在し、空欄になっていないこと
    • 複数列の構造が保たれていること(各行の | 区切りの数が正しいこと)

    c) 数を比較します。 Markdown テーブルの数が、元の PDF で特定したテーブルの数と一致しない場合、テーブルが検出されなかった可能性があります。欠落しているテーブルごとに、次の手順を行います。

    • PDF 内で欠落したテーブルのページと位置を特定する
    • 抽出された Markdown 内の該当テキストを読み取り、Markdown 形式のテーブルを手動で再構成する(内容が通常のテキスト段落として記載されている場合があります)
    • ファイル内の正しい位置で、テーブルデータを含む通常のテキスト段落を再構成した Markdown テーブルに置き換える

    d) 不正な形式のテーブルを修正します。 Markdown テーブルの列数が行ごとに一致しない、区切りがない、または内容が文字化けしている場合は、元の PDF を参照して修正します。すべてのテーブル行の列数が同じになるようにしてください。

    検証と修正が完了したら、更新した Markdown ファイルを保存します。

  6. ステップ 2 — Markdown を翻訳する:

    抽出された Markdown ファイル(<filename>_source.md)を読み込みます。

    次のルールに従って、<source-language> から <target-language> にすべてのテキストコンテンツを翻訳します。

    • Markdown の書式をすべて保持する — 見出し、太字、斜体、リスト、テーブル、コードブロック、リンク、画像参照
    • Markdown テーブルをそのまま保持する — 行数、列数、ヘッダー行、区切り行を変更しないでください。セルの内容は翻訳しますが、テーブル構造は変更しないでください(列や行の追加、削除、結合は禁止です)
    • ページコメントマーカー(``)と、ページ区切りとして使用される水平線(---)を保持する
    • 翻訳しないもの: コードスニペット、URL、ファイルパス、広く認知されている固有名詞(ブランド名、製品名)、技術識別子
    • 自然に翻訳する — 一語一句の直訳ではなく、対象言語として流暢で自然な文章にします
    • ドキュメント構造を保持する — 翻訳後の Markdown は、元の文書と同じ数のセクション、段落、テーブル、構造要素を含めてください

    翻訳した内容を <output-dir>/<filename>_<target-language>.md(例:report_English.md)に書き込みます。

  7. ステップ 3 — 翻訳済み PDF を作成する:

    ビルドスクリプトを実行します。

    python3 <repo-root>/skills/translate-pdf/translate_pdf.py build "<output-dir>/<filename>_<target-language>.md" -o "<output-dir>/<filename>_<target-language>.pdf"
    

    出力 PDF が正常に作成されたことを確認します。

  8. 結果を報告する:

    概要を表示します。

    ## Translation Complete
    
    **Source:** <pdf-path> (<source-language>)
    **Target language:** <target-language>
    
    ### Generated Files
    - Source Markdown: `<filename>_source.md`
    - Translated Markdown: `<filename>_<target-language>.md`
    - Translated PDF: `<filename>_<target-language>.pdf`
    
    All files saved in: `<output-directory>/`
    
  9. 例外的な状況への対応:

    • PDF がパスワードで保護されている場合は、エラーを表示して停止します
    • PDF から抽出可能なテキストがまったくない場合は、開発者に警告して停止します
    • weasyprint の依存関係であるシステムライブラリの不足が原因でビルド手順が失敗した場合は、ステップ 3 のプラットフォーム別インストール手順を表示します
    • 元の言語と対象言語が同じ場合は、開発者に警告し、続行する前に確認を求めます

コメント