Teacher-AI / app /error_analyzer.py
Moaaz2os's picture
Upload 6 files
7e0eb7b verified
Raw
History Blame Contribute Delete
1.34 kB
import re
def detect_common_error(text: str) -> str:
"""
Detect common student errors in STEM questions.
Returns a short description or 'None detected'.
"""
# Literal divide by zero
if re.search(r"/\s*0\b", text):
return "Possible division by zero"
# Double negative or sign confusion
if re.search(r"--|\+\s*-(?!\d*\.)|-\s*\+", text):
return "Possible sign error"
# Number directly next to variable and another digit (e.g. "2x3")
if re.search(r"\d[a-zA-Z]\d", text):
return "Possible notation ambiguity"
# Ambiguous fraction: e.g. 1/2x (is it x/2 or 1/(2x)?)
if re.search(r"\d/\d+[a-zA-Z]", text):
return "Possible ambiguous fraction notation"
# Physics quantity with number but no units
physics_terms = [
"force", "velocity", "acceleration", "mass",
"energy", "distance", "speed", "weight",
]
unit_pattern = r"\b(kg|g|m|s|n|j|w|pa|km|cm|mm|ms|mph|kph|hz|°c|°f|k|mol|newton|joule|watt|meter|second)\b"
text_lower = text.lower()
has_physics = any(t in text_lower for t in physics_terms)
has_number = bool(re.search(r"\d", text))
has_unit = bool(re.search(unit_pattern, text_lower))
if has_physics and has_number and not has_unit:
return "Possible missing units"
return "None detected"