Spaces:
Running
Running
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>
- 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
|
| 36 |
-
|
| 37 |
-
|
|
|
|
| 38 |
parts.append(f"{HTML_GREEN}{rest}{HTML_END}")
|
| 39 |
else:
|
| 40 |
-
parts.append(f"{
|
| 41 |
else:
|
| 42 |
-
|
|
|
|
|
|
|
|
|
|
| 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 |
-
|
|
|
|
|
|
|
|
|
|
| 143 |
restored = restorer.restore(stripped)
|
| 144 |
|
| 145 |
# Calculate metrics
|
| 146 |
-
total_chars = min(len(stripped), len(restored), len(
|
| 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],
|
| 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
|
| 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,
|
| 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(
|