carepath-api / scribe /tests /test_evaluation.py
tranth3truong's picture
Deploy public Scribe-only CarePath Space
cc678b9
Raw
History Blame Contribute Delete
2.37 kB
from __future__ import annotations
import sys
import unittest
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
from carepath.evaluation import (
extract_numbers_and_units,
number_unit_preservation,
overcorrection_rate,
score_correction,
score_pair,
split_terms,
term_precision_recall_f1,
term_recall,
word_error_rate,
)
class EvaluationTests(unittest.TestCase):
def test_word_error_rate_counts_substitution(self) -> None:
self.assertAlmostEqual(word_error_rate("bệnh nhân đau ngực", "bệnh nhân đau bụng"), 0.25)
def test_term_recall_uses_expected_terms_from_reference(self) -> None:
self.assertEqual(term_recall("SpO2 98%", "spo2 98%", ["SpO2"]), 1.0)
self.assertEqual(term_recall("SpO2 98%", "oxy 98%", ["SpO2"]), 0.0)
def test_number_unit_preservation(self) -> None:
self.assertIn("120mmhg", extract_numbers_and_units("120 mmHg"))
self.assertEqual(number_unit_preservation("SpO2 98%", "SpO2 98%"), 1.0)
def test_score_pair(self) -> None:
metrics = score_pair("SpO2 98%", "SpO2 98%", ["SpO2"])
self.assertEqual(metrics.wer, 0.0)
self.assertEqual(metrics.term_recall, 1.0)
self.assertEqual(metrics.term_precision, 1.0)
self.assertEqual(metrics.term_f1, 1.0)
def test_term_precision_recall_f1(self) -> None:
metrics = term_precision_recall_f1("SpO2 98%", "SpO2 98% glucose", ["SpO2", "glucose"])
self.assertEqual(metrics.true_positives, 1)
self.assertEqual(metrics.false_positives, 1)
self.assertEqual(metrics.false_negatives, 0)
def test_score_correction_reports_overcorrection(self) -> None:
metrics = score_correction(
reference="bệnh nhân đau ngực",
raw_hypothesis="bệnh nhân đau ngực",
corrected_hypothesis="người bệnh đau ngực",
terms=[],
)
self.assertGreater(metrics.overcorrection_rate, 0)
def test_overcorrection_rate(self) -> None:
self.assertEqual(
overcorrection_rate("a b c", "a x c", "a y c"),
0.0,
)
def test_split_terms(self) -> None:
self.assertEqual(split_terms("testosterone; androgen"), ["testosterone", "androgen"])
if __name__ == "__main__":
unittest.main()