Files
docutranslate/README_JP.md
2025-08-29 09:37:06 +08:00

26 KiB
Raw Blame History

プロジェクトロゴ

DocuTranslate

GitHub stars github下载数 PyPI version python版本 开源协议

简体中文 / English / 日本語

DocuTranslate はファイル翻訳ツールで、doclingminerUなどの最先端の文書解析エンジンと大型言語モデル(LLM)を組み合わせ、さまざまな形式の文書を正確に翻訳します。

新しいバージョンのアーキテクチャは ワークフロー(Workflow) をコアとし、さまざまな種類の翻訳タスクに高いカスタマイズ性と拡張性を提供するソリューションを実現しています。

  • 多形式ファイル対応: pdfdocxxlsxmdtxtjsonepubsrtなど様々なファイル形式の翻訳が可能です。
  • 表・数式・コード認識: doclingおよびmineruを活用し、学術論文で頻出する表、数式、コードの認識と翻訳を実現。
  • 用語集の自動作成: 用語の統一を実現するための用語集自動作成機能をサポート。
  • JSON翻訳: JSONPathjsonpath-ng構文規格)を用いて翻訳対象の値を指定可能。
  • Word/Excel高精度翻訳: docxxlsxファイル(現在docxlsファイルは非対応)の元の書式を保持した翻訳をサポート。
  • 複数AIプラットフォーム対応: 主要なAIプラットフォームのほとんどに対応し、カスタムプロンプトを用いた高並列パフォーマンスAI翻訳を実現。
  • 非同期処理対応: 高性能シナリオ向けに設計された非同期処理を完全サポート。並列処理可能なサービスインターフェースを実装。
  • 対話型Webインターフェース: すぐに利用可能なWeb UIとRESTful APIを提供し、容易な統合と使用を実現。

pdfhtmlなどのファイルを翻訳する場合、まずmarkdownに変換されます。このため、元のレイアウトが失われる可能性があります。レイアウトに厳しい要件があるユーザーはご注意ください。

QQ交流グループ1047781902

UIインターフェース 翻译效果

論文翻訳 翻译效果

小説翻訳 翻译效果

統合パッケージ

