Pythonで作る翻訳プログラム!初心者向け完全ガイドと10の詳細な使用例

Pythonを使った翻訳プログラムの作成ガイドPython
この記事は約25分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

今日、Pythonという言語を使って翻訳プログラムを作る方法を学びましょう。

この記事は、Python初心者向けの完全ガイドとして提供され、10個の詳細な使用例もご紹介します。

Pythonでの手動および自動の翻訳プログラム作成について詳細に解説することで、皆さんがプログラミングの基礎を理解し、翻訳プログラムを自分で作ることができるようになることを目指します。

●Pythonとは

Pythonは、コードが読みやすく、簡潔な文法を持つプログラミング言語です。

初心者にとって学びやすく、さまざまな分野で利用されています。

ウェブ開発からデータ分析、AI開発まで、その応用範囲は広範であるため、学習すればするほど役立つ知識となります。

●翻訳ツールの必要性

グローバル化が進む現代社会において、言語の壁は依然として大きな問題です。

翻訳ツールは、コミュニケーションの困難さを軽減し、異なる文化や言語の間で情報を共有する手段を提供します。

Pythonを使って自分で翻訳プログラムを作ることは、個別のニーズに応じたソリューションを提供するだけでなく、技術力を向上させる素晴らしい機会でもあります。

●Pythonで翻訳プログラムを作るための基本的な知識

Pythonで翻訳プログラムを作るためには、まずPythonの基本的な文法とテキスト処理について理解する必要があります。

○Pythonの基本文法

Pythonの文法は非常にシンプルで、他の多くの言語よりも直感的です。

変数の宣言、ループ、条件分岐、関数の定義など、Pythonの基本的な文法を理解することで、独自の翻訳プログラムを作る土台を作ることができます。

○Pythonでのテキスト処理

Pythonはテキスト処理に強力なツールを提供しています。

文字列操作、正規表現、テキストファイルの読み書きなど、Pythonのテキスト処理機能を理解することは、翻訳プログラムを作る上で不可欠なスキルです。

これから、手動および自動の翻訳プログラムの作り方と、その詳細な使用例を解説していきます。

それぞれのサンプルコードについては、詳細な説明とともに、実行結果とその解説も提供します。

これらのサンプルコードを理解し、自分で翻訳プログラムを作るためのステップを学んでいきましょう。

●Pythonでの手動翻訳プログラムの作り方

Pythonを使用して手動翻訳プログラムを作成する方法を学びます。

ここでは、ユーザーがテキストを入力し、翻訳したい言語を指定して翻訳結果を得るというプロセスを実装します。

○サンプルコード1:基本的な手動翻訳プログラム

最初に、Google翻訳を使用して翻訳を行う基本的なプログラムを作成します。

このコードでは、googletransというライブラリを使って英語のテキストを日本語に翻訳します。

# 必要なライブラリをインポート
from googletrans import Translator

# Translatorオブジェクトを生成
trans = Translator()

# 翻訳したいテキスト
text = 'Hello, World!'

# 翻訳処理(英語から日本語へ)
result = trans.translate(text, src='en', dest='ja')

# 翻訳結果の出力
print(result.text)

このコードでは、googletransのTranslatorオブジェクトを使って翻訳処理を行っています。

‘text’変数に翻訳したい英語のテキストを指定し、translate関数にて、’src’パラメータに元の言語(この場合は英語)、’dest’パラメータに目的の言語(この場合は日本語)を指定します。

そして翻訳結果を’print’関数で出力します。このコードを実行すると、「Hello, World!」が日本語に翻訳され、「こんにちは、世界!」と表示されます。

○サンプルコード2:高度な手動翻訳プログラム

次に、ユーザーからの入力に基づいてテキストを翻訳するプログラムを作成します。

ユーザーは翻訳したいテキストと目的の言語を入力できます。

from googletrans import Translator

# Translatorオブジェクトを生成
trans = Translator()

