. Python PDFを読み込んでGoogle翻訳して結果をファイルに出力する方法
Python PDFを読み込んでGoogle翻訳して結果をファイルに出力する方法
Python PDFを読み込んでGoogle翻訳して結果をファイルに出力する方法

[Python] PDFを読み込んでGoogle翻訳して結果をファイルに出力する方法

PythonでPDFを読み込み、Google翻訳を使用して翻訳結果をファイルに出力するには、以下の手順を踏みます。 まず、 PyPDF2 や pdfplumber などのライブラリを使ってPDFからテキストを抽出します。 次に、 googletrans ライブラリを使用してテキストを翻訳します。 最後に、翻訳結果をファイルに書き出すために、標準のファイル操作( open関数 など)を使います。 Google翻訳APIを使用する場合は、APIキーが必要です。

  1. PDFからテキストを抽出する方法
    • PyPDF2を使ったPDFの読み込み
    • pdfplumberを使ったPDFの読み込み
    • PDFのテキスト抽出時の注意点
    • 複数ページのPDFを処理する方法
    • 画像ベースのPDFに対するOCRの利用
  2. Google翻訳APIの利用方法
    • googletransライブラリのインストール
    • Google Cloud Translation APIの利用準備
    • APIキーの取得方法
    • googletransを使った翻訳の基本
    • 大量のテキストを翻訳する際の注意点
    • 翻訳結果の言語指定方法
  3. PDFテキストの翻訳処理
    • PDFから抽出したテキストを翻訳する
    • テキストの分割と翻訳の効率化
    • 翻訳結果の整形とエラーハンドリング
    • 翻訳結果をファイルに保存する方法
    • 翻訳結果をPDFに再出力する方法
  4. ファイル操作と出力
    • テキストファイルへの書き出し
    • CSVファイルへの書き出し
    • JSON形式での保存方法
    • 翻訳結果をPDFに保存する方法
    • ファイル操作時のエンコーディングの注意点
  5. 応用例
    • 複数のPDFを一括で翻訳する方法
    • 特定のページやセクションのみを翻訳する方法
    • 翻訳結果をGUIで表示するアプリケーションの作成
    • 翻訳結果をメールで送信する方法
    • 翻訳結果をWebアプリケーションに組み込む方法
  6. まとめ

PDFからテキストを抽出する方法

PyPDF2を使ったPDFの読み込み import PyPDF2 # PDFファイルを開く with open('sample.pdf', 'rb') as file: reader = PyPDF2.PdfReader(file) text = '' # 各ページからテキストを抽出 for page in range(len(reader.pages)): text += reader.pages[page].extract_text() + '\n' print(text) ページ1のテキスト ページ2のテキスト . pdfplumberを使ったPDFの読み込み import pdfplumber # PDFファイルを開く with pdfplumber.open('sample.pdf') as pdf: text = '' # 各ページからテキストを抽出 for page in pdf.pages: text += page.extract_text() + '\n' print(text) ページ1のテキスト ページ2のテキスト . PDFのテキスト抽出時の注意点
  • フォントの埋め込み: PDF内のフォントが埋め込まれている場合、テキストが正しく抽出できないことがあります。
  • レイアウトの複雑さ: 複雑なレイアウトやカラムがある場合、テキストが正しく抽出されないことがあります。
  • セキュリティ設定: 一部のPDFはセキュリティ設定が施されており、テキストの抽出が制限されていることがあります。
複数ページのPDFを処理する方法

以下は、 PyPDF2 を使用した例です。

import PyPDF2 # PDFファイルを開く with open('sample.pdf', 'rb') as file: reader = PyPDF2.PdfReader(file) text = '' # 各ページからテキストを抽出 for page in range(len(reader.pages)): text += reader.pages[page].extract_text() + '\n' print(text) ページ1のテキスト ページ2のテキスト . 画像ベースのPDFに対するOCRの利用 import pdf2image import pytesseract # PDFを画像に変換 images = pdf2image.convert_from_path('sample.pdf') text = '' # 各画像からテキストを抽出 for image in images: text += pytesseract.image_to_string(image, lang='jpn') + '\n' print(text) ページ1のテキスト ページ2のテキスト .

