Spaces:
Runtime error
Runtime error
from collections import Counter | |
import spacy | |
import speech_recognition as sr | |
from pydub import AudioSegment | |
# Comprehension Score Evaluation (No Reference Text) | |
def evaluate_comprehension(text, doc): | |
# 1. Listening Comprehension: Evaluate clarity and coherence of the sentences | |
sentence_count = len(list(doc.sents)) | |
sentence_length_avg = sum([len(sent) for sent in doc.sents]) / sentence_count if sentence_count > 0 else 0 | |
if sentence_length_avg <= 10: # Short and simple sentences | |
listening_comprehension_score = 10 | |
elif 10 < sentence_length_avg <= 20: # Moderate length sentences | |
listening_comprehension_score = 8 | |
else: # Longer sentences may indicate less clarity | |
listening_comprehension_score = 6 | |
# 2. Topic Relevance: Lexical diversity and internal consistency | |
word_list = [token.text.lower() for token in doc if token.is_alpha] | |
word_count = len(word_list) | |
unique_words = len(set(word_list)) | |
if word_count == 0: | |
topic_relevance_score = 0 | |
else: | |
lexical_diversity = unique_words / word_count | |
if lexical_diversity > 0.7: # High diversity, likely more relevant | |
topic_relevance_score = 10 | |
elif 0.4 <= lexical_diversity <= 0.7: # Moderate diversity | |
topic_relevance_score = 7 | |
else: # Low diversity indicates repetition, which may indicate off-topic speech | |
topic_relevance_score = 4 | |
# 3. Understanding: Based on simplicity and grammatical structure | |
understanding_score = listening_comprehension_score # Reuse comprehension score since it's already based on clarity | |
# Final Comprehension Score: (Listening Comprehension + Topic Relevance + Understanding) / 3 | |
comprehension_score = (listening_comprehension_score + topic_relevance_score + understanding_score) / 3 | |
return { | |
"listening_comprehension": round(listening_comprehension_score, 2), | |
"topic_relevance": round(topic_relevance_score, 2), | |
"understanding": round(understanding_score, 2), | |
"comprehension_score": round(comprehension_score, 2), | |
} | |