【python】英文pdfの改行を消して自動翻訳するアプリ作ってみた

プログラミング

こんにちは

英文をコピペしてGoogle翻訳に入れると改行が変なところに入って変な訳になってしまったことはないでしょうか。

例えばこんな感じ

なんかおかしい訳ですね。笑

これをどうにかしようとpythonとtkinterを使って翻訳アプリを作ってみました。

実際に作るとなるといろいろ大変だったので、作り方を紹介したいと思います。

スポンサーリンク

流れ

大まかな流れとしては次の通りです。

tkinterで作ったテキストエリアにコピペされた英文を読み込む
⬇︎
pythonが動き英文を日本語に翻訳(googletransを使用)さらに改行を取り除く
⬇︎
翻訳した日本文をtkinterを別のテキストエリアに出力

という感じです。

tkinterとは

tkinterとはpythonでGUIを制作できるライブラリです。

これを使って原文の英語を入力したり、翻訳した日本文を表示したりします。

tkinterのインストール

pythonをインストールしたら自動的にインストールされているはずなので、すぐ使えます。

インストールしてなかった場合はこちらを参照してください。⬇︎

Pythonで簡単なGUIを作れる「Tkinter」を使おう - Qiita
今IoTで注目されている、手のひらサイズのコンピューター「Raspberry Pi(通称RPi、ラズパイ)」が人気を浴びています。 ラズパイでプログラムを動かしたりするとき、そのほとんどはPythonでやっていることが多いようです。 ...

制作していこう!

さっそくやっていきましょう!

Projectフォルダ

まず、専用のフォルダを作りましょう。

Project
|-translate.py
|_main.py

最終的な構造は以下のような形です。

これからtranslate.pyとmain.pyにコードを書き込んでいきます。

googletransの導入

まず、powershell(Anaconda使っている人はAnaconda prompt)からgoogletransをインストールします。

以下のコードを打ち込みます。

$ pip install googletrans

translate.pyのコーディング

以下のコードをtranslate.pyに書きます。

import re
from googletrans import Translator

def translate(text):
    comment_pattern = re.compile(r'//([^\n]*)')
    out = re.sub(comment_pattern, r'\1', text)

    out = re.sub(r'^\s*|\s*(?=\s)|\s*$', '', out)
    out = re.sub(r'[\r\n]', ' ', out)
    out = re.sub(r':\s+', r':\n', out)
    out = re.sub(r'\.\s+([A-Z])', r'.\n\1', out)

    out = ' '.join(
        '\n' + line if ' ' in line else line
        for line in out.splitlines())
    out = '\n'.join(
        re.sub(r' ([A-Z]\w+)', r' _\1_', line)
        for line in out.splitlines())

    for t in Translator().translate(out.strip().splitlines(), src='en', dest='ja'):
        return t.text

これで翻訳した英文を文字列として返します。

main.pyのコーディング

次にmain.pyに以下のコードを書いていきます。

import tkinter
import translate
from translate import translate

def btn_click():
    lang = str(translate(txt_1.get()))
    txt_2.insert(0, lang)

# 画面作成
tki = tkinter.Tk()
tki.geometry('300x300')
tki.title('翻訳機')

# ラベル
lbl_1 = tkinter.Label(text='英文:')
lbl_1.place(x=30, y=70)
lbl_2 = tkinter.Label(text='日本文:')
lbl_2.place(x=30, y=100)

# テキストボックス
txt_1 = tkinter.Entry(width=20)
txt_1.place(x=90, y=70)
txt_2 = tkinter.Entry(width=20)
txt_2.place(x=90, y=100)

# ボタン
btn = tkinter.Button(tki, text='翻訳', command=btn_click)
btn.place(x=140, y=170)

# 画面をそのまま表示
tki.mainloop()

このコードでtkinterを使っています。

一番大変だったのはbtn_click関数の書き方でした。

 
def btn_click():     
  lang = str(translate(txt_1.get()))     
  txt_2.insert(0, lang)

翻訳した文字列を取得し、日本文のテキストボックスに出力しています。

実験してみる

さて、適当な英文をネットから引っ張ってきたら「英文:」にコピペしましょう。

「日本文:」に翻訳されたら成功です!!

(見えねぇ…)

メモにコピーしてみました。ちゃんと訳されてました。

改善点

さて、こうして一応完成しましたがいくつか改善すべき点があると思います。

  • 英文を連続で記入すると、前の日本文が消えずに残ってしまう。
  • テキストボックスが小さいのでちょっと見ずらい 。

tkinterの工夫次第でなんとかなるかな…とは思いますが、ちょっと力不足で実装できませんでした…

あとは今ローカルでしか動かないところです。

自分用に作ったのでこれでもいいですが、どうせならサーバーに入れて誰でも使えるようにしたいですね。

ということで…

以下の記事で翻訳アプリを作ってみました!!

pythonのフレームワークのDjangoを使って製作しています。

今回の問題点をほぼ解決したものとなっているのでぜひご覧ください!!

参考

Tkinter で GUI を作る基本 - Tkinter による GUI プログラミング - Python 入門
プログラミング言語 Python を始める人のための入門サイト。開発環境の設定方法、言語の基礎から少し発展的な話題まで、Python の基礎知識をわかりやすく整理しています。
Python – googletransを試してみました。 | Developers.IO
ベルリンの半瀬です。 冷えますね。 はじめに google翻訳をお手軽に使えないかと思ってグーグルしたら、pythonパッケージ googletrans というものを見つけましたので、動作確認をしてみました。 googl …
【Python】ボタンのクリックイベントを取得する
Pythonではボタンをおしてクリックイベントを作ることができます。画面(ウィンドウ)を作ったり、ボタンを作ったり、GUIのアプリケーションを作成できます。今回は、Pythonでボタンを作成し、ボタンのイベントを作成する方法を解説します。ボ
PDFからコピーした英文をGoogle翻訳する - Qiita
はじめに 英語論文のPDFから英文をコピーしてGoogle翻訳に投げるときは、あちこちに入った改行を消さないとうまく翻訳してもらえない。 手作業でやるのに飽きたのでPythonの関数を用意しました。 自分用です。 準備 g...

コメント

  1. […] ここからは前回作った翻訳アプリを使って説明していきます。 […]

タイトルとURLをコピーしました