import gradio as gr from jiwer import wer, process_words def make_string(words): return " ".join(words) # Function to highlight errors def highlight_errors(ground_truth, hypothesis): highlighted_text = [] processed = process_words(ground_truth, hypothesis) # Process each alignment operation in measures for alignment, ref, hyp in zip(processed.alignments, processed.references, processed.hypotheses): for chunk in alignment: if chunk.type == 'equal': # Add equal words without highlighting highlighted_text.extend(ref[chunk.ref_start_idx:chunk.ref_end_idx]) elif chunk.type == 'insert': # Highlight inserted words in green highlighted_text.append(f'{make_string(hyp[chunk.hyp_start_idx:chunk.hyp_end_idx])}') elif chunk.type == 'substitute': # Highlight substitutions in purple: ground truth is striked through highlighted_text.append(f'{make_string(hyp[chunk.hyp_start_idx:chunk.hyp_end_idx])}') # Hypothesis word highlighted_text.append(f'{make_string(ref[chunk.ref_start_idx:chunk.ref_end_idx])}') # Ground truth word elif chunk.type == 'delete': # Highlight deleted words in red with strikethrough highlighted_text.append(f'{make_string(ref[chunk.ref_start_idx:chunk.ref_end_idx])}') highlighted_text_str = ' '.join(highlighted_text) # Color Legend HTML legend_html = """