日経ソフトウエア 2024年5月号に関西弁翻訳ツール
なるものがあった。
この記事ではWebアプリとして作成されていたので、今回は、デスクトップアプリにしてみようと思う。
完成品
コード
import re
import tkinter as tk
from tkinter import ttk
# 標準語 -> 関西弁 の変換ルール
def replace_text(input_text):
transformations = {
r'こんにちは': 'まいど',
r'ありがとうございます': 'おおきに',
r'おはようございます': 'おはようさん',
r'こんばんは': 'ばんは',
r'すみません': 'すんまへん',
r'本当': 'ほんま',
r'そうです': 'せやねん',
r'違います': 'ちゃうねん',
r'とても': 'めっちゃ',
r'私': 'わて',
r'あなた': 'あんさん',
r'です。|だ。|である。': 'でんがな。',
r'ます。': 'まんがな。',
r'た。': 'たがな。',
}
replaced_text = input_text
for pattern, replacement in transformations.items():
replaced_text = re.sub(pattern, replacement, replaced_text)
return replaced_text
# Tkinterアプリの作成
class KansaiBenApp(tk.Tk):
def __init__(self):
super().__init__()
self.title("関西弁翻訳ツール")
self.geometry("400x300")
self.label_input = ttk.Label(self, text="標準語の文章を入力してください:")
self.label_input.pack(pady=10)
self.input_text = tk.Text(self, height=5, width=40)
self.input_text.pack(pady=5)
self.button_translate = ttk.Button(self, text="関西弁に変換", command=self.translate_text)
self.button_translate.pack(pady=10)
self.label_output = ttk.Label(self, text="関西弁翻訳結果:")
self.label_output.pack(pady=10)
self.output_text = tk.Text(self, height=5, width=40, state='disabled')
self.output_text.pack(pady=5)
def translate_text(self):
input_text = self.input_text.get("1.0", tk.END).strip()
result = replace_text(input_text)
self.output_text.config(state='normal')
self.output_text.delete("1.0", tk.END)
self.output_text.insert(tk.END, result)
self.output_text.config(state='disabled')
if __name__ == "__main__":
app = KansaiBenApp()
app.mainloop()
コードの解説
1. re
import re
-
re
: 正規表現を扱うPythonの標準ライブラリ。 - 正規表現:
re
モジュールを使用して、特定の文字列パターンを検索、置換、操作する方法。 -
replace_text
関数内で使用 -
例:
transformations = { r'こんにちは': 'まいど', r'ありがとうございます': 'おおきに', r'です。|だ。|である。': 'でんがな。', }
- ここでは、標準語を関西弁に置き換えるための正規表現パターンを定義した
2. class
- 説明: クラスを定義するための予約語。クラスはオブジェクト指向プログラミングでオブジェクトを作るための設計図
-
例:
class KansaiBenApp(tk.Tk):
-
KansaiBenApp
はTk
クラスを継承しているクラス。Tk
はTkinter
アプリケーションのウィンドウを表している
-
3. super()
-
説明: 親クラス(ここでは
Tk
)のメソッドを呼び出すために使う -
例:
super().__init__()
-
Tk
クラスのコンストラクタを呼び出し、アプリケーションウィンドウを初期化する
-
4. self
-
説明: クラス内でインスタンス自身を指すための予約語。クラス内のメソッドでは、
self
を使ってインスタンス変数や他のメソッドにアクセスする -
例:
self.label_input = ttk.Label(self, text="標準語の文章を入力してください:")
-
self.label_input
はクラス内のインスタンス変数
-
5. re.sub
- 説明: 正規表現に基づいて文字列を置換するために使う関数
-
例:
replaced_text = re.sub(pattern, replacement, replaced_text)
-
pattern
: 置換対象となる正規表現のパターン -
replacement
: 置換後の文字列 -
replaced_text
: 置換対象の文字列
-
6. ttk.Label
-
説明:
Tkinter
のttk
モジュールにある、テキストを表示するためのウィジェット -
例:
self.label_input = ttk.Label(self, text="標準語の文章を入力してください:")
- ラベルウィジェットを作成し、指定したテキストを表示する
7. tk.Text
- 説明: 複数行のテキストを入力または表示するためのウィジェット
-
例:
self.input_text = tk.Text(self, height=5, width=40)
- テキストボックスを作成し、入力用や表示用に使う
8. ttk.Button
- 説明: ボタンウィジェットを作成する。クリックできるボタンを作成し、コマンドを指定することで機能を実行できる
-
例:
self.button_translate = ttk.Button(self, text="関西弁に変換", command=self.translate_text)
- ここでは「関西弁に変換」というテキストのボタンを作成し、クリック時に
translate_text
関数を呼び出す
- ここでは「関西弁に変換」というテキストのボタンを作成し、クリック時に
9. get
-
説明:
Text
ウィジェットからテキストを取得するメソッド -
例:
input_text = self.input_text.get("1.0", tk.END).strip()
- ここでは
Text
ウィジェットから、テキストを最初の行から最後まで取得している -
strip
は前後の空白を除去する
- ここでは
10. insert
-
説明:
Text
ウィジェットにテキストを挿入するメソッド -
例:
self.output_text.insert(tk.END, result)
- 結果のテキストをテキストウィジェットに表示するために使う。
-
tk.END
はテキストの最後に挿入する
11. if __name__ == "__main__":
- 説明: このスクリプトが直接実行された場合にのみ実行されるコードブロックを指定する
-
例:
if __name__ == "__main__": app = KansaiBenApp() app.mainloop()
- この条件が満たされると、
KansaiBenApp
クラスのインスタンスを作成し、アプリケーションが動作を開始する - ここに関しては、下記の記事が参考になる
https://qiita.com/soicchi/items/45ac8e2006361126b023
- この条件が満たされると、
今後は結果をコピー
,入力欄をクリア
などを実装していこうと思う。
参考資料
日経ソフトウエア 2024年5月号:
https://info.nikkeibp.co.jp/media/NSW/atcl/mag/031500053/
Pythonで使用する if name == 'main': の意味:
https://qiita.com/soicchi/items/45ac8e2006361126b023