Pythonで英文のPDFをレイアウトを維持したまま翻訳してみる

Pythonで英文のPDFをレイアウトを維持したままの翻訳を実装します.

今回はGoogle ColabとGoogle Driveを連携させて,notebook形式で実行してます.

Google Colaboratory(以下Google Colab)は、Google社が無料で提供している機械学習の教育や研究用の開発環境です。開発環境はJupyter Notebookに似たインターフェースを持ち、Pythonの主要なライブラリがプリインストールされています。
引用元:Google Colabの使い方 (opens new window)

全国630店舗以上!もみほぐし・足つぼ・ハンドリフレ・クイックヘッドのリラクゼーション店【りらくる】

# Google Colabのファイル構成

プロジェクトディレクトリはpdf_translateとしています.度々,省略しています.

pdf_translate
├── /pdf_translate
│   ├── translate_csv.py <- 翻訳前後をcsv化
│   ├── pdf_translate.sh <- 実行スクリプト
│   ├── AttentionGAN.pdf <- 翻訳前
│   ├── JA_AttentionGAN.pdf <- 翻訳後
│   ├── AttentionGAN.pdf.csv <- 翻訳前後csv
│   ├── AttentionGAN.pdf.json  <- pdf情報のjson
│   └── (省略)
└── pdf_translate.ipynb <- 実行用ノートブック

# Google Driveと連携

Google ColabとGoogle Driveを連携させて,gitからmima3/pdf_translate (opens new window)をダウンロードします.

# Google ColabとGoogle Driveを連携
from google.colab import drive
drive.mount('/content/drive')
%%bash
# ディレクトリの移動
cd /content/drive/My\ Drive/PDF_transrate
# gitのダウンロード
git clone https://github.com/mima3/pdf_translate.git
ls

# モジュールのインストール

下記のコマンドでモジュールをインストールします.

!pip install googletrans==4.0.0-rc1
!pip install fitz
!pip install PyMuPDF==1.16.14

# 翻訳実行

# コードの作成

個人的にcsvとして翻訳結果も残したいので,下記のコードを作成します.

# translate_csv.pyの書き込み
%%writefile translate_csv.py

import sys
import time
import random
import pandas as pd
from googletrans import Translator

def main(input_path):
  argvs = sys.argv
  argc = len(argvs)
  if argc != 2:
      print("Usage #python %s [PDFパス]" % argvs[0])
      exit()
  input_path = argvs[1]
  df = pd.read_csv(input_path, names=('org_text', 'convert_text'))
  
  for i in range(len(df)):
      org_text = df['org_text'][i].replace('.', '. ')
      print(org_text)
      df['convert_text'][i] = Translator().translate(org_text, dest="ja").text
      
  df.to_csv(input_path, header=False, index=False)

if __name__ == '__main__':
  main(sys.argv)

# シェルスクリプトファイルの作成

下記のコマンドでシェルスクリプトファイルの作成します.

# pdf_translate.shの書き込み
%%writefile pdf_translate.sh
#!/bin/sh
python ./analyze_pdf_text.py "$1"
python ./translate_csv.py "$1.csv"
python ./embed_annots.py "$1.json" "JA_$1"

# rm "$1.csv" "$1.json"

# 翻訳実行

下記のコマンドで翻訳を実行します.

!sh pdf_translate.sh AttentionGAN.pdf

# まとめ

Pythonで英文のPDFをレイアウトを維持したままの翻訳を実装しました.

ただし,あまりに大量に翻訳すると,Googleから怒られて1日中翻訳できなくなるので,別のモデルを使ってより多くの翻訳ができるようにします.

※Adobe Acrobat Readerで閲覧してください。ブラウザ経由だと注釈が文字化けします。

# 参考サイト

mima3/pdf_translate (opens new window)

PythonでPDFのレイアウトを維持したまま翻訳してみる (opens new window)

yta-git/pdf_translate (opens new window)

【python】googletransの『AttributeError: 'NoneType' object has no attribute 'group'』対策 (opens new window)

# エラー集

# エラーコード1

File "./embed_annots.py", line 2, in <module>
    import fitz
ModuleNotFoundError: No module named 'fitz'

下記のモジュールをインストールしてください.

!pip install fitz
!pip install PyMuPDF==1.16.14

# エラーコード2

AttributeError: 'NoneType' object has no attribute 'group'

一度googletransを消して,googletrans==4.0.0-rc1とversion指定してインストールする.

pip uninstall -y googletrans
pip install googletrans==4.0.0-rc1

tensorflow2系に存在しないコードを使おうとしているので,tensorflow1系にダウングレードする必要がある.

全国630店舗以上!もみほぐし・足つぼ・ハンドリフレ・クイックヘッドのリラクゼーション店【りらくる】

Pythonで英文をTransformer(BERT)で翻訳してみる

Pythonで英文をTransformer(BERT)で翻訳してみる

Pythonで英文をTransformer(BERT)での翻訳を実施します.

データ可視化ライブラリ Altairを使ってみる(時系列データ編)

データ可視化ライブラリ Altairを使ってみる(時系列データ編)

時系列データでのデータ可視化ライブラリ Altair を使ってみる.