# ユーザーからの入力を受け取る
text = input('翻訳したいテキストを入力してください:')
dest = input('目的の言語(例:ja)を入力してください:')

# 翻訳処理
result = trans.translate(text, dest=dest)

# 翻訳結果の出力
print(result.text)

このプログラムでは、’input’関数を使用してユーザーからテキストと目的言語の入力を受け取ります。

その後、翻訳を行い結果を出力します。

たとえば、ユーザーがテキストに「Good morning」、目的言語に「ja」を入力すると、プログラムは「おはようございます」と出力します。

●Pythonでの自動翻訳プログラムの作り方

今回は自動翻訳プログラムの作成方法について解説します。

自動翻訳の実現には外部の翻訳サービスAPIを使用するのが一般的です。

PythonではGoogle翻訳APIなどがよく利用されますが、本記事では無料で使えるライブラリ「translate」を使用します。

translateはMicrosoftの翻訳サービスをバックエンドとして動作します。

○サンプルコード3:基本的な自動翻訳プログラム

まずは基本的な自動翻訳プログラムを作成します。

ここでは英語のテキストを日本語に翻訳する簡易なコードを見てみましょう。

from translate import Translator

# Translatorインスタンスを作成し、翻訳したい言語を指定します
translator = Translator(to_lang="ja")

def translate_text(text):
    # 翻訳メソッドを呼び出して結果を取得
    translation = translator.translate(text)
    return translation

print(translate_text("Hello, World!"))

このコードでは、translateライブラリを使って英語の”Hello, World!”を日本語に翻訳しています。

先頭でTranslatorをインスタンス化し、翻訳したい言語を指定しています。

そして、テキストを引数とする関数translate_textを定義し、その中でTranslatorインスタンスのtranslateメソッドを使ってテキストを翻訳します。

最後にその翻訳結果をprint関数で表示します。

このコードを実行すると、”Hello, World!”という英語のフレーズが日本語に翻訳されて表示されます。

○サンプルコード4:高度な自動翻訳プログラム

次に、高度な自動翻訳プログラムを作成します。

ここでは翻訳したい言語を動的に指定できるようにし、また翻訳元の言語を自動検出する機能を追加します。

from translate import Translator

def translate_text(text, target_lang='ja'):
    # 翻訳元の言語を自動検出し、翻訳先の言語を指定してTranslatorをインスタンス化
    translator = Translator(from_lang='autodetect', to_lang=target_lang)
    # 翻訳メソッドを呼び出して結果を取得
    translation = translator.translate(text)
    return translation

print(translate_text("Hello, World!", target_lang='de'))

このコードではtranslate_text関数がテキストと翻訳先の言語を引数として受け取ります。

翻訳先の言語はデフォルトで’ja’(日本語)が指定されていますが、呼び出し時に別の言語を指定することも可能です。

また、Translatorをインスタンス化する際に翻訳元の言語として’autodetect’を指定することで、翻訳元の言語を自動で検出するようにしています。

このコードを実行すると、”Hello, World!”という英語のフレーズが指定した言語(ここではドイツ語)に翻訳されて表示されます。

●Pythonでの翻訳プログラムの応用例

Pythonの翻訳プログラムは非常に多様な用途で応用することが可能です。

それぞれの具体的な用途とそのためのサンプルコードを紹介します。

新たな応用例を探求する際のヒントや、既存の問題解決の参考になれば幸いです。

○サンプルコード5:翻訳プログラムを使った多言語対応ウェブサイト

ある特定の言語で書かれたウェブサイトを、訪問者の言語に自動的に翻訳する機能は、グローバルな視点からユーザエクスペリエンスを向上させるために重要です。

次のサンプルコードは、ウェブサイトの内容を翻訳するための基本的なコードです。

このコードでは、Flaskとgoogletransを使って多言語対応ウェブサイトを作るコードを紹介しています。

この例では、ユーザからのリクエストに基づき、サーバサイドで翻訳処理を行い、結果をレスポンスとして返しています。

具体的には、訪問者のブラウザの言語設定を取得し、それを基にページの内容を翻訳します。

from flask import Flask, request, render_template
from googletrans import Translator

app = Flask(__name__)
translator = Translator()

@app.route('/')
def home():
    user_lang = request.accept_languages.best_match(['en', 'es', 'de', 'fr', 'ja'])
    page_text = "Welcome to our website!"  # 原文のテキスト
    translated_text = translator.translate(page_text, dest=user_lang).text
    return render_template('home.html', text=translated_text)  # 翻訳されたテキストを渡す

if __name__ == '__main__':
    app.run()

このサンプルコードの実行結果としては、’Welcome to our website!’という英語のテキストが、訪問者のブラウザの言語設定に基づいて自動的に翻訳され、その結果がウェブページに表示されます。

○サンプルコード6:翻訳プログラムを用いたリアルタイム翻訳チャットシステム

複数の言語を話す人々が参加するオンラインチャットでは、リアルタイムでの翻訳が非常に有用です。

このコードでは、WebSocketを用いたチャットシステムで、入力されたテキストを他の参加者の言語に翻訳するサンプルを紹介しています。

from flask import Flask, render_template
from flask_socketio import SocketIO, emit
from googletrans import Translator

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
translator = Translator()

@socketio.on('chat message')
def handle_chat_message(msg, lang):
    translated_msg = translator.translate(msg, dest=lang).text
    emit('chat message', translated_msg, broadcast=True)

if __name__ == '__main__':
    socketio.run(app)

このコードが実行されると、参加者がチャットにメッセージを送信すると、そのメッセージが他の参加者の設定言語にリアルタイムで翻訳され、その結果が各参加者のチャット画面にブロードキャストされます。

○サンプルコード7:翻訳プログラムを利用したドキュメント翻訳ツール

複数の言語に対応したドキュメントを作成する際、Pythonの翻訳プログラムを使って自動化することも可能です。

このコードでは、テキストファイルを翻訳して新たなファイルに結果を書き出す例を紹介します。

from googletrans import Translator

translator = Translator()

def translate_document(input_filepath, output_filepath, dest_lang):
    with open(input_filepath, 'r') as f:
        text = f.read()
    translated_text = translator.translate(text, dest=dest_lang).text
    with open(output_filepath, 'w') as f:
        f.write(translated_text)

translate_document('document_en.txt', 'document_ja.txt', 'ja')

このサンプルコードが実行されると、’document_en.txt’という英語のテキストファイルが日本語に翻訳され、その結果が新たに’document_ja.txt’というファイルに書き出されます。

○サンプルコード8:翻訳プログラムを活用した動画字幕作成ツール

動画コンテンツは今や情報伝達の重要な手段であり、多くのビデオプラットフォームが存在します。

しかし、全ての視聴者がコンテンツ製作者の言語を理解しているわけではありません。

そこで、翻訳プログラムを利用して字幕を作成し、動画を多言語対応にすることが考えられます。

この部分では、動画から音声を抽出し、その音声をテキストに変換し、さらにそのテキストを別の言語に翻訳するプログラムを作ります。

この例では、Pythonの「moviepy」、「SpeechRecognition」、「googletrans」などのライブラリを活用します。

# 必要なライブラリをインポート
from moviepy.editor import AudioFileClip
import speech_recognition as sr
from googletrans import Translator

# ビデオファイルからオーディオを抽出
clip = AudioFileClip('video.mp4')
clip.write_audiofile('audio.wav')

# 音声認識エンジンを作成
r = sr.Recognizer()

# 音声ファイルを開いて内容を認識
with sr.AudioFile('audio.wav') as source:
    audio_data = r.record(source)
    text = r.recognize_google(audio_data)

# 翻訳オブジェクトを作成し、テキストを翻訳
translator = Translator()
translation = translator.translate(text, dest='ja')

# 翻訳されたテキストを出力
print(translation.text)

まず、動画ファイルからオーディオを抽出します。