早速使い始めたいユーザーのために、GitHub Releases(https://github.com/xunbu/docutranslate/releases)に統合パッケージを提供しています。ダウンロードして解凍し、AIプラットフォームのAPI-Keyを入力するだけで使用を開始できます。

  • DocuTranslate:標準版で、オンラインのminerUエンジンを使用して文書を解析し、ほとんどのユーザーにおすすめします。
  • DocuTranslate_full:完全版で、ローカルのdocling解析エンジンを組み込み、オフライン使用やデータプライバシーに高い要件があるシーンをサポートします。

インストール

pipを使う

# ベースインストール
pip install docutranslate

# doclingローカル解析エンジンを使用する場合
pip install docutranslate[docling]

uvを使う

# 環境を初期化
uv init

# ベースインストール
uv add docutranslate

# docling拡張をインストール
uv add docutranslate[docling]

gitを使う

# 環境を初期化
git clone https://github.com/xunbu/docutranslate.git

cd docutranslate

uv sync

コアコンセプト:ワークフロー (Workflow)

新しいDocuTranslateのコアはワークフロー (Workflow) です。各ワークフローは、特定のファイルタイプ向けに設計された完全なエンドツーエンド翻訳パイプラインです。あなたはもはや巨大なクラスと対話するのではなく、ファイルタイプに基づいて適切なワークフローを選択して設定します。

基本的な使用フローは以下の通りです:

  1. ワークフローを選択入力ファイルタイプPDF/Word または TXTに基づいて、MarkdownBasedWorkflowTXTWorkflow などのワークフローを選択します。
  2. 設定を構築:選択したワークフローに対応する設定オブジェクト(例:MarkdownBasedWorkflowConfig)を作成します。この設定オブジェクトには、すべての必要なサブ設定が含まれています。例えば:
    • コンバーター設定 (Converter Config)元のファイルPDFを Markdown に変換する方法を定義します。
    • 翻訳機設定 (Translator Config):使用する LLM、API-Key、ターゲット言語などを定義します。
    • エクスポーター設定 (Exporter Config)出力フォーマットHTMLの特定のオプションを定義します。
  3. ワークフローのインスタンス化:設定オブジェクトを使用してワークフローのインスタンスを作成します。
  4. 翻訳を実行:ワークフローの .read_*() および .translate() / .translate_async() メソッドを呼び出します。
  5. 結果のエクスポート/保存.export_to_*() または .save_as_*() メソッドを呼び出して、翻訳結果を取得または保存します。

利用可能なワークフロー

ワークフロー 適用シーン 入力フォーマット 出力フォーマット コア設定クラス
MarkdownBasedWorkflow リッチドキュメントを処理します。例えば、PDF、Word、画像など。フローは次の通りファイル -> Markdown -> 翻訳 -> エクスポート .pdf, .docx, .md, .png, .jpg など .md, .zip, .html MarkdownBasedWorkflowConfig
TXTWorkflow テキストファイルを処理します。フローは次の通り:txt -> 翻訳 -> エクスポート .txt 及びその他のテキスト形式 .txt, .html TXTWorkflowConfig
JsonWorkflow JSONファイルを処理します。フローは次の通りjson -> 翻訳 -> エクスポート .json .json, .html JsonWorkflowConfig
DocxWorkflow DOCXファイルを処理します。フローは次の通りdocx -> 翻訳 -> エクスポート .docx .docx, .html docxWorkflowConfig
XlsxWorkflow XLSXファイルを処理します。フローは次の通りxlsx -> 翻訳 -> エクスポート .xlsx .xlsx, .html XlsxWorkflowConfig
SrtWorkflow SRTファイルを処理します。フローは次の通りsrt -> 翻訳 -> エクスポート .srt .srt, .html SrtWorkflowConfig
EpubWorkflow EPUBファイルを処理します。フローは次の通りepub -> 翻訳 -> エクスポート .epub .epub, .html EpubWorkflowConfig

インタラクティブなインターフェースではPDF形式にエクスポートできます

Web UI と API サービスの起動

使いやすさのために、DocuTranslateには機能豊富なWebインターフェースとRESTful APIが用意されています。

サービスの起動:

# サービスを起動します。デフォルトでポート8010をリッスンします
docutranslate -i

# ポートを指定して起動
docutranslate -i -p 8011

# 環境変数でポートを指定することもできます
export DOCUTRANSLATE_PORT=8011
docutranslate -i
  • 対話型インターフェース: サービスを起動後、ブラウザで http://127.0.0.1:8010 (または指定したポート) にアクセスしてください。
  • APIドキュメント: 完全なAPIドキュメントSwagger UIhttp://127.0.0.1:8010/docs にあります。

使用方法

例 1: PDFファイルを翻訳する ( MarkdownBasedWorkflow を使用)

最も一般的なユースケースです。minerU エンジンを使用してPDFをMarkdownに変換し、次にLLMを使用して翻訳します。ここでは非同期を例にとります。

import asyncio
from docutranslate.workflow.md_based_workflow import MarkdownBasedWorkflow, MarkdownBasedWorkflowConfig
from docutranslate.converter.x2md.converter_mineru import ConverterMineruConfig
from docutranslate.translator.ai_translator.md_translator import MDTranslatorConfig
from docutranslate.exporter.md.md2html_exporter import MD2HTMLExporterConfig


async def main():
    # 1. 翻訳設定を構築
    translator_config = MDTranslatorConfig(
        base_url="https://open.bigmodel.cn/api/paas/v4",  # AI プラットフォームのベース URL
        api_key="YOUR_ZHIPU_API_KEY",  # AI プラットフォームの API キー
        model_id="glm-4-air",  # モデル ID
        to_lang="English",  # 対象言語
        chunk_size=3000,  # テキストのチャンクサイズ
        concurrent=10,  # 同時実行数
        # glossary_generate_enable=True, # 自動用語集生成を有効にする
        # glossary_dict={"Jobs":"乔布斯"} # 用語表を渡す
    )

    # 2. コンバーター設定を構築 (minerU を使用)
    converter_config = ConverterMineruConfig(
        mineru_token="YOUR_MINERU_TOKEN",  # あなたの minerU トークン
        formula_ocr=True  # 数式認識を有効化
    )

    # 3. メインワークフロー設定を構築
    workflow_config = MarkdownBasedWorkflowConfig(
        convert_engine="mineru",  # 解析エンジンを指定
        converter_config=converter_config,  # コンバーター設定を渡す
        translator_config=translator_config,  # 翻訳設定を渡す
        html_exporter_config=MD2HTMLExporterConfig(cdn=True)  # HTML エクスポート設定
    )

    # 4. ワークフローをインスタンス化
    workflow = MarkdownBasedWorkflow(config=workflow_config)

    # 5. ファイルを読み込み翻訳を実行
    print("ファイルの読み込みと翻訳を開始します...")
    workflow.read_path("path/to/your/document.pdf")
    await workflow.translate_async()
    # または同期方式を使用
    # workflow.translate()
    print("翻訳が完了しました!")

    # 6. 結果を保存
    workflow.save_as_html(name="translated_document.html")
    workflow.save_as_markdown_zip(name="translated_document.zip")
    workflow.save_as_markdown(name="translated_document.md")  # 画像埋め込みのマークダウン
    print("ファイルが ./output フォルダに保存されました。")

    # または直接コンテンツ文字列を取得
    html_content = workflow.export_to_html()
    html_content = workflow.export_to_markdown()
    # print(html_content)


if __name__ == "__main__":
    asyncio.run(main())

例 2: TXT ファイルの翻訳(TXTWorkflow を使用)

プレーンテキストファイルのフローはよりシンプルです。ドキュメント解析(変換)ステップが不要だからです。以下は非同期方式の例です。

import asyncio
from docutranslate.workflow.txt_workflow import TXTWorkflow, TXTWorkflowConfig
from docutranslate.translator.ai_translator.txt_translator import TXTTranslatorConfig
from docutranslate.exporter.txt.txt2html_exporter import TXT2HTMLExporterConfig


async def main():
    # 1. 翻訳者設定を構築
    translator_config = TXTTranslatorConfig(
        base_url="https://api.openai.com/v1/",
        api_key="YOUR_OPENAI_API_KEY",
        model_id="gpt-4o",
        to_lang="日本語",
    )

    # 2. メインワークフロー設定を構築
    workflow_config = TXTWorkflowConfig(
        translator_config=translator_config,
        html_exporter_config=TXT2HTMLExporterConfig(cdn=True)
    )

    # 3. ワークフローをインスタンス化
    workflow = TXTWorkflow(config=workflow_config)

    # 4. ファイルを読み込み翻訳を実行
    workflow.read_path("path/to/your/notes.txt")
    await workflow.translate_async()
    # または同期メソッドを使用
    # workflow.translate()

    # 5. 結果を保存
    workflow.save_as_txt(name="translated_notes.txt")
    print("TXTファイルが保存されました。")

    # 翻訳されたプレーンテキストをエクスポートすることも可能
    text = workflow.export_to_txt()


if __name__ == "__main__":
    asyncio.run(main())

例3JSONファイルを翻訳するJsonWorkflowを使用)

