`translate5_com.py` は、AI（OpenAI, Google/Gemini, DeepL）を使用して様々なドキュメント形式（`.docx`, `.pptx`, `.pdf`, `.html`, `.md`, `.txt`）を翻訳または校正するPythonスクリプトです。特に、PowerPoint (`.pptx`) ファイルの処理には、Windows環境でのCOMオートメーション (`pywin32`) を利用します。

---

### 1) プログラムの動作

このプログラムは、指定された入力ファイルの内容を抽出し、設定されたAI翻訳サービスを利用して翻訳・校正を行い、結果を新しいファイルとして保存します。また、翻訳前後のテキストを比較するHTMLレポートも生成します。

**主な機能:**

1.  **多様なファイル形式のサポート:**
    *   **`.docx` (Word):** `python-docx` ライブラリを使用してドキュメントの段落やテーブルセル内のテキストを抽出・翻訳し、更新します。処理単位は段落 (`paragraph`) またはラン (`run`) で指定可能です。
    *   **`.pptx` (PowerPoint):** **Windows環境でのみ動作**し、`pywin32` ライブラリを介したCOMオートメーションを利用してPowerPointアプリケーションを直接操作します。スライド、テキストボックス、およびノートのテキストを抽出し、翻訳後に更新します。テキスト内の改行は一時的にプレースホルダ (`<PPTX_CRLF_PH>`) に置換され、翻訳後に元の改行形式 (`\r`) に戻されます。
    *   **`.pdf` (PDF):** `pdf2docx` ライブラリを使用してPDFファイルをまず`.docx` に変換し、その後`.docx` と同様に処理します。
    *   **`.html`:** `BeautifulSoup` ライブラリを使用してHTMLを解析し、各テキストノードを翻訳後に更新します。
    *   **`.md` (Markdown) / `.txt` (Plain Text):** テキストを直接読み込み、翻訳・校正します。
    *   **`--use_md` モード:** `.pdf`, `.docx`, `.html` などのファイルを一度Markdown形式に変換（`markitdown` または `html2text` を使用）してから処理するモードも提供されます。このモードでは、AIによる整形プロンプトを適用してテキストのクリーンアップも行えます。

2.  **複数のAI翻訳APIの利用:**
    *   **OpenAI:** `openai5` (カスタムGPT-5モデル) および `openai` (GPT-4oなど) をサポート。
    *   **Google/Gemini:** `google` または `gemini` (Gemini-2.5-flashなど) をサポート。
    *   **DeepL:** `deepl` をサポート。

3.  **柔軟な翻訳設定:**
    *   **翻訳モード (`--mode`):** `je` (和英), `ej` (英和), `jj` (和文校正), `ee` (英文校正) など、ソース言語とターゲット言語を指定できます。
    *   **APIキーとモデル:** 環境変数またはコマンドライン引数でAPIキーや使用モデル（`openai_model`, `google_model` など）を設定できます。
    *   **プロンプトのカスタマイズ:** `translate5.ini` ファイル、またはコマンドライン引数で、AIに与える翻訳・整形プロンプトを詳細にカスタマイズできます。
    *   **翻訳対象の制御:**
        *   `--min_translate_length`: 翻訳対象とするテキストの最小文字数を設定。
        *   `--limit_to_multibyte_str`: 日本語などのマルチバイト文字を含むテキストのみを翻訳対象とするか指定。
        *   `--allowed_translation_length_ratio`: 翻訳後のテキスト長が元のテキスト長に対して許容される最大比率を設定。

4.  **APIレートリミット対策:**
    *   `--tsleep_rpm` 引数により、API呼び出し間の待機時間を設定し、APIのリクエストレート制限（RPM）に抵触するのを避けます。

5.  **出力とレポート:**
    *   翻訳されたドキュメントは、元のファイル名に `_revised` が付加された新しいファイルとして保存されます。
    *   翻訳処理で取得された翻訳前後のテキストペアを基に、Jinja2テンプレート (`template_translate.html`) を使用して比較レポートHTMLファイルを生成します。

**処理の流れ:**