Google翻訳APIの利用方法

googletransライブラリのインストール pip install googletrans==4.0.0-rc1 Google Cloud Translation APIの利用準備

Google Cloud Translation APIを利用するためには、Google Cloud Platform(GCP)でプロジェクトを作成し、APIを有効にする必要があります。

  1. Google Cloud Consoleにログインします。
  2. 新しいプロジェクトを作成します。
  3. 「APIとサービス」から「ライブラリ」を選択し、 Cloud Translation API を検索して有効にします。
APIキーの取得方法
  1. Google Cloud Consoleで「APIとサービス」から「認証情報」を選択します。
  2. 「認証情報を作成」ボタンをクリックし、「APIキー」を選択します。
  3. 生成されたAPIキーをコピーして、後で使用します。
googletransを使った翻訳の基本 from googletrans import Translator # Translatorオブジェクトを作成 translator = Translator() # 翻訳したいテキスト text = "こんにちは、世界!" # 翻訳を実行 translated = translator.translate(text, dest='en') print(translated.text) Hello, World! 大量のテキストを翻訳する際の注意点
  • APIの制限: Google翻訳APIには、1日のリクエスト数に制限があります。
  • 翻訳の精度: 大量のテキストを翻訳する際、文脈によって翻訳結果が異なる場合があります。
  • エラーハンドリング: APIの呼び出し時にエラーが発生する可能性があるため、適切なエラーハンドリングを実装することが重要です。
翻訳結果の言語指定方法 from googletrans import Translator # Translatorオブジェクトを作成 translator = Translator() # 翻訳したいテキスト text = "こんにちは、世界!" # 翻訳を実行(フランス語に指定) translated = translator.translate(text, dest='fr') print(translated.text) Bonjour le monde!

このように、 dest パラメータを使って翻訳先の言語を指定することができます。

PDFテキストの翻訳処理

PDFから抽出したテキストを翻訳する

ここでは、 PyPDF2 を使ってPDFからテキストを抽出し、 googletrans を使って翻訳します。

import PyPDF2 from googletrans import Translator # PDFファイルを開く with open('sample.pdf', 'rb') as file: reader = PyPDF2.PdfReader(file) translator = Translator() translated_text = '' # 各ページからテキストを抽出し翻訳 for page in range(len(reader.pages)): text = reader.pages[page].extract_text() translated = translator.translate(text, dest='en') # 英語に翻訳 translated_text += translated.text + '\n' print(translated_text) ページ1の翻訳されたテキスト ページ2の翻訳されたテキスト . テキストの分割と翻訳の効率化 def split_text(text, max_length=5000): # テキストを指定した長さで分割 return [text[i:i + max_length] for i in range(0, len(text), max_length)] # PDFから抽出したテキストを分割 text_chunks = split_text(translated_text) # 各チャンクを翻訳 for chunk in text_chunks: translated = translator.translate(chunk, dest='en') print(translated.text) 翻訳結果の整形とエラーハンドリング try: translated = translator.translate(chunk, dest='en') formatted_text = translated.text.replace('\n', ' ').strip() # 改行をスペースに置換 print(formatted_text) except Exception as e: print(f"翻訳中にエラーが発生しました: ") 翻訳結果をファイルに保存する方法 with open('translated_text.txt', 'w', encoding='utf-8') as f: f.write(translated_text)

このコードを使うことで、翻訳結果を translated_text.txt というファイルに保存できます。

翻訳結果をPDFに再出力する方法

翻訳結果をPDFに再出力するには、 reportlab ライブラリを使用します。

from reportlab.lib.pagesizes import letter from reportlab.pdfgen import canvas # PDFファイルを作成 c = canvas.Canvas("translated_output.pdf", pagesize=letter) width, height = letter # 翻訳結果をPDFに書き込む y = height - 40 # 初期Y座標 for line in translated_text.split('\n'): c.drawString(40, y, line) y -= 15 # 行間を調整 c.save()

