PLaMo統合版PDFMathTranslate
サクッと読みたい論文は日本語が嬉しいのでClaude Codeに作ってもらいました。
英語のPDFを入力すると、日本語のPDFと、日本語と英語の両方のPDFを出力します。
Mlx-lmを使ってローカルでPLaMo translateを動かしています。
Mac向けですが、mlx-lmで推論している部分を変えれば他のOSでも同じです。
メモリは6~10 GBくらい使っているようです。
macOSはSequoia15.4.1, M4のmacbookでメモリ16 GBで動作確認済みです。
ソースコード:
https://github.com/shogo-d-nakamura/PDF-PLaMoTranslator
run.shにサンプルを示しています。
zsh install.sh
でvenv環境を作成し、python DL_plamo_translate.py
でPLaMo translateをダウンロードしたら、run.shのように -i で翻訳したいPDF or PDFが入ったディレクトリを指定します。
PDFファイル(article.pdf)を指定した場合、article-out.pdf, article-dual.pdfが出力されます。
ディレクトリ(articles)を指定した場合、articles-out/を作成し、その中に順次{$PDF_FILENAME}-out.pdf, {$PDF_FILENAME}-dual.pdfを出力します。
1
2
3
4
5
| # for PDF
python translate.py -i ~/workspace/PLaMoTranslator/article.pdf
# for batch translation
python translate.py -i ~/workspace/PLaMoTranslator/articles
|
以下claudeが作成したREADMEの日本語訳です。
クイックスタート
1. 依存関係のインストール
1
2
| # 仮想環境を作成し、PDFMathTranslateとMLX-LMをインストール
zsh install.sh
|
2. モデルのダウンロード
1
| python DL_plamo_translate.py
|
3. PDFの翻訳
1
2
| # テスト用サンプル
python translate_test_pdf.py
|
これによりtest-out.pdf
とtest-dual.pdf
が作成されます。
機能
PLaMo統合機能
- スマートトークン管理: テキストを自動で約1024トークンにチャンク分割
- 文境界対応分割: チャンク分割時に文の境界を保持
- 高品質翻訳: mlx-community/plamo-2-translateモデルを使用
- レイアウト保持: PDFMathTranslateを使用してオリジナルのPDFフォーマットを維持
自動機能
- トークン推定: 約4文字で1トークンとして推定
- エラーハンドリング: 翻訳失敗時の適切なフォールバック
- 進捗追跡: 大きなドキュメントの翻訳進捗を表示
- フォーマット対応: 数式や複雑なレイアウトに対応
使用例
基本的な翻訳スクリプト
1
2
3
4
5
6
7
8
9
10
11
12
13
| #!/usr/bin/env python3
import sys
sys.path.insert(0, 'PDFMathTranslate')
from pdf2zh import translate
# PLaMoを使用してPDFを翻訳
translate(
files=["input.pdf"],
output="./output",
lang_in="en", # 英語入力
lang_out="ja", # 日本語出力
service="plamo" # PLaMo翻訳を使用
)
|
コマンドライン使用
1
2
3
4
5
6
7
8
9
10
| # PDFMathTranslateディレクトリに移動
cd PDFMathTranslate
# PLaMoサービスを使用して翻訳
python -m pdf2zh.cli \
--service plamo \
--lang-in en \
--lang-out ja \
--output ../output \
../test.pdf
|
高度な使用例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| from pdf2zh import translate
# カスタム設定
translate(
files=["document.pdf"],
output="./translations",
lang_in="en",
lang_out="ja",
service="plamo:custom-model-name", # カスタムモデルを使用
thread=1, # PLaMo用シングルスレッド
ignore_cache=True, # 新規翻訳
envs={
"PLAMO_MODEL": "mlx-community/plamo-2-translate",
"PLAMO_MAX_TOKENS": "1024"
}
)
|
設定
環境変数
PLaMoの動作をカスタマイズするために以下の環境変数を設定:
1
2
| export PLAMO_MODEL="mlx-community/plamo-2-translate"
export PLAMO_MAX_TOKENS="1024"
|
モデル設定
1
2
3
4
5
6
| # 異なるPLaMoモデルを使用
service_options = [
"plamo", # デフォルトモデル
"plamo:mlx-community/plamo-2-translate", # 明示的なモデル指定
"plamo:custom-plamo-model" # カスタムモデル
]
|
動作原理
トークン管理プロセス
- テキスト抽出: PDFページからテキストを抽出
- トークン推定: トークン数を推定(約4文字 = 1トークン)
- スマートチャンク分割: 文の境界でテキストを分割
- 翻訳: MLX-LM経由でPLaMoを使用して各チャンクを翻訳
- 再構築: レイアウトを保持して翻訳テキストを再結合