1.  **初期化:**
    *   `argparse` を使用してコマンドライン引数を解析し、デフォルト値を設定します。
    *   `.env`, `ai.env` ファイルからAPIキーや共通設定を読み込みます。
    *   `translate5.ini` ファイルから翻訳・整形プロンプトを読み込み、コマンドライン引数で上書き可能にします。
    *   `pywin32` の有無を確認し、PowerPoint処理が必要な場合は警告を出します。
    *   その他の依存ライブラリの有無を確認し、不足があれば警告します。

2.  **入力ファイル解析と準備:**
    *   入力ファイル (`--infile`) の種類を判別します。
    *   `.pdf` の場合は、まず `pdf2docx` を使って`.docx` に変換します。
    *   `--use_md` オプションが指定されている場合は、`markitdown` または `html2text` でMarkdownに変換します。

3.  **テキスト抽出と翻訳ループ:**
    *   ファイルの形式に応じた処理関数（`translate_docx`, `translate_pptx`, `translate_html`, `translate_text`）が呼び出されます。
    *   これらの関数は、ドキュメント内のテキスト要素（段落、HTML要素、PowerPointのシェイプ/ノートなど）を順次巡回します。
    *   各テキスト要素について、`min_translate_length` や `limit_to_multibyte_str` などの条件を満たす場合にのみ翻訳対象とします。
    *   選択されたテキストは、設定されたAI翻訳API（OpenAI, Google, DeepL）とカスタマイズされたプロンプトを使って翻訳されます。
    *   翻訳結果は `allowed_translation_length_ratio` などのチェックを通過した場合にのみ採用され、元のドキュメント構造に反映されます。翻訳失敗やチェック不合格の場合は元のテキストが保持されます。
    *   API呼び出し後には `tsleep_rpm` で指定された時間だけ待機し、レートリミット超過を防ぎます。

4.  **結果の保存:**
    *   翻訳された内容を含むドキュメントオブジェクト（`python-docx` の `Document`、`BeautifulSoup` の `Soup`、PowerPoint COMオブジェクト）またはテキストが、`_revised` サフィックス付きの新しいファイルとして保存されます。
    *   PowerPointの場合は、COMアプリケーションを介してファイルを保存し、その後アプリケーションを終了します。

5.  **比較HTMLレポートの生成:**
    *   翻訳処理中に収集された翻訳前後のテキストペアのデータと、各種設定情報をJinja2テンプレート (`template_translate.html`) に渡し、HTMLレポートを生成して `_compare.html` ファイルとして保存します。

### 2) 必要な非標準ライブラリとインストールコマンドとインストール方法

以下の非標準ライブラリが必要です。`tkai_lib` はカスタムライブラリであるため、`pip` ではインストールできません。

| ライブラリ名 | 説明                                                         | インストールコマンド (pip)                     | 備考                                                                                                                                                                                                                             |
| :----------- | :----------------------------------------------------------- | :--------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `chardet`    | 文字エンコーディングの検出に使用されます。                   | `pip install chardet`                          |                                                                                                                                                                                                                                  |
| `bs4`        | HTML/XML解析ライブラリ (BeautifulSoup)。HTMLファイル処理に使用。 | `pip install beautifulsoup4`                   |                                                                                                                                                                                                                                  |
| `jinja2`     | テンプレートエンジン。比較レポートのHTML生成に使用。         | `pip install Jinja2`                           |                                                                                                                                                                                                                                  |
| `html2text`  | HTMLをプレーンテキストまたはMarkdownに変換。                 | `pip install html2text`                        | `--use_md` オプションでHTMLをMarkdownに変換する際に使用。                                                                                                                                                                        |
| `pdf2docx`   | PDFファイルをMicrosoft Wordの`.docx`形式に変換。             | `pip install pdf2docx`                         | PDF入力ファイルを処理する際に使用。                                                                                                                                                                                              |
| `docx`       | Microsoft Wordの`.docx`ファイルを作成・読み込み・更新。      | `pip install python-docx`                      | Word (`.docx`) ファイル処理に使用。                                                                                                                                                                                              |
| `markitdown` | ドキュメントからMarkdown形式のテキストを抽出・変換。         | `pip install markitdown`                       | `--use_md` オプションでWordやPDFをMarkdownに変換する際に使用。                                                                                                                                                                   |
| `openai`     | OpenAI APIクライアント。                                     | `pip install openai`                           | OpenAIの翻訳サービスを利用する際に必須。                                                                                                                                                                                         |
| `pywin32`    | Windows APIへのPythonインターフェース。                      | `pip install pywin32`                          | **Windows OSでのみ利用可能。** PowerPoint (`.pptx`) ファイルをCOMオートメーションで処理するために必須。LinuxやmacOSでは利用できず、PowerPointファイルの翻訳機能は動作しません。                                                |
| `tkai_lib`   | OpenAI, Google, DeepLへのAPI呼び出しを行うカスタムライブラリ。 | **pipでのインストールは不可。**                | このプログラムが依存するカスタムライブラリです。`translate5_com.py` と同じディレクトリ、またはPythonのモジュール検索パスが通っている場所に `tkai_lib.py` ファイルが存在する必要があります。                                  |