このコードでは、翻訳結果を translated_output.pdf というPDFファイルに保存します。

ファイル操作と出力

テキストファイルへの書き出し translated_text = "翻訳されたテキストの例です。" # テキストファイルに書き出し with open('translated_text.txt', 'w', encoding='utf-8') as f: f.write(translated_text)

このコードでは、 translated_text.txt というファイルに翻訳結果をUTF-8エンコーディングで保存しています。

CSVファイルへの書き出し import csv # 翻訳結果のリスト translated_results = [ ["原文", "翻訳文"], ["こんにちは", "Hello"], ["さようなら", "Goodbye"] ] # CSVファイルに書き出し with open('translated_results.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) writer.writerows(translated_results)

このコードでは、 translated_results.csv というファイルに原文と翻訳文を表形式で保存しています。

JSON形式での保存方法 import json # 翻訳結果の辞書 translated_dict = < "こんにちは": "Hello", "さようなら": "Goodbye" ># JSONファイルに書き出し with open('translated_results.json', 'w', encoding='utf-8') as f: json.dump(translated_dict, f, ensure_ascii=False, indent=4)

このコードでは、 translated_results.json というファイルに翻訳結果をJSON形式で保存しています。

翻訳結果をPDFに保存する方法

翻訳結果をPDFに保存するには、 reportlab ライブラリを使用します。

from reportlab.lib.pagesizes import letter from reportlab.pdfgen import canvas # PDFファイルを作成 c = canvas.Canvas("translated_output.pdf", pagesize=letter) width, height = letter # 翻訳結果をPDFに書き込む translated_text = "翻訳されたテキストの例です。" y = height - 40 # 初期Y座標 for line in translated_text.split('\n'): c.drawString(40, y, line) y -= 15 # 行間を調整 c.save()

このコードでは、翻訳結果を translated_output.pdf というPDFファイルに保存します。

ファイル操作時のエンコーディングの注意点
  • UTF-8の使用: 日本語を含むテキストを扱う場合、 encoding='utf-8' を指定することで、文字化けを防ぐことができます。
  • プラットフォーム依存: WindowsとUnix系(Linux、macOS)では、デフォルトのエンコーディングが異なる場合があります。
  • ファイルの読み書き: ファイルを開く際は、読み込みモード 'r' や書き込みモード 'w' を適切に指定し、必要に応じて newline='' を指定することで、改行コードの扱いを制御できます。

応用例

複数のPDFを一括で翻訳する方法 import os import PyPDF2 from googletrans import Translator # PDFファイルが格納されているディレクトリ pdf_directory = 'pdf_files' translator = Translator() # ディレクトリ内のPDFファイルを一括処理 for filename in os.listdir(pdf_directory): if filename.endswith('.pdf'): with open(os.path.join(pdf_directory, filename), 'rb') as file: reader = PyPDF2.PdfReader(file) translated_text = '' for page in range(len(reader.pages)): text = reader.pages[page].extract_text() translated = translator.translate(text, dest='en') translated_text += translated.text + '\n' # 翻訳結果をファイルに保存 with open(f'translated_', 'w', encoding='utf-8') as f: f.write(translated_text) 特定のページやセクションのみを翻訳する方法 import PyPDF2 from googletrans import Translator # 翻訳したいPDFファイルとページ番号 pdf_file = 'sample.pdf' pages_to_translate = [0, 2] # 0-indexedでページ1とページ3を指定 translator = Translator() translated_text = '' with open(pdf_file, 'rb') as file: reader = PyPDF2.PdfReader(file) for page in pages_to_translate: text = reader.pages[page].extract_text() translated = translator.translate(text, dest='en') translated_text += translated.text + '\n' print(translated_text) 翻訳結果をGUIで表示するアプリケーションの作成

Pythonの tkinter ライブラリを使用して、翻訳結果をGUIで表示するアプリケーションを作成できます。

