diff --git a/app.py b/app.py index 09a1d43..ec5ecd4 100644 --- a/app.py +++ b/app.py @@ -220,7 +220,29 @@ def grade_writing_task_1(): data = request.get_json() question = data.get('question') answer = data.get('answer') - if has_words(answer): + if not has_words(answer): + return { + 'comment': "The answer does not contain any english words.", + 'overall': 0, + 'task_response': { + 'Coherence and Cohesion': 0, + 'Grammatical Range and Accuracy': 0, + 'Lexical Resource': 0, + 'Task Achievement': 0 + } + } + elif not has_x_words(answer, 100): + return { + 'comment': "The answer is insufficient and too small to be graded.", + 'overall': 0, + 'task_response': { + 'Coherence and Cohesion': 0, + 'Grammatical Range and Accuracy': 0, + 'Lexical Resource': 0, + 'Task Achievement': 0 + } + } + else: message = ("Evaluate the given Writing Task 1 response based on the IELTS grading system, ensuring a " "strict assessment that penalizes errors. Deduct points for deviations from the task, and " "assign a score of 0 if the response fails to address the question. Additionally, provide an " @@ -236,17 +258,6 @@ def grade_writing_task_1(): GRADING_TEMPERATURE) response['fixed_text'] = get_fixed_text(answer) return response - else: - return { - 'comment': "The answer does not contain any english words.", - 'overall': 0, - 'task_response': { - 'Coherence and Cohesion': 0, - 'Grammatical Range and Accuracy': 0, - 'Lexical Resource': 0, - 'Task Achievement': 0 - } - } except Exception as e: return str(e) @@ -281,7 +292,29 @@ def grade_writing_task_2(): data = request.get_json() question = data.get('question') answer = data.get('answer') - if has_words(answer): + if not has_words(answer): + return { + 'comment': "The answer does not contain any english words.", + 'overall': 0, + 'task_response': { + 'Coherence and Cohesion': 0, + 'Grammatical Range and Accuracy': 0, + 'Lexical Resource': 0, + 'Task Achievement': 0 + } + } + elif not has_x_words(answer, 180): + return { + 'comment': "The answer is insufficient and too small to be graded.", + 'overall': 0, + 'task_response': { + 'Coherence and Cohesion': 0, + 'Grammatical Range and Accuracy': 0, + 'Lexical Resource': 0, + 'Task Achievement': 0 + } + } + else: message = ("Evaluate the given Writing Task 2 response based on the IELTS grading system, ensuring a " "strict assessment that penalizes errors. Deduct points for deviations from the task, and " "assign a score of 0 if the response fails to address the question. Additionally, provide an " @@ -297,17 +330,6 @@ def grade_writing_task_2(): GEN_QUESTION_TEMPERATURE) response['fixed_text'] = get_fixed_text(answer) return response - else: - return { - 'comment': "The answer does not contain any english words.", - 'overall': 0, - 'task_response': { - 'Coherence and Cohesion': 0, - 'Grammatical Range and Accuracy': 0, - 'Lexical Resource': 0, - 'Task Achievement': 0 - } - } except Exception as e: return str(e) @@ -368,7 +390,7 @@ def grade_speaking_task_1(): download_firebase_file(FIREBASE_BUCKET, answer_firebase_path, sound_file_name) answer = speech_to_text(sound_file_name) - if has_50_words(answer): + if has_x_words(answer, 20): message = ("Evaluate the given Speaking Part 1 response based on the IELTS grading system, ensuring a " "strict assessment that penalizes errors. Deduct points for deviations from the task, and " "assign a score of 0 if the response fails to address the question. Additionally, provide " @@ -447,7 +469,7 @@ def grade_speaking_task_2(): download_firebase_file(FIREBASE_BUCKET, answer_firebase_path, sound_file_name) answer = speech_to_text(sound_file_name) - if has_50_words(answer): + if has_x_words(answer, 20): message = ("Evaluate the given Speaking Part 2 response based on the IELTS grading system, ensuring a " "strict assessment that penalizes errors. Deduct points for deviations from the task, and " "assign a score of 0 if the response fails to address the question. Additionally, provide " @@ -559,7 +581,7 @@ def grade_speaking_task_3(): text_answers.append(answer_text) item["answer"] = answer_text os.remove(sound_file_name) - if not has_50_words(answer_text): + if not has_x_words(answer_text, 20): return { "comment": "The audio recorded does not contain enough english words to be graded.", "overall": 0, diff --git a/helper/speech_to_text_helper.py b/helper/speech_to_text_helper.py index 5684165..fc262b8 100644 --- a/helper/speech_to_text_helper.py +++ b/helper/speech_to_text_helper.py @@ -94,11 +94,11 @@ def has_words(text: str): words_in_input = text.split() return any(word.lower() in english_words for word in words_in_input) -def has_50_words(text: str): +def has_x_words(text: str, quantity): english_words = set(words.words()) words_in_input = text.split() english_word_count = sum(1 for word in words_in_input if word.lower() in english_words) - return english_word_count >= 50 + return english_word_count >= quantity def divide_text(text, max_length=3000): if len(text) <= max_length: