Spaces:
Running
Running
| 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() | |