■前置き
Pythonの勉強がてら作りました
- できること:1文毎に対訳作成しテストできる。間違えたところを何度でも復習可能。
極めてシンプル、保存すらできません
■必要なもの
Deepl API key(無料)
■コード
import urllib.request
import urllib.parse
import json
import re
# ==========================================
# 設定
# ==========================================
API_KEY = "YOUR_DEEPL_API_KEY" # ここにAPI keyいれる
DEEPL_URL = "https://api-free.deepl.com/v2/translate"
# ==========================================
# 関数
# ==========================================
def translate_text(text):
data = urllib.parse.urlencode({
'text': text,
'target_lang': 'JA'
}).encode('utf-8')
headers = {
'Authorization': f'DeepL-Auth-Key {API_KEY}',
'Content-Type': 'application/x-www-form-urlencoded'
}
req = urllib.request.Request(DEEPL_URL, data=data, headers=headers)
try:
with urllib.request.urlopen(req) as response:
res_json = json.loads(response.read().decode('utf-8'))
return res_json['translations'][0]['text']
except Exception as e:
return f"【翻訳エラー】: {e}"
def split_sentences(text):
text = text.replace('\n', ' ')
text = re.sub(r'\s+', ' ', text).strip()
sentences = re.split(r'(?<=[.!?])\s+', text)
return [s for s in sentences if s]
def learning_session(sentences):
mistakes = []
total_sentences = len(sentences)
for i, sentence in enumerate(sentences):
print("\n" + "="*40)
print(f"【 {i + 1} / {total_sentences} 文目 】")
print("-" * 40)
print(sentence)
input("\n(Enterを押して日本語訳を表示...)")
ja_text = translate_text(sentence)
print("\n【日本語訳】")
print(ja_text)
while True:
ans = input("\n合っていましたか? (y/n): ").strip().lower()
# y/n の判定をガバガバにする(全角や空白混入対策)
if 'y' in ans or 'y' in ans:
break
elif 'n' in ans or 'n' in ans:
mistakes.append(sentence)
if i + 1 < total_sentences:
input("(Enterを押して次の英文へ...)")
break
elif ans == "":
continue # 空エンター連打は無視
else:
print("※ y または n を入力してください。")
return mistakes
# ==========================================
# メイン処理
# ==========================================
def main():
mistake_list = []
while True:
print("\n\n" + "*"*40)
print(" メニュー")
print("*"*40)
print("1: 英文を入力して学習を開始する")
print(f"2: 間違えリストを学習する (現在 {len(mistake_list)} 文)")
print("3: アプリを終了する")
choice = input("\n番号を選択してください (1-3): ").strip()
if choice == '1':
print("\n英文をペースト(入力)してください。")
print("※ すべてペーストし終わったら、新しい行に「END」と入力してEnterを押してください。")
lines = []
while True:
line = input()
# END と入力されたら読み込み終了
if line.strip().upper() == "END":
break
lines.append(line)
full_text = " ".join(lines)
if not full_text.strip():
print("英文が入力されませんでした。")
continue
sentences = split_sentences(full_text)
print(f"\n>>> 英文を {len(sentences)} 文に分割しました。学習をスタートします!")
new_mistakes = learning_session(sentences)
for m in new_mistakes:
if m not in mistake_list:
mistake_list.append(m)
print("\n=== 全ての英文の学習が完了しました! ===")
elif choice == '2':
if not mistake_list:
print("\n※ 間違えリストは空です。まずは「1」で学習してください。")
continue
print(f"\n>>> 間違えリスト(全 {len(mistake_list)} 文)の学習を開始します!")
remaining_mistakes = learning_session(mistake_list)
mistake_list = remaining_mistakes
print("\n=== 間違えリストの学習が完了しました! ===")
elif choice == '3':
print("\nお疲れ様でした!アプリを終了します。")
break
if __name__ == "__main__":
main()
■使ってみた
BBCの記事を拝借

アプリを起動

モード選択し貼り付け

実行。

復習モード


コメントを残す