**インストール方法:**

1.  コマンドプロンプト（Windows）またはターミナル（macOS/Linux）を開きます。
2.  以下のコマンドを実行して、リストされているライブラリをインストールします。
    ```bash
    pip install chardet beautifulsoup4 Jinja2 html2text pdf2docx python-docx markitdown openai
    ```
3.  **WindowsユーザーでPowerPointファイルを処理する場合のみ、追加で以下を実行してください。**
    ```bash
    pip install pywin32
    ```
4.  `tkai_lib.py` がこのスクリプトと同じディレクトリにあることを確認してください。

### 3) 必要な入力ファイル

このプログラムは、以下の種類の入力ファイルを必要とします。

1.  **翻訳対象ファイル:**
    *   `--infile` オプションでパスが指定されるファイルです。デフォルトは `translate_test.docx`。
    *   サポートされる拡張子: `.docx`, `.pptx`, `.pdf`, `.html`, `.md`, `.txt`。
    *   このファイルは、プログラム実行時に存在している必要があります。

2.  **設定ファイル:**
    *   `translate5.env`: 環境変数としてAPIキーやその他の設定を読み込むためのファイル。スクリプトが動作するディレクトリに配置するか、`cfg.config_path` で指定します。
    *   `ai.env`: 同様に、共通のAI設定やAPIキーを読み込むためのファイル。スクリプトが動作するディレクトリに配置するか、`cfg.common_config_path` で指定します。
    *   `translate5.ini`: AI翻訳・整形プロンプトをカスタマイズするための設定ファイル。プログラムは以下の順序で探索します。
        1.  現在の作業ディレクトリ
        2.  `--infile` で指定されたファイルのディレクトリ
        3.  スクリプト (`translate5_com.py`) が存在するディレクトリ
        このファイルが存在しない場合、プログラムに組み込まれたデフォルトのプロンプトが使用されます。

3.  **HTMLテンプレートファイル:**
    *   `--html_template_path` オプションでパスが指定されるファイルです。デフォルトは `template_translate.html`。
    *   翻訳結果の比較レポートHTMLを生成するために使用されるJinja2テンプレートファイルです。
    *   このファイルは、プログラム実行時に存在している必要があります。デフォルトパスでファイルが見つからない場合、現在の作業ディレクトリ、次いでスクリプトディレクトリが探索されます。

### 4) 実行後に生成される出力ファイル

プログラムの実行後、以下のファイルが生成される可能性があります。

1.  **翻訳済みドキュメント:**
    *   入力ファイル名に `_revised` が付加され、元のファイルの形式（拡張子）を保ったファイルが出力されます。
    *   例:
        *   `my_document.docx` → `my_document_revised.docx`
        *   `my_presentation.pptx` → `my_presentation_revised.pptx`
        *   `report.pdf` (変換後も) → `report_revised.docx` (または `--use_md` の場合は `report_revised.md`)
        *   `webpage.html` → `webpage_revised.html`
        *   `notes.md` → `notes_revised.md`
        *   `text.txt` → `text_revised.txt`

2.  **比較レポートHTMLファイル:**
    *   入力ファイル名に `_compare.html` が付加されたファイルが出力されます。
    *   このファイルには、翻訳前と翻訳後のテキストが並べて表示され、翻訳結果の比較とレビューが可能です。
    *   例: `my_document.docx` → `my_document_compare.html`

