サムネがコーヒーの記事は書きかけです。

翻訳を任意の回数だけ繰り返すプログラム

Pythonで使えるライブラリに、googletransというものがあったので使ってみようと思います。

ライブラリのインストール

ターミナルで以下を実行します。

pip install googletrans==4.0.0-rc1

基本的な翻訳

基本的には翻訳は以下の数行のコードで行うことができます。

from googletrans import Translator

t = Translator()
text_translated = t.translate(text, src="翻訳元の言語", dest="翻訳語の言語").text

srcおよびdestに代入する言語コードには以下のようなものがあります。

  • 日本語 ja
  • 英語 en
  • エスペラント eo
  • ドイツ語 de
  • 韓国語 ko
  • スペイン語 es
  • タイ語 th
  • ロシア語 ru
  • 繁体字 zh-TW
  • ヘブライ語 iw
  • アラビア語 ar
  • ポルトガル語 pt
  • ウクライナ後 uk
  • etc…

一般化

任意の言語を2つ選び翻訳を開始できるように、翻訳関数を一般化しておきます。

from googletrans import Translator
class Google_translator:

    def __init__(self) -> None:
        self.From = None
        self.To = None 

    def set_languages(self,From,To):
        self.From = From
        self.To = To 

    def translate(self,text):
        t = Translator()
        text_translated = t.translate(text, src=self.From, dest=self.To).text
        return text_translated

これで、任意の言語に対する翻訳クラスを呼び出せるようになりました。

日英翻訳の繰り返し

一番メジャーな英語-日本語間の翻訳を繰り返してみます。

この時、サーバーに負荷をかけないようにバッチ処理を行います。

import time 
from googletrans import Translator
class Google_translator:
    
    def __init__(self) -> None:
        self.From = None
        self.To = None 

    def set_languages(self,From,To):
        self.From = From
        self.To = To 

    def translate(self,text):
        t = Translator()
        text_translated = t.translate(text, src=self.From, dest=self.To).text
        return text_translated

import time 
english = 'en'
japanese = 'ja'
spanish = 'es'
korean = 'ko'
text = ''''''

translator = Google_translator()

def translate_text(text,From,To):
    translator = Google_translator()
    translator.set_languages(From,To)
    return translator.translate(text)

for i in range(4):
    if i == 0:
        t = translate_text(text,japanese,english)
        time.sleep(2)
        print(t)
        t = translate_text(t,english,japanese)
        time.sleep(2)
        print(t)
    else:
        t = translate_text(t,japanese,english)
        time.sleep(2)
        print(t)
        t = translate_text(t,english,japanese)
        time.sleep(2)
        print(t)

アイシュタインが言っていた名言に対して5回翻訳を繰り返してみます。

「今から20年後、あなたはやったことよりもやらなかったことを悔やむことになるだろう。そうなる前に、安穏とした港から船を出せ。自分自身の帆で貿易風を受け止めよ。真に求めるものを探求し、叶うことを願い、見出すのだ。」

5回繰り返した結果、

「Twenty years later, you regret that I did not do it than I did, and get a boat from a quiet park before you get a ship with your own sailing.
20年後、あなたは私がしたよりもそれをしなかったことを後悔し、あなたがあなた自身のセーリングで船を手に入れる前に静かな公園からボートを手に入れましょう。」

英語の翻訳時に主語の捉え方が間違われていますね。多分そこから文章がメチャクチャになって行ってます。

日英西の循環

日本語→英語→スペイン語で5回循環してみるとどうでしょうか。

「After 20 years, you regret that you did not do more than me, please put a boat from a quiet park before you put it on your property on the top of your property, Please come to you.
Después de 20 años, te arrepientes de que no hicieras más que yo, ponga un barco desde un parque tranquilo antes de que lo ponga en su propiedad en la parte superior de su propiedad, venga a usted.
20年後、あなたは私よりも何もしなかった、あなたがあなたの財産の上部のあなたの財産にそれを置く前に静かな公園からボートを入れたことを後悔してください。」

英語とスペイン語の訳はほとんど似ていますが、日英の時と意味が違いますね。

日韓亜

今度は日本語と性質が似ている韓国語を経由しながら、システムが全然違うアラビア語を経由してみます。

for i in range(4):
    if i == 0:
        t = translate_text(text,japanese,korean)
        time.sleep(2)
        print(t)
        t = translate_text(t,korean,arabic)
        time.sleep(2)
        print(t)
        t = translate_text(t,arabic,japanese)
        time.sleep(2)
        print(t)
    else:
        t = translate_text(t,japanese,korean)
        time.sleep(2)
        print(t)
        t = translate_text(t,korean,arabic)
        time.sleep(2)
        print(t)
        t = translate_text(t,arabic,japanese)
        time.sleep(2)
        print(t)

「20 년 후에 나는 내가 한 것보다 더 많은 것을 아무것도하지 않았다.
بعد عشرين سنة لم أفعل أي شيء مما فعلت.
20年後、私は私よりも何もしませんでした。」

韓国語と日本語はほとんど同じなので、言語間距離が遠いアラビア語が影響した結果のようです。

対応している言語は数十種類もあるので、10個以上の言語を経由して日本語に戻してみるのも面白いですね。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です