Update app.py
Browse files
app.py
CHANGED
@@ -52,16 +52,24 @@ def extract_text_from_image(filepath: str, languages: List[str]):
|
|
52 |
lang_str = '+'.join(languages) # Join languages for Tesseract
|
53 |
return pytesseract.image_to_string(image=image, lang=lang_str)
|
54 |
|
55 |
-
# Function to get embeddings for text using SentenceTransformer
|
56 |
-
def get_embedding(text):
|
57 |
-
return model1.encode(text, convert_to_tensor=True)
|
58 |
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
65 |
|
66 |
# Assign badges based on the grade
|
67 |
def assign_badge(grade):
|
@@ -74,21 +82,6 @@ def assign_badge(grade):
|
|
74 |
else:
|
75 |
return "Keep Improving Badge 💪"
|
76 |
|
77 |
-
# Generate sequence-based feedback
|
78 |
-
def generate_sequence_feedback(student_answer, model_answer):
|
79 |
-
student_words = student_answer.split()
|
80 |
-
model_words = model_answer.split()
|
81 |
-
common_sequences = []
|
82 |
-
|
83 |
-
for i in range(len(student_words)):
|
84 |
-
sequence = ' '.join(student_words[i:i+3]) # Compare sequences of 3 words at a time
|
85 |
-
if sequence in model_answer:
|
86 |
-
common_sequences.append(f"**{sequence}**")
|
87 |
-
else:
|
88 |
-
common_sequences.append(sequence)
|
89 |
-
|
90 |
-
highlighted_feedback = ' '.join(common_sequences)
|
91 |
-
return highlighted_feedback
|
92 |
|
93 |
# Categorize feedback into clarity, completeness, and accuracy
|
94 |
def detailed_feedback(similarity_score):
|
@@ -117,7 +110,7 @@ def get_grade(similarity_score):
|
|
117 |
# Function to evaluate student's answer by comparing it to a model answer
|
118 |
def evaluate_answer(image, languages, model_answer):
|
119 |
student_answer = extract_text_from_image(image, languages)
|
120 |
-
similarity_score =
|
121 |
grade = get_grade(similarity_score)
|
122 |
feedback = f"Student's answer: {student_answer}\nTeacher's answer: {model_answer}"
|
123 |
visual_feedback = generate_sequence_feedback(student_answer, model_answer)
|
|
|
52 |
lang_str = '+'.join(languages) # Join languages for Tesseract
|
53 |
return pytesseract.image_to_string(image=image, lang=lang_str)
|
54 |
|
|
|
|
|
|
|
55 |
|
56 |
+
|
57 |
+
import Levenshtein
|
58 |
+
|
59 |
+
# Calculate Levenshtein Distance
|
60 |
+
def calculate_levenshtein_distance(text1, text2):
|
61 |
+
return Levenshtein.distance(text1, text2)
|
62 |
+
|
63 |
+
# Use Levenshtein distance to refine similarity
|
64 |
+
def calculate_similarity_with_levenshtein(text1, text2):
|
65 |
+
similarity = calculate_similarity(text1, text2) # From embeddings
|
66 |
+
edit_distance = calculate_levenshtein_distance(text1, text2)
|
67 |
+
normalized_distance = 1 - (edit_distance / max(len(text1), len(text2)))
|
68 |
+
|
69 |
+
# Combine similarity score with normalized Levenshtein distance
|
70 |
+
final_similarity = (similarity + normalized_distance) / 2
|
71 |
+
return final_similarity
|
72 |
+
|
73 |
|
74 |
# Assign badges based on the grade
|
75 |
def assign_badge(grade):
|
|
|
82 |
else:
|
83 |
return "Keep Improving Badge 💪"
|
84 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
85 |
|
86 |
# Categorize feedback into clarity, completeness, and accuracy
|
87 |
def detailed_feedback(similarity_score):
|
|
|
110 |
# Function to evaluate student's answer by comparing it to a model answer
|
111 |
def evaluate_answer(image, languages, model_answer):
|
112 |
student_answer = extract_text_from_image(image, languages)
|
113 |
+
similarity_score = calculate_similarity_with_levenshtein(student_answer, model_answer)
|
114 |
grade = get_grade(similarity_score)
|
115 |
feedback = f"Student's answer: {student_answer}\nTeacher's answer: {model_answer}"
|
116 |
visual_feedback = generate_sequence_feedback(student_answer, model_answer)
|