これは「moviepy」の「AudioFileClip」関数を使用します。次に、抽出された音声をテキストに変換します。

これは「speech_recognition」ライブラリの「Recognizer」クラスと「AudioFile」関数を使います。

最後に、得られたテキストを指定した言語(この場合は日本語)に翻訳します。

これは「googletrans」ライブラリの「Translator」クラスと「translate」メソッドを使用します。

○サンプルコード9:翻訳プログラムを用いた論文要約作成ツール

研究者や学生など、多くの人々が日々膨大な量の論文を読み解く必要があります。

しかし、全ての論文が自分の母国語で書かれているわけではありません。

そこで、論文の要約を自動的に作成し、それを翻訳するプログラムが有用になります。

この部分では、Pythonの「nltk」、「bs4」、「requests」、「googletrans」などのライブラリを活用します。

# 必要なライブラリをインポート
import bs4 as bs
import urllib.request
import re
import nltk
from googletrans import Translator
nltk.download('punkt')

# 論文のURLを指定
url = "https://arxiv.org/abs/1708.03748"

# 論文を取得して要約を抽出
scraped_data = urllib.request.urlopen(url)
article = scraped_data.read()

parsed_article = bs.BeautifulSoup(article,'lxml')
paragraphs = parsed_article.find_all('p')
article_text = ""

for p in paragraphs:
    article_text += p.text

# 論文の要約を作成
sentence_list = nltk.sent_tokenize(article_text)
stopwords = nltk.corpus.stopwords.words('english')

word_frequencies = {}
for word in nltk.word_tokenize(article_text):
    if word not in stopwords:
        if word not in word_frequencies.keys():
            word_frequencies[word] = 1
        else:
            word_frequencies[word] += 1

maximum_frequncy = max(word_frequencies.values())
for word in word_frequencies.keys():
    word_frequencies[word] = (word_frequencies[word]/maximum_frequncy)

sentence_scores = {}
for sent in sentence_list:
    for word in nltk.word_tokenize(sent.lower()):
        if word in word_frequencies.keys():
            if len(sent.split(' ')) < 30:
                if sent not in sentence_scores.keys():
                    sentence_scores[sent] = word_frequencies[word]
                else:
                    sentence_scores[sent] += word_frequencies[word]

import heapq
summary_sentences = heapq.nlargest(7, sentence_scores, key=sentence_scores.get)
summary = ' '.join(summary_sentences)

# 翻訳オブジェクトを作成し、要約を翻訳
translator = Translator()
translation = translator.translate(summary, dest='ja')

# 翻訳された要約を出力
print(translation.text)

まず、指定されたURLのウェブページを取得します。

これは「urllib.request」の「urlopen」関数を使用します。

次に、「bs4」ライブラリの「BeautifulSoup」クラスを使用してHTMLを解析し、記事のテキストを抽出します。抽出したテキストから要約を作成します。

これは「nltk」ライブラリの「sent_tokenize」、「word_tokenize」関数、および「stopwords」を使用します。

最後に、得られた要約を指定した言語(この場合は日本語)に翻訳します。

これは「googletrans」ライブラリの「Translator」クラスと「translate」メソッドを使用します。

○サンプルコード10:翻訳プログラムを活用した多言語対応音声アシスタント

次にご紹介するのは、翻訳プログラムを用いて多言語に対応した音声アシスタントを作成する方法です。

ここでの目標は、Pythonで音声をテキストに変換し、そのテキストを別の言語に翻訳し、その結果を音声で出力することです。

このアプリケーションは、異なる言語を話すユーザーがコミュニケーションを取る手助けとなるでしょう。

具体的なコード例を見てみましょう。

import speech_recognition as sr
from googletrans import Translator
from gtts import gTTS
import os

# 音声認識のインスタンスを生成
r = sr.Recognizer()

# 音声ファイルを読み込む
with sr.Microphone() as source:
    print("何か話してください:")
    audio = r.listen(source)

# 音声をテキストに変換
text = r.recognize_google(audio, language='ja')

