From 38546f6547335f2fe0e7a171c8cb7a007e983be9 Mon Sep 17 00:00:00 2001 From: AJ laptop Date: Tue, 3 Oct 2023 21:55:32 +0300 Subject: [PATCH] add support for n type input exams --- CONTRIBUTING.md | 2 +- README.md | 12 +++-- pyproject.toml | 2 +- {exam_creator => unique_exams}/__init__.py | 0 {exam_creator => unique_exams}/config.py | 7 ++- .../input/Sample Examiner Version.docx | Bin 0 -> 39045 bytes .../input/Sample Student Version.docx | Bin 0 -> 38407 bytes {exam_creator => unique_exams}/main.py | 41 +++++++++--------- {exam_creator => unique_exams}/token_hash.py | 2 +- 9 files changed, 36 insertions(+), 30 deletions(-) rename {exam_creator => unique_exams}/__init__.py (100%) rename {exam_creator => unique_exams}/config.py (54%) create mode 100644 unique_exams/input/Sample Examiner Version.docx create mode 100644 unique_exams/input/Sample Student Version.docx rename {exam_creator => unique_exams}/main.py (86%) rename {exam_creator => unique_exams}/token_hash.py (98%) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 48458a5..e43028b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,4 +1,4 @@ -First off, thank you for considering contributing to Exam-Creator. It’s people like you that make Exam-Creator such a great tool. +First off, thank you for considering contributing to Unique-Exams. It’s people like you that make Unique-Exams such a great tool. # How to report a bug diff --git a/README.md b/README.md index abfd6fc..b828be0 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# Exam-Creator +# Unique-Exams -Exam-Creator is a simple program to create randomized exams so each student receives a unique set of questions. +Unique-Exams is a simple program to create randomized exams so each student receives a unique set of questions. ## Why? @@ -24,9 +24,13 @@ Run `poetry install` ### Usage -Put your template files in the `input` folder, following the "Exam Layout guide" +Have a look at the sample template files provided in the `input` folder to see the expected format. -Run `python exam_creator/main.py` +You can Follow the TEMPLATE_DESIGN.md guide to design your own templates. Remove the sample files and add your own template files to the `input` folder. + +Modify config.py to reflect the text you want to use for placeholders for the Alternate questions. + +Run `python unique_exams/main.py` Generated exams will be placed in the `output` folder diff --git a/pyproject.toml b/pyproject.toml index b467709..108f8e5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.poetry] -name = "exam-creator" +name = "unique-exams" version = "0.1.0" description = "" authors = ["AJ laptop "] diff --git a/exam_creator/__init__.py b/unique_exams/__init__.py similarity index 100% rename from exam_creator/__init__.py rename to unique_exams/__init__.py diff --git a/exam_creator/config.py b/unique_exams/config.py similarity index 54% rename from exam_creator/config.py rename to unique_exams/config.py index 2fdd581..2b39260 100644 --- a/exam_creator/config.py +++ b/unique_exams/config.py @@ -2,7 +2,10 @@ ### Text strings you will use in the template exams to indicate the structure of the exam # To indicate that the following paragraphs decribe one of the alternative questions, the preceeding paragraph should include this text -ALTERNATIVE_TEXT= "Alternatif Soru" +ALTERNATIVE_TEXT= "Question Alternate" # To indicate the block of alternative questions is now over -END_ALTERNATIVES= "Alternatif Sonu" \ No newline at end of file +END_ALTERNATIVES= "END ALTERNATES" + +# Used to obfuscate the tokens used for unique exams. Not that important, but if you want to modify it, each number should be less than 5. +SEED = [0,2,1,3,0,1,2,0,3] diff --git a/unique_exams/input/Sample Examiner Version.docx b/unique_exams/input/Sample Examiner Version.docx new file mode 100644 index 0000000000000000000000000000000000000000..7565c9eb5a2cc5666cdf10aab06407a3b20b5de7 GIT binary patch literal 39045 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 A7XSbN literal 0 HcmV?d00001 diff --git a/unique_exams/input/Sample Student Version.docx b/unique_exams/input/Sample Student Version.docx new file mode 100644 index 0000000000000000000000000000000000000000..89bcc7117a88017c7820fd79b2c901aac6b3b4c1 GIT binary patch literal 38407 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 a_`%wQ)}{b%z3=N548jHUejkeZ{^~zXNpo-j literal 0 HcmV?d00001 diff --git a/exam_creator/main.py b/unique_exams/main.py similarity index 86% rename from exam_creator/main.py rename to unique_exams/main.py index 4a5297e..d992a2c 100644 --- a/exam_creator/main.py +++ b/unique_exams/main.py @@ -23,7 +23,6 @@ def load_in_template(filename)->dict: mode = 'common' for i, paragraph in enumerate(template_doc.paragraphs): - # if paragraph text contains `Alternatif Soru`... print(f"{i}:{mode}: {paragraph.text[:45]}") if ALTERNATIVE_TEXT.lower() in paragraph.text.lower(): if mode == 'common': @@ -34,7 +33,7 @@ def load_in_template(filename)->dict: else: # we save the current alternative alternatives.append(alternative_content) - print(f"Detected next Alternatif Soru") + print(f"Detected next alternative choice") mode = 'choice' alternative_content = [] # we are starting a new alternative continue # we don't save the header @@ -190,30 +189,30 @@ def add_paragraph(target_document, source_paragraph): # new_exams = int(input("How many new exams do you want to generate? ")) new_exams = 3 print(os.getcwd()) - if "exam_creator" in os.getcwd(): + if "unique_exams" in os.getcwd(): INPUT_FOLDER = os.path.join(os.getcwd(), "input") OUTPUT_FOLDER = os.path.join(os.getcwd(), "output") else: - # add to path exam_creator - INPUT_FOLDER = os.path.join(os.getcwd(), "exam_creator", "input") - OUTPUT_FOLDER = os.path.join(os.getcwd(), "exam_creator", "output") - examiner_path = os.path.join(INPUT_FOLDER, "JRSPA - Examiner Version - simplified.docx") - student_path = os.path.join(INPUT_FOLDER, "JRSPA - Student Version.docx") - examiner_loaded_content = load_in_template(examiner_path) - student_loaded_content = load_in_template(student_path) - - examiner_structure = [len(choice['alternatives']) for choice in examiner_loaded_content['choices']] - student_structure = [len(choice['alternatives']) for choice in student_loaded_content['choices']] - if examiner_structure != student_structure: - raise Exception("The structure of the examiner and student versions are not the same. Please check the files") + INPUT_FOLDER = os.path.join(os.getcwd(), "unique_exams", "input") + OUTPUT_FOLDER = os.path.join(os.getcwd(), "unique_exams", "output") + exam_names = [f for f in os.listdir(INPUT_FOLDER) if f.endswith(".docx")] + exam_paths = [os.path.join(INPUT_FOLDER, f) for f in exam_names] + # remove file endings + exam_names = [os.path.splitext(f)[0] for f in exam_names] + loaded_contents = [load_in_template(os.path.join(INPUT_FOLDER, f)) for f in exam_paths] + exam_structures = [] + for loaded_content in loaded_contents: + exam_structures.append([len(choice['alternatives']) for choice in loaded_content['choices']]) + for i in range(len(exam_structures)): + if exam_structures[i] != exam_structures[0]: + raise Exception("The structure of the exam versions are not the same. Please check the files") for i in range(new_exams): - choices = make_choices(student_loaded_content) + choices = make_choices(loaded_contents[0]) hash = to_hash(choices) reversed_from_hash = from_hash(hash) print (f"Choices: {choices} -> {hash} -> {reversed_from_hash}") - # choices is an array like [3,0,2,5], we now convert this into a reversable hash - examiner_output_path = os.path.join(OUTPUT_FOLDER, f"Examiner version {hash}.docx") - student_output_path = os.path.join(OUTPUT_FOLDER, f"Student version {hash}.docx") - create_new_document(student_loaded_content, choices, student_output_path, original=student_path) - create_new_document(examiner_loaded_content, choices, examiner_output_path, original=examiner_path) + for j, loaded_content in enumerate(loaded_contents): + exam_name = exam_names[j] + output_path = os.path.join(OUTPUT_FOLDER, f"{exam_name} - version {hash}.docx") + create_new_document(loaded_content, choices, output_path, original=exam_paths[j]) diff --git a/exam_creator/token_hash.py b/unique_exams/token_hash.py similarity index 98% rename from exam_creator/token_hash.py rename to unique_exams/token_hash.py index c1676bd..d47fd5f 100644 --- a/exam_creator/token_hash.py +++ b/unique_exams/token_hash.py @@ -1,10 +1,10 @@ import random +from config import SEED HEX_ENCODING1 = "aeiouAEIOU" HEX_ENCODING2 = "bcdghjklmnprstvwxyz" HEX_ENCODING3 = "BCDGHJKLMNPRSTVWXYZ-#$%&*+./0123456789:<=>?@^_~!'(){}[]|\\öäüÖÄÜßÖÄÜĞğİıŞşÇç" HEX_ENCODINGS = [HEX_ENCODING1, HEX_ENCODING2, HEX_ENCODING3] -SEED = [0,2,1,3,0,1,2,0,3] def value_to_char(value:int)->str: # each HEX_ENCODING substring is unique. We select an encoding string randomly, weighted towards the earlier strings.