paper_generate / paper.py
weiwei1392
add new demo
691ae91
import math
import pathlib
import datetime
from pathlib import Path
from config import *
from question import *
def txt_to_list(txt):
while txt[0] == '\n':
txt = txt[1:]
while txt[-1] == '\n':
txt = txt[:-1]
txt = txt.split('\n')
txt = [i for i in txt if i is not None]
return txt
def generate_scope(progress: str):
"""
:param progress:
:return:
"""
if progress == '期中':
progress = ['unit1', 'unit2', 'unit3', 'unit4', 'unit5', 'unit6', 'unit7']
elif progress == '期末':
progress = ['unit1', 'unit2', 'unit3', 'unit4', 'unit5', 'unit6', 'unit7', 'unit8', 'unit9',
'unit10', 'unit11', 'unit12', 'unit13', 'unit14']
else:
progress = [progress]
scope = {'word': [], 'phrase': [], 'sentence': [], 'grammar': []}
root_path = Path(__file__).parent
for i in progress:
path = root_path.joinpath('material', i + '.txt')
with open(path, 'r', encoding='utf-8') as file:
content = file.read()
# scope = re.split(r'<word>|<phrase>|<sentence>|<grammar>', content)
_, word, phrase, sentence, grammar = re.split(r'<word>|<phrase>|<sentence>|<grammar>', content)
scope['word'].extend(txt_to_list(word))
scope['phrase'].extend(txt_to_list(phrase))
scope['sentence'].extend(txt_to_list(sentence))
scope['grammar'].extend(txt_to_list(grammar))
return scope
def generate(progress: str, question_config: dict):
full_scope = generate_scope(progress)
# doc = docx.Document()
answer = ''
for key, value in question_config.items():
if (value is not None) & (value != 0):
scope = full_scope[generate_command_to_material_type[key]]
if len(scope) < value:
add_scope = scope * math.ceil(value / len(scope) - 1)
random.shuffle(add_scope)
scope = scope.extend(add_scope[:(value-len(scope))])
else:
random.shuffle(scope)
scope = scope[: value]
rst = eval(generate_command_to_function_type[key])(scope)
# print(rst)
answer = answer + generate_command_to_question_type[key] + ':\n\n'
for i in range(len(rst)):
if rst[i]['question'] != 'fail!':
answer = answer + str(i+1) + '.' + rst[i]['question'] + '\n' + '正确答案:' + rst[i]['answer'] + '\n\n'
answer = answer + '\n\n'
return answer