# 翻訳
translator = Translator()
translated = translator.translate(text, dest='en')

# テキストを音声に変換して保存
speech = gTTS(text=translated.text, lang='en', slow=False)
speech.save("output.mp3")

# 音声を再生
os.system("start output.mp3")

このコードでは、speech_recognitionモジュールを使って音声をテキストに変換します。

次に、googletransライブラリを使用して、そのテキストを英語に翻訳します。

そして、gttsライブラリを使って翻訳されたテキストを音声に変換し、その音声を再生します。

なお、この例では、日本語の音声を英語に翻訳していますが、recognize_googleメソッドとtranslateメソッドのlanguageパラメータを変更することで、他の任意の言語に対応することが可能です。

コードの実行結果は、入力として与えられた音声をテキストに変換し、そのテキストを英語に翻訳し、その翻訳結果を音声で出力する、という流れになります。

この例ではコマンドラインから実行するため、「何か話してください:」というプロンプトが表示され、そこで音声入力を待つ状態になります。

その後、音声入力がテキストに変換され、翻訳され、音声出力として得られる流れとなります。

●翻訳プログラム作成の注意点と対処法

Pythonを使用して翻訳プログラムを作成する際に注意すべきポイントとその対処法を説明します。

これらのポイントを理解し、対処法を適切に活用することで、エラーや問題に直面したときにもスムーズにプログラムを作成することができます。

①APIキーの保護

多くの翻訳APIはAPIキーを使用します。

このキーは重要な認証情報であり、不適切に公開するとセキュリティ上の問題を引き起こす可能性があります。

APIキーは秘密に保たなければならないため、コード内に直接記述するのではなく、環境変数や設定ファイルを使用して管理しましょう。

②翻訳APIの制限

翻訳APIは大抵、一定期間内のリクエスト数に制限を設けています。

制限を超えると、一時的にAPIを使用できなくなるか、追加料金が発生する可能性があります。

そのため、APIの使用状況を常にモニタリングし、APIの使用量を適切に管理することが重要です。

③ネットワークエラーの対応

APIはインターネットを介して通信します。

そのため、ネットワークエラーが発生した場合、APIのリクエストが失敗する可能性があります。

このような状況に対処するためには、例外処理を適切に実装し、APIリクエストが失敗した場合でもプログラムが適切に動作するようにすることが必要です。

それぞれの注意点に対する対処法を具体的なコードで紹介します。

まず、APIキーの保護については次のようなコードを用いることができます。

import os
from googletrans import Translator

# 環境変数からAPIキーを取得
api_key = os.getenv("TRANSLATION_API_KEY")

# APIキーを使用してTranslatorのインスタンスを作成
translator = Translator(api_key=api_key)

# 翻訳処理
translated = translator.translate("こんにちは", dest='en')
print(translated.text)

このコードでは、osモジュールのgetenv関数を使って環境変数からAPIキーを取得しています。

そして、そのAPIキーを使ってgoogletransライブラリのTranslatorのインスタンスを作成しています。

また、APIリクエストに対する例外処理は次のように実装できます。

import requests
from googletrans import Translator

# Translatorのインスタンスを作成
translator = Translator()

try:
    # 翻訳処理
    translated = translator.translate("こんにちは", dest='en')
    print(translated.text)
except requests.exceptions.RequestException as e:
    # リクエストエラーが発生した場合の処理
    print(f"APIリクエストエラーが発生しました: {e}")

このコードでは、try/exceptブロックを使って例外処理を実装しています。

もしAPIリクエスト中にエラーが発生した場合、それはrequests.exceptions.RequestExceptionとして捕捉され、エラーメッセージが出力されます。

●Python翻訳プログラムのカスタマイズ方法

Pythonで作成した翻訳プログラムは、独自の機能を追加することで様々な用途に応用することが可能です。

ここでは、一部のカスタマイズ例を紹介し、その実装方法について詳しく解説します。

①複数言語への一括翻訳