import tkinter as tk from googletrans import Translator def translate_text(): text = input_text.get("1.0", tk.END) translated = translator.translate(text, dest='en') output_text.delete("1.0", tk.END) output_text.insert(tk.END, translated.text) translator = Translator() # GUIの設定 root = tk.Tk() root.title("翻訳アプリ") input_text = tk.Text(root, height=10, width=50) input_text.pack() translate_button = tk.Button(root, text="翻訳", command=translate_text) translate_button.pack() output_text = tk.Text(root, height=10, width=50) output_text.pack() root.mainloop() 翻訳結果をメールで送信する方法

翻訳結果をメールで送信するには、 smtplib ライブラリを使用します。

import smtplib from email.mime.text import MIMEText # メール送信設定 sender_email = "your_email@example.com" receiver_email = "recipient@example.com" password = "your_password" # 翻訳結果 translated_text = "翻訳されたテキストの例です。" # メールの作成 msg = MIMEText(translated_text) msg['Subject'] = '翻訳結果' msg['From'] = sender_email msg['To'] = receiver_email # メール送信 with smtplib.SMTP('smtp.example.com', 587) as server: server.starttls() server.login(sender_email, password) server.send_message(msg) 翻訳結果をWebアプリケーションに組み込む方法 from flask import Flask, request, render_template from googletrans import Translator app = Flask(__name__) translator = Translator() @app.route('/', methods=['GET', 'POST']) def index(): translated_text = '' if request.method == 'POST': text = request.form['text'] translated = translator.translate(text, dest='en') translated_text = translated.text return render_template('index.html', translated_text=translated_text) if __name__ == '__main__': app.run(debug=True)

まとめ

URLをコピー URLをコピーしました 2025-04-15 更新日: 2025-04-15 関連記事 [Python] スプレッドシートのデータを読み込む方法 [Python] gspreadを使ったスプレッドシート基本操作 [Python] スプレッドシートにリストやタプルを書き込む方法 [Python] スプレッドシートにデータを出力する方法 [Python] スプレッドシートのセルを取得する方法 [Python] スプレッドシートの処理を自動化する方法 [Python] スプレッドシートを作成する方法 [Python] スプレッドシートから最終行を取得する方法 [Python] Webページをスクレイピングした結果をスプレッドシートに出力する方法 [Python] スプレッドシートでシートやセルをコピーする方法
  • データベース (9)
  • Microsoft Office (28)
  • NumPy (52)
  • Google (21)
  • Pandas (54)
こちらも読まれています
  1. PDFからテキストを抽出する方法
    • PyPDF2を使ったPDFの読み込み
    • pdfplumberを使ったPDFの読み込み
    • PDFのテキスト抽出時の注意点
    • 複数ページのPDFを処理する方法
    • 画像ベースのPDFに対するOCRの利用
  2. Google翻訳APIの利用方法
    • googletransライブラリのインストール
    • Google Cloud Translation APIの利用準備
    • APIキーの取得方法
    • googletransを使った翻訳の基本
    • 大量のテキストを翻訳する際の注意点
    • 翻訳結果の言語指定方法
  3. PDFテキストの翻訳処理
    • PDFから抽出したテキストを翻訳する
    • テキストの分割と翻訳の効率化
    • 翻訳結果の整形とエラーハンドリング
    • 翻訳結果をファイルに保存する方法
    • 翻訳結果をPDFに再出力する方法
  4. ファイル操作と出力
    • テキストファイルへの書き出し
    • CSVファイルへの書き出し
    • JSON形式での保存方法
    • 翻訳結果をPDFに保存する方法
    • ファイル操作時のエンコーディングの注意点
  5. 応用例
    • 複数のPDFを一括で翻訳する方法
    • 特定のページやセクションのみを翻訳する方法
    • 翻訳結果をGUIで表示するアプリケーションの作成
    • 翻訳結果をメールで送信する方法
    • 翻訳結果をWebアプリケーションに組み込む方法
  6. まとめ
📎📎📎📎📎📎📎📎📎📎