diyclassics Claude Opus 4.6 commited on
Commit
5d15274
·
1 Parent(s): fe2f397

Fix evaluate tab: colorize missed diacritics, handle case

Browse files

- Colorize function now shows red for missed diacritics (model failed
to add), not just wrong substitutions
- Lowercase reference before comparison since model operates on
lowercase, so case differences don't inflate error counts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

Files changed (1) hide show
  1. pages/10_diacritics_demo.py +17 -10
pages/10_diacritics_demo.py CHANGED
@@ -32,14 +32,18 @@ def colorize_changes(original: str, restored: str, reference: str = None) -> str
32
  parts = []
33
 
34
  for i, (orig, rest) in enumerate(zip(original, restored)):
35
- if orig != rest:
36
- if reference and i < len(reference):
37
- if rest == reference[i]:
 
38
  parts.append(f"{HTML_GREEN}{rest}{HTML_END}")
39
  else:
40
- parts.append(f"{HTML_RED}{rest}{HTML_END}")
41
  else:
42
- parts.append(f"{HTML_GREEN}{rest}{HTML_END}")
 
 
 
43
  else:
44
  parts.append(f"{HTML_GREY}{rest}{HTML_END}")
45
 
@@ -139,17 +143,20 @@ with tab2:
139
  if not reference.strip():
140
  st.warning("Please enter reference text")
141
  else:
142
- stripped = strip_diacritics(reference)
 
 
 
143
  restored = restorer.restore(stripped)
144
 
145
  # Calculate metrics
146
- total_chars = min(len(stripped), len(restored), len(reference))
147
  total_mutable = 0
148
  correct_mutable = 0
149
  total_correct = 0
150
 
151
  for i in range(total_chars):
152
- s, r, ref = stripped[i], restored[i], reference[i]
153
 
154
  if r == ref:
155
  total_correct += 1
@@ -163,7 +170,7 @@ with tab2:
163
  mutable_acc = correct_mutable / total_mutable if total_mutable > 0 else 1.0
164
 
165
  # Sentence-level accuracy
166
- ref_sentences = [s.strip() for s in reference.split(".") if s.strip()]
167
  strip_sentences = [s.strip() for s in stripped.split(".") if s.strip()]
168
  sentences_correct = 0
169
  total_sentences = len(ref_sentences)
@@ -176,7 +183,7 @@ with tab2:
176
  sentence_acc = sentences_correct / total_sentences if total_sentences > 0 else 1.0
177
 
178
  st.subheader("Evaluation Results")
179
- colored = colorize_changes(stripped, restored, reference)
180
  st.markdown(colored, unsafe_allow_html=True)
181
 
182
  st.markdown(
 
32
  parts = []
33
 
34
  for i, (orig, rest) in enumerate(zip(original, restored)):
35
+ if reference and i < len(reference):
36
+ # Evaluate mode: compare against reference
37
+ if rest == reference[i]:
38
+ if orig != rest:
39
  parts.append(f"{HTML_GREEN}{rest}{HTML_END}")
40
  else:
41
+ parts.append(f"{HTML_GREY}{rest}{HTML_END}")
42
  else:
43
+ # Wrong — either changed to wrong char, or failed to change
44
+ parts.append(f"{HTML_RED}{rest}{HTML_END}")
45
+ elif orig != rest:
46
+ parts.append(f"{HTML_GREEN}{rest}{HTML_END}")
47
  else:
48
  parts.append(f"{HTML_GREY}{rest}{HTML_END}")
49
 
 
143
  if not reference.strip():
144
  st.warning("Please enter reference text")
145
  else:
146
+ # Lowercase reference to match strip_diacritics (which lowercases)
147
+ # so evaluation measures diacritic accuracy, not case
148
+ reference_lc = reference.lower()
149
+ stripped = strip_diacritics(reference_lc)
150
  restored = restorer.restore(stripped)
151
 
152
  # Calculate metrics
153
+ total_chars = min(len(stripped), len(restored), len(reference_lc))
154
  total_mutable = 0
155
  correct_mutable = 0
156
  total_correct = 0
157
 
158
  for i in range(total_chars):
159
+ s, r, ref = stripped[i], restored[i], reference_lc[i]
160
 
161
  if r == ref:
162
  total_correct += 1
 
170
  mutable_acc = correct_mutable / total_mutable if total_mutable > 0 else 1.0
171
 
172
  # Sentence-level accuracy
173
+ ref_sentences = [s.strip() for s in reference_lc.split(".") if s.strip()]
174
  strip_sentences = [s.strip() for s in stripped.split(".") if s.strip()]
175
  sentences_correct = 0
176
  total_sentences = len(ref_sentences)
 
183
  sentence_acc = sentences_correct / total_sentences if total_sentences > 0 else 1.0
184
 
185
  st.subheader("Evaluation Results")
186
+ colored = colorize_changes(stripped, restored, reference_lc)
187
  st.markdown(colored, unsafe_allow_html=True)
188
 
189
  st.markdown(