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ファイルを置いていただければ、楽です。
具体例
インプットが以下⬇︎
アウトプットは以下⬇︎
注意
このコードだと、ソース(input)に使うファイルに注意があります。
・最後まで改行すること
・英単語は小文字で始めること(正規表現を工夫すれば大文字でも可能)
・二単語以上は読み込まない(_で繋げて正規表現に組み込めば良い)
これで、急に単語テスト作ってと頼まれても耐えれますね。
工夫次第で古典の単語テストも作れるかな?