carepath-api / scribe /tests /test_retrieval.py
tranth3truong's picture
Deploy public Scribe-only CarePath Space
cc678b9
Raw
History Blame Contribute Delete
2.03 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.services.retrieval import MedicalTermRetriever, normalize_for_match
class RetrievalTests(unittest.TestCase):
def test_normalize_for_match_removes_vietnamese_diacritics(self) -> None:
self.assertEqual(normalize_for_match("tăng huyết áp"), "tang huyet ap")
def test_retrieve_exact_and_alias_terms(self) -> None:
retriever = MedicalTermRetriever(Path("data/medical_lexicon.json"), top_k=5)
terms = retriever.retrieve("bệnh nhân SpO2 98% và cao huyết áp")
names = [item.term for item in terms]
self.assertIn("SpO2", names)
self.assertIn("hypertension", names)
def test_short_aliases_do_not_match_inside_words(self) -> None:
retriever = MedicalTermRetriever(Path("data/medical_lexicon.json"), top_k=10)
terms = retriever.retrieve(
"benh nhan dau nguc spo2 98 % huyet ap 120 tren 80 mmhg "
"Phong kham noi tong quat"
)
names = [item.term for item in terms]
self.assertIn("SpO2", names)
self.assertNotIn("potassium", names)
self.assertNotIn("hemoglobin", names)
self.assertNotIn("glucose", names)
def test_hernia_transcript_does_not_retrieve_unrelated_terms(self) -> None:
retriever = MedicalTermRetriever(Path("data/medical_lexicon.json"), top_k=10)
text = (
"Bệnh nhân 32 tuổi có khối phồng vùng bẹn, xuất hiện khi đứng "
"ho hoặc rặn, biến mất khi nằm, nghi thoát vị bẹn phải."
)
names = [item.term for item in retriever.retrieve(text)]
self.assertNotIn("platelet", names)
self.assertNotIn("glucose", names)
self.assertNotIn("X-ray", names)
self.assertNotIn("diabetes mellitus", names)
self.assertNotIn("diastolic", names)
if __name__ == "__main__":
unittest.main()