3.  **中間ファイル (特定のオプションや入力ファイルタイプの場合):**
    *   **PDF入力の場合:** `pdf2docx` によって `.pdf` ファイルが一時的に `.docx` ファイルに変換されます。この中間ファイルは、入力ファイル名と同じパスで `.docx` 拡張子が付加された名前で生成されます。
        *   例: `my_report.pdf` → `my_report.docx`
    *   **`--use_md` オプションが指定された場合:**
        *   入力ファイルがWord, HTML, PDFの場合、`markitdown` や `html2text` によってMarkdown形式に変換された中間ファイルが出力されます。ファイル名は入力ファイル名に `.md` が付加されます。
            *   例: `my_document.docx` → `my_document.md`
        *   さらに、PDF入力と `--use_md` が同時に指定された場合、整形処理後のMarkdownファイルが `_reformat.md` というサフィックスで出力されることがあります。
            *   例: `my_report.pdf` → `my_report_reformat.md`

### 5) コマンドラインでの使用例 (Usage)

`python translate5_com.py [options]`

**基本的な使用法:**

*   デフォルトの入力ファイル (`translate_test.docx`) を和英翻訳 (je) し、OpenAI GPT-5モデルを使用:
    ```bash
    python translate5_com.py
    ```

**特定の入力ファイルを指定:**

*   `my_document.docx` を和英翻訳 (je) する:
    ```bash
    python translate5_com.py --infile my_document.docx
    # または短縮形
    python translate5_com.py -i my_document.docx
    ```

**翻訳モードの指定:**

*   `my_document.docx` を英和翻訳 (ej) する:
    ```bash
    python translate5_com.py -i my_document.docx --mode ej
    ```
*   `my_text.txt` を和文校正 (jj) する:
    ```bash
    python translate5_com.py -i my_text.txt --mode jj
    ```

**翻訳APIの選択:**

*   `my_presentation.pptx` をDeepLで和英翻訳する:
    ```bash
    # (Windows環境のみ)
    python translate5_com.py -i my_presentation.pptx --api deepl --mode je
    ```
*   `my_html.html` をGoogle/Geminiで英和翻訳する:
    ```bash
    python translate5_com.py -i my_html.html --api google --mode ej
    ```
*   `my_markdown.md` をOpenAI (GPT-4o) で和英翻訳する（モデルを明示的に指定）:
    ```bash
    python translate5_com.py -i my_markdown.md --api openai --model gpt-4o --mode je
    ```

**PDFファイルをMarkdownとして処理し、翻訳:**

*   `my_report.pdf` をMarkdownに変換し、OpenAI GPT-5モデルで処理する:
    ```bash
    python translate5_com.py -i my_report.pdf --use_md --api openai5 --mode je
    ```

**出力HTMLレポートのパスを指定:**

*   `my_doc.docx` を翻訳し、比較レポートを `report.html` として出力する:
    ```bash
    python translate5_com.py -i my_doc.docx --output_html_path report.html
    ```

**翻訳プロンプトをコマンドラインから上書き:**

*   `my_file.txt` を特定のカスタムプロンプトで翻訳する:
    ```bash
    python translate5_com.py -i my_file.txt --mode je --api openai5 --translate_prompt "あなたはプロの翻訳家です。以下を自然な日本語に翻訳してください。\n\n原文:\n{{text}}\n\n訳文:"
    ```

**詳細な制御オプション:**

*   最小翻訳長を10文字に設定し、翻訳後の長さ比率を3.0までに制限する:
    ```bash
    python translate5_com.py -i my_document.docx --min_translate_length 10 --allowed_translation_length_ratio 3.0
    ```
*   docxファイルをラン単位で処理する:
    ```bash
    python translate5_com.py -i my_document.docx --process_unit run
    ```
*   API呼び出し間の待機時間を1秒に設定する:
    ```bash
    python translate5_com.py -i my_document.docx --tsleep_rpm 1.0
    ```

**環境変数の設定例 (`.env` または `ai.env`):**

```
OPENAI_API_KEY="YOUR_OPENAI_API_KEY_HERE"
GOOGLE_API_KEY="YOUR_GOOGLE_API_KEY_HERE"
DEEPL_API_KEY="YOUR_DEEPL_API_KEY_HERE"
openai_model="gpt-4o"
google_model="gemini-1.5-pro-latest"
max_tokens="3000"
temperature="0.5"
```