[Python] PDFを読み込んでGoogle翻訳して結果をファイルに出力する方法
PythonでPDFを読み込み、Google翻訳を使用して翻訳結果をファイルに出力するには、以下の手順を踏みます。 まず、 PyPDF2 や pdfplumber などのライブラリを使ってPDFからテキストを抽出します。 次に、 googletrans ライブラリを使用してテキストを翻訳します。 最後に、翻訳結果をファイルに書き出すために、標準のファイル操作( open関数 など)を使います。 Google翻訳APIを使用する場合は、APIキーが必要です。
- PDFからテキストを抽出する方法
- PyPDF2を使ったPDFの読み込み
- pdfplumberを使ったPDFの読み込み
- PDFのテキスト抽出時の注意点
- 複数ページのPDFを処理する方法
- 画像ベースのPDFに対するOCRの利用
- Google翻訳APIの利用方法
- googletransライブラリのインストール
- Google Cloud Translation APIの利用準備
- APIキーの取得方法
- googletransを使った翻訳の基本
- 大量のテキストを翻訳する際の注意点
- 翻訳結果の言語指定方法
- PDFテキストの翻訳処理
- PDFから抽出したテキストを翻訳する
- テキストの分割と翻訳の効率化
- 翻訳結果の整形とエラーハンドリング
- 翻訳結果をファイルに保存する方法
- 翻訳結果をPDFに再出力する方法
- ファイル操作と出力
- テキストファイルへの書き出し
- CSVファイルへの書き出し
- JSON形式での保存方法
- 翻訳結果をPDFに保存する方法
- ファイル操作時のエンコーディングの注意点
- 応用例
- 複数のPDFを一括で翻訳する方法
- 特定のページやセクションのみを翻訳する方法
- 翻訳結果をGUIで表示するアプリケーションの作成
- 翻訳結果をメールで送信する方法
- 翻訳結果をWebアプリケーションに組み込む方法
- まとめ
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はセキュリティ設定が施されており、テキストの抽出が制限されていることがあります。
以下は、 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を有効にする必要があります。
- Google Cloud Consoleにログインします。
- 新しいプロジェクトを作成します。
- 「APIとサービス」から「ライブラリ」を選択し、 Cloud Translation API を検索して有効にします。
- Google Cloud Consoleで「APIとサービス」から「認証情報」を選択します。
- 「認証情報を作成」ボタンをクリックし、「APIキー」を選択します。
- 生成されたAPIキーをコピーして、後で使用します。
- APIの制限: Google翻訳APIには、1日のリクエスト数に制限があります。
- 翻訳の精度: 大量のテキストを翻訳する際、文脈によって翻訳結果が異なる場合があります。
- エラーハンドリング: APIの呼び出し時にエラーが発生する可能性があるため、適切なエラーハンドリングを実装することが重要です。
このように、 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)
- PDFからテキストを抽出する方法
- PyPDF2を使ったPDFの読み込み
- pdfplumberを使ったPDFの読み込み
- PDFのテキスト抽出時の注意点
- 複数ページのPDFを処理する方法
- 画像ベースのPDFに対するOCRの利用
- Google翻訳APIの利用方法
- googletransライブラリのインストール
- Google Cloud Translation APIの利用準備
- APIキーの取得方法
- googletransを使った翻訳の基本
- 大量のテキストを翻訳する際の注意点
- 翻訳結果の言語指定方法
- PDFテキストの翻訳処理
- PDFから抽出したテキストを翻訳する
- テキストの分割と翻訳の効率化
- 翻訳結果の整形とエラーハンドリング
- 翻訳結果をファイルに保存する方法
- 翻訳結果をPDFに再出力する方法
- ファイル操作と出力
- テキストファイルへの書き出し
- CSVファイルへの書き出し
- JSON形式での保存方法
- 翻訳結果をPDFに保存する方法
- ファイル操作時のエンコーディングの注意点
- 応用例
- 複数のPDFを一括で翻訳する方法
- 特定のページやセクションのみを翻訳する方法
- 翻訳結果をGUIで表示するアプリケーションの作成
- 翻訳結果をメールで送信する方法
- 翻訳結果をWebアプリケーションに組み込む方法
- まとめ