翻訳対象のテキストを複数の言語に一度に翻訳する機能を追加することができます。これにより、一度に多言語の翻訳結果を得ることが可能になります。

②翻訳結果の保存

翻訳結果をテキストファイルやデータベースに保存する機能を追加することで、後から翻訳結果を参照したり、他のプログラムで翻訳結果を利用したりすることができます。

③自動翻訳のスケジューリング

一定の間隔で自動的に翻訳を行う機能を追加することができます。

これにより、定期的な情報更新が必要なウェブサイトやアプリケーションに対して、翻訳作業を自動化することができます。

それぞれのカスタマイズ例について、具体的なコードを示し解説します。

まず、複数言語への一括翻訳機能の実装方法は次のようになります。

from googletrans import Translator

# Translatorのインスタンスを作成
translator = Translator()

# 翻訳対象のテキスト
text = "こんにちは"

# 翻訳したい言語のリスト
languages = ['en', 'fr', 'de', 'es', 'it']

# 各言語への翻訳結果を保存する辞書
translations = {}

for lang in languages:
    # 各言語へ翻訳
    translation = translator.translate(text, dest=lang)
    # 翻訳結果を辞書に保存
    translations[lang] = translation.text

# 翻訳結果の表示
for lang, trans in translations.items():
    print(f"{lang}: {trans}")

このコードでは、まず翻訳したい言語のリストを作成しています。

その後、各言語への翻訳を行い、その結果を辞書に保存しています。

最後に、各言語への翻訳結果を表示しています。

次に、翻訳結果の保存機能の実装方法は次の通りです。

from googletrans import Translator

# Translatorのインスタンスを作成
translator = Translator()

# 翻訳対象のテキスト
text = "こんにちは"

# 英語への翻訳
translation = translator.translate(text, dest='en')

# 翻訳結果をテキストファイルに保存
with open('translation.txt', 'w') as f:
    f.write(translation.text)

このコードでは、with open文を用いて、翻訳結果を’translation.txt’という名前のテキストファイルに書き込んでいます。

ファイルへの書き込みが終了したら、with open文が自動的にファイルを閉じるため、安全に翻訳結果を保存できます。

最後に、自動翻訳のスケジューリング機能の実装については、scheduleというライブラリを使用します。

scheduleライブラリを使用すると、特定のタスクを一定の間隔で実行するスケジューリングを簡単に実装することができます。

import schedule
import time
from googletrans import Translator

# 翻訳対象のテキスト
text = "こんにちは"

def job():
    # Translatorのインスタンスを作成
    translator = Translator()
    # 英語への翻訳
    translation = translator.translate(text, dest='en')
    # 翻訳結果を表示
    print(translation.text)

# 毎日12時にjobを実行
schedule.every().day.at("12:00").do(job)

# 無限ループ内でスケジューリングを実行
while True:
    schedule.run_pending()
    time.sleep(1)

このコードでは、まず翻訳を行うjobという関数を定義しています。

そして、`schedule.every().day.at(“12:00”).do(job)というコードで、毎日12時にjob関数が実行されるようにスケジューリングしています。

最後のwhile Trueループでは、schedule.run_pending()を呼び出して、予定されているタスク(この場合はjob`関数)が実行時刻を迎えたら実行するようにしています。

以上、Pythonを用いた翻訳プログラムのカスタマイズ方法について、具体的なコードとともに詳しく解説しました。

これらの方法を活用することで、Pythonで作った翻訳プログラムを更に強力で便利なものにすることができます。

まとめ

本記事では、Pythonを用いて翻訳プログラムを作成し、そのカスタマイズ方法について詳しく解説しました。

具体的なコードとともに、複数言語への一括翻訳、翻訳結果の保存、自動翻訳のスケジューリングといったカスタマイズ例を紹介しました。

これらのカスタマイズ方法を活用することで、Pythonで作った翻訳プログラムを更に強力で便利なものにすることができます。

初心者でも安心してチャレンジできる内容となっていますので、ぜひ試してみてください。