見出し画像

Python で英単語テスト自動作成

以下の動画をもとに英単語テスト自動生成コードを書きました。
Qiitaにありそうですが、、、

リンク先のGitHubが切れてたので、誰かの役に立てば、、、

import re
import random
import numpy as np
np.random.seed(0)

source = '~~~.txt'  # ここでファイルを読み込む

with open(source,encoding="utf-8_sig") as f:
   data = f.read()
   
english_words = re.findall('[a-z_]+',data)
ja = re.findall('\s.*\n',data)

meanings = []
for word in ja:
   m = re.sub('\t|\n','',word)
   meanings.append(m)
   
words_dict = dict(zip(english_words, meanings))

n_tests=20 #ここで問題回数を決める
n_questions=10 #ここで1回あたりの問題量を決める

for test_num in range(n_tests):
   with open('英単語テスト_{:02d}.txt'.format(test_num+1),'w') as f: #ここでファイル名を大まかに決める
       
       f.write('第{}回英単語テスト\n\n'.format(test_num + 1)) #各ファイルの上部にタイトルを書き込む
       
       for question_num in range(n_questions):
           question_word = random.choice(english_words)
           correct_answer = words_dict[question_word]
           
           meanings_copy = meanings.copy()
           meanings_copy.remove(correct_answer)
           wrong_answers = random.sample(meanings_copy,3) #ここで選択肢数が決まる1
           
           answer_options = [correct_answer] + wrong_answers
           
           random.shuffle(answer_options)
           
           f.write('問{}.{}\n\n'.format(question_num +1 , question_word))
           
           for i in range(4):  #ここで選択肢数が決まる2
               f.write('{}.{}\n'.format(i + 1, answer_options[i]))
           f.write('\n\n')

8行目のutf-8_sigはmac➡︎winでのtxtファイルやり取りで問題が生じたので追加したものです。

同階層にsourceファイルを置いていただければ、楽です。

具体例
インプットが以下⬇︎

スクリーンショット 2021-09-22 21.31.51

アウトプットは以下⬇︎

スクリーンショット 2021-09-22 21.32.04

注意
このコードだと、ソース(input)に使うファイルに注意があります。
・最後まで改行すること
・英単語は小文字で始めること(正規表現を工夫すれば大文字でも可能)
・二単語以上は読み込まない(_で繋げて正規表現に組み込めば良い)

スクリーンショット 2021-09-22 21.29.06

これで、急に単語テスト作ってと頼まれても耐えれますね。
工夫次第で古典の単語テストも作れるかな?

いいなと思ったら応援しよう!