【Python】選択したテキストファイルを翻訳するプログラム

Pythonで自動化しよう プログラミング

とある事情で大量のテキストファイルを日本語⇔英語間で翻訳したくなったのですが、ファイルを手作業で一つ一つGoogle翻訳していると日が暮れてしまうので翻訳処理を自動化するPythonのプログラムを作成しました。

スポンサーリンク

Pythonで翻訳処理を自動化してみよう

翻訳プログラムの仕様

まず、今回のプログラムの仕様を確認しておきます。

  • テキストファイルを選択すると、その内容を翻訳した新しいファイルを同じディレクトリに作成する。
  • 翻訳処理にはGoogle翻訳のAPI(py-translator)を使う。
  • ファイルの内容が日本語なら英語に、英語なら日本語に翻訳する。
  • 翻訳できるファイルの最大サイズは1MBとする。

ソースコード

今回私が描いたソースコードは次の通りです。

import os
import io
import sys
import tkinter
from tkinter import filedialog
from py_translator import Translator

#テキストファイルを翻訳し、翻訳済みのファイルを作成するプログラム

#設定
maxSize = 1000000
addName = "-translated"

def Main():
    print("----------------------------")
    print("[日-英翻訳ファイル作成 Ver1.00]")
    print("----------------------------")

    tk = tkinter.Tk()
    tk.withdraw()

    sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

    initialDir = os.path.abspath(os.path.dirname(__file__))
    fileTypes = [('テキストファイル', '*.txt')]
    files = filedialog.askopenfilenames(filetypes = fileTypes, initialdir = initialDir)

    if len(files) > 0:
        print("翻訳処理を開始します。")

        for file in files:
            fileName = os.path.basename(file)
            beforeExt, ext = os.path.splitext(file)
            newFile = beforeExt + addName + ext
            if not os.path.isfile(newFile):
                if os.path.getsize(file) < maxSize:
                    with open(file, mode = 'rt', encoding = 'utf-8') as fileObj:
                        text = fileObj.read()
                    text = Translate(text)
                    if text != "":
                        with open(newFile, mode = 'w') as newFileObj:
                            newFileObj.write(text)
                        print("・ファイル「" + fileName + "」の翻訳に成功!翻訳済ファイルを作成しました。")
                    else:
                        print("・ファイル「" + fileName + "」の翻訳に失敗しました。対象外の言語か、内容が空白です。")
                else:
                    print("・ファイルサイズが大きすぎるため、ファイル「" + fileName + "」の翻訳を行いませんでした。")
            else:
                print("・翻訳済みファイルがフォルダ内に存在するため、ファイル「" + fileName + "」の処理をスキップしました。")

        print("すべてのファイルの処理が完了しました。")

def Translate(text):
    translator = Translator()
    detectLang = translator.detect(text)
    langType = detectLang.lang

    if 'ja' in langType:
        return translator.translate(text, dest='en').text
    elif 'en' in langType:
        return translator.translate(text, dest='ja').text
    else:
        return ""

Main()

処理の解説

Main()関数

ファイルのダイアログを表示し、ユーザーにファイルを選択してもらいます(キャンセルならそのまま終了)。

ファイルごとの処理を行います。もし翻訳済みのファイルがあれば処理をスキップし、それ以外ならファイルのテキストを読み込んで翻訳処理を行います。

翻訳処理に成功した場合は新しいファイルを作成し、翻訳したテキストを書き込みます。

Translate()関数

APIでテキスト内容の言語の判定と翻訳を行います。

Pythonでの自動化は楽しい

今回は前回の「【Python】拡張子別にファイルを整理するプログラム」より少しだけ高度なプログラムを作ることができました。欲を言えばテキストファイル以外のファイル(WordやPDF等)でも翻訳できるように改良するともっと便利になると思いますが、ひとまずこの状態でも十分便利に使えるプログラムだと思います。

それにしても、Pythonで面倒なことを自動化できると本当に楽しいですね。自動化というテーマはめんどくさがりなニートには最適だと思います。皆さんもぜひ面倒くさいことをそのままにせず、自動化できないかを考えてみてください。