ここでは非同期方式を例に示します。JsonTranslatorConfigのjson_paths項目には、翻訳するJSONパスjsonpath-ng構文規準に準拠を指定する必要があり、JSONパスに一致する値のみが翻訳されます。

import asyncio

from docutranslate.exporter.js.json2html_exporter import Json2HTMLExporterConfig
from docutranslate.translator.ai_translator.json_translator import JsonTranslatorConfig
from docutranslate.workflow.json_workflow import JsonWorkflowConfig, JsonWorkflow


async def main():
    # 1. 翻訳者設定を構築
    translator_config = JsonTranslatorConfig(
        base_url="https://api.openai.com/v1/",
        api_key="YOUR_OPENAI_API_KEY",
        model_id="gpt-4o",
        to_lang="日本語",
        json_paths=["$.*", "$.name"]  # jsonpath-ngパス構文に準拠、一致するパスの値がすべて翻訳される
    )

    # 2. メインワークフロー設定を構築
    workflow_config = JsonWorkflowConfig(
        translator_config=translator_config,
        html_exporter_config=Json2HTMLExporterConfig(cdn=True)
    )

    # 3. ワークフローをインスタンス化
    workflow = JsonWorkflow(config=workflow_config)

    # 4. ファイルを読み込み翻訳を実行
    workflow.read_path("path/to/your/notes.json")
    await workflow.translate_async()
    # または同期メソッドを使用
    # workflow.translate()

    # 5. 結果を保存
    workflow.save_as_json(name="translated_notes.json")
    print("jsonファイルが保存されました。")

    # 翻訳されたJSONテキストをエクスポートすることも可能
    text = workflow.export_to_json()


