Garvitj commited on
Commit
0ebc0c5
·
verified ·
1 Parent(s): 4d02758

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +18 -25
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
- # Calculate similarity between two texts focusing on sequence
60
- def calculate_similarity(text1, text2):
61
- embedding1 = get_embedding(text1)
62
- embedding2 = get_embedding(text2)
63
- similarity = util.pytorch_cos_sim(embedding1, embedding2)
64
- return similarity.item()
 
 
 
 
 
 
 
 
 
 
 
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 = calculate_similarity(student_answer, model_answer)
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)