if __name__ == "__main__":
    asyncio.run(main())

例4DOCXファイルを翻訳するDocxWorkflowを使用)

ここでは非同期方式を例に説明します。

import asyncio

from docutranslate.exporter.docx.docx2html_exporter import Docx2HTMLExporterConfig
from docutranslate.translator.ai_translator.docx_translator import DocxTranslatorConfig
from docutranslate.workflow.docx_workflow import DocxWorkflowConfig, DocxWorkflow


async def main():
    # 1. 翻訳器の設定を構築
    translator_config = DocxTranslatorConfig(
        base_url="https://api.openai.com/v1/",
        api_key="YOUR_OPENAI_API_KEY",
        model_id="gpt-4o",
        to_lang="日本語",
        insert_mode="replace",  # 代替オプション "replace", "append", "prepend"
        separator="\n",  # "append", "prepend"モードで使用される区切り文字
    )

    # 2. メインワークフローの設定を構築
    workflow_config = DocxWorkflowConfig(
        translator_config=translator_config,
        html_exporter_config=Docx2HTMLExporterConfig(cdn=True)
    )

    # 3. ワークフローをインスタンス化
    workflow = DocxWorkflow(config=workflow_config)

    # 4. ファイルを読み込み、翻訳を実行
    workflow.read_path("path/to/your/notes.docx")
    await workflow.translate_async()
    # または同期メソッドを使用
    # workflow.translate()

    # 5. 結果を保存
    workflow.save_as_docx(name="translated_notes.docx")
    print("docxファイルが保存されました。")

    # 翻訳後のdocxのバイナリをエクスポートすることも可能
    text_bytes = workflow.export_to_docx()


if __name__ == "__main__":
    asyncio.run(main())

例 5: xlsxファイルの翻訳XlsxWorkflowを使用)

ここでは非同期方式を例に説明します。

import asyncio

from docutranslate.exporter.xlsx.xlsx2html_exporter import Xlsx2HTMLExporterConfig
from docutranslate.translator.ai_translator.xlsx_translator import XlsxTranslatorConfig
from docutranslate.workflow.xlsx_workflow import XlsxWorkflowConfig, XlsxWorkflow


async def main():
    # 1. 翻訳器の設定を構築
    translator_config = XlsxTranslatorConfig(
        base_url="https://api.openai.com/v1/",
        api_key="YOUR_OPENAI_API_KEY",
        model_id="gpt-4o",
        to_lang="日本語",
        insert_mode="replace",  # 代替オプション "replace", "append", "prepend"
        separator="\n",  # "append", "prepend"モードで使用される区切り文字
    )

    # 2. メインワークフローの設定を構築
    workflow_config = XlsxWorkflowConfig(
        translator_config=translator_config,
        html_exporter_config=Xlsx2HTMLExporterConfig(cdn=True)
    )

    # 3. ワークフローをインスタンス化
    workflow = XlsxWorkflow(config=workflow_config)

    # 4. ファイルを読み込み、翻訳を実行
    workflow.read_path("path/to/your/notes.xlsx")
    await workflow.translate_async()
    # または同期メソッドを使用
    # workflow.translate()

    # 5. 結果を保存
    workflow.save_as_xlsx(name="translated_notes.xlsx")
    print("xlsxファイルが保存されました。")

    # 翻訳後のxlsxのバイナリをエクスポートすることも可能
    text_bytes = workflow.export_to_xlsx()


if __name__ == "__main__":
    asyncio.run(main())

前提条件と設定の詳細

1. 大規模言語モデルのAPIキーの取得

翻訳機能は大型言語モデルに依存しており、base_urlapi_keymodel_idを取得するためには、対応するAIプラットフォームから必要な情報を入手する必要があります。

推奨モデル:火山エンジンのdoubao-seed-1-6-flash-250715、智譜のglm-4-flash、阿里雲の qwen-plus,``qwen-turbo、deepseekのdeepseek-chat`など。

プラットフォーム名 APIkeyを取得 baseurl
ollama http://127.0.0.1:11434/v1
lm studio http://127.0.0.1:1234/v1
openrouter 取得 https://openrouter.ai/api/v1
openai 取得 https://api.openai.com/v1/
gemini 取得 https://generativelanguage.googleapis.com/v1beta/openai/
deepseek 取得 https://api.deepseek.com/v1
智譜ai 取得 https://open.bigmodel.cn/api/paas/v4
騰訊混元 取得 https://api.hunyuan.cloud.tencent.com/v1
阿里雲百錬 取得 https://dashscope.aliyuncs.com/compatible-mode/v1
火山エンジン 取得 https://ark.cn-beijing.volces.com/api/v3
硅基流動 取得 https://api.siliconflow.cn/v1
DMXAPI 取得 https://www.dmxapi.cn/v1

2. minerU Tokenを取得オンライン解析

mineruを文書解析エンジンとして選択した場合(convert_engine="mineru"、無料のTokenを申請する必要があります。

  1. minerUの公式ウェブサイトにアクセスして登録し、APIを申請します。
  2. API Token管理インターフェースで新しいAPI Tokenを作成します。

注意: minerU Tokenは14日間有効期限があり、期限が切れた場合は再度作成してください。

3. doclingエンジンの設定ローカル解析

doclingを文書解析エンジンとして選択した場合(convert_engine="docling"、初回使用時にHugging Faceから必要なモデルがダウンロードされます。

ネットワークの問題解決策:

  1. Hugging Faceミラーの設定推奨:
  • 方法A環境変数: システム環境変数HF_ENDPOINTを設定し、IDEまたはターミナルを再起動します。
    HF_ENDPOINT=https://hf-mirror.com
    
  • 方法Bコード内で設定: Pythonスクリプトの先頭に以下のコードを追加します。
import os

os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'
  1. オフライン使用(事前にモデルパッケージをダウンロード):
  • GitHub Releasesからdocling_artifact.zipをダウンロードします。
  • プロジェクトディレクトリに解凍します。
  • 設定でモデルパスを指定します:
from docutranslate.converter.x2md.converter_docling import ConverterDoclingConfig

converter_config = ConverterDoclingConfig(
    artifact="./docling_artifact",  # 解凍したフォルダーを指定
    code_ocr=True,
    formula_ocr=True
)

FAQ

Q: 8010ポートが使用中の場合はどうすればよいですか A: -pパラメータを使用して新しいポートを指定するか、DOCUTRANSLATE_PORT環境変数を設定します。

Q: スキャンした文書の翻訳をサポートしていますか? A: サポートしています。mineru解析エンジンを使用してください。強力なOCR機能を持っています。

Q: 初めて使用するとなぜ遅いですか? A: doclingエンジンを使用している場合は、初回実行時にHugging Faceからモデルをダウンロードする必要があります。上記の「ネットワークの問題解決策」を参照して、プロセスを高速化してください。

Q: 内部ネットワーク(オフライン)環境で使用する方法は? A: 完全に可能です。2つの条件を満たす必要があります

  1. ローカル解析エンジン: docling エンジンを使用し、上記の「オフライン使用」の手順に従って事前にモデルパッケージをダウンロードします。
  2. ローカル LLM: Ollama または LM Studio などのツールを使用して言語モデルをローカルにデプロイし、TranslatorConfig でローカルモデルの base_url を入力します。

Q: キャッシュメカニズムはどのように動作しますか? A: MarkdownBasedWorkflow は、文書解析(ファイルから Markdown への変換の結果を自動的にキャッシュし、重複する解析による時間とリソースの消費を防ぎます。キャッシュはデフォルトでメモリに保存され、最近の10回の解析が記録されます。キャッシュ数を変更するには DOCUTRANSLATE_CACHE_NUM 環境変数を使用できます。

Star History

Star History Chart