Switch to unified view

a b/tests/pipeline/test_deduce.py
1
import docdeid as dd
2
3
from deduce.person import Person
4
5
text = (
6
    "betreft: Jan Jansen, bsn 111222333, patnr 000334433. De patient J. Jansen is 64 "
7
    "jaar oud en woonachtig in Utrecht. Hij werd op 10 oktober 2018 door arts "
8
    "Peter de Visser ontslagen van de kliniek van het UMCU. Voor nazorg kan hij "
9
    "worden bereikt via j.JNSEN.123@gmail.com of (06)12345678."
10
)
11
12
13
class TestDeduce:
14
    def test_annotate(self, model):
15
        metadata = {"patient": Person(first_names=["Jan"], surname="Jansen")}
16
        doc = model.deidentify(text, metadata=metadata)
17
18
        expected_annotations = dd.AnnotationSet(
19
            [
20
                dd.Annotation(
21
                    text="(06)12345678",
22
                    start_char=272,
23
                    end_char=284,
24
                    tag="telefoonnummer",
25
                ),
26
                dd.Annotation(text="111222333", start_char=25, end_char=34, tag="bsn"),
27
                dd.Annotation(
28
                    text="Peter de Visser", start_char=153, end_char=168, tag="persoon"
29
                ),
30
                dd.Annotation(
31
                    text="j.JNSEN.123@gmail.com",
32
                    start_char=247,
33
                    end_char=268,
34
                    tag="emailadres",
35
                ),
36
                dd.Annotation(
37
                    text="J. Jansen", start_char=64, end_char=73, tag="patient"
38
                ),
39
                dd.Annotation(
40
                    text="Jan Jansen", start_char=9, end_char=19, tag="patient"
41
                ),
42
                dd.Annotation(
43
                    text="10 oktober 2018", start_char=127, end_char=142, tag="datum"
44
                ),
45
                dd.Annotation(text="64", start_char=77, end_char=79, tag="leeftijd"),
46
                dd.Annotation(text="000334433", start_char=42, end_char=51, tag="id"),
47
                dd.Annotation(
48
                    text="Utrecht", start_char=106, end_char=113, tag="locatie"
49
                ),
50
                dd.Annotation(
51
                    text="UMCU", start_char=202, end_char=206, tag="ziekenhuis"
52
                ),
53
            ]
54
        )
55
56
        assert doc.annotations == set(expected_annotations)
57
58
    def test_deidentify(self, model):
59
        metadata = {"patient": Person(first_names=["Jan"], surname="Jansen")}
60
        doc = model.deidentify(text, metadata=metadata)
61
62
        expected_deidentified = (
63
            "betreft: [PATIENT], bsn [BSN-1], patnr [ID-1]. De patient [PATIENT] is "
64
            "[LEEFTIJD-1] jaar oud en woonachtig in [LOCATIE-1]. Hij werd op "
65
            "[DATUM-1] door arts [PERSOON-1] ontslagen van de kliniek van het "
66
            "[ZIEKENHUIS-1]. Voor nazorg kan hij worden bereikt via [EMAILADRES-1] "
67
            "of [TELEFOONNUMMER-1]."
68
        )
69
70
        assert doc.deidentified_text == expected_deidentified
71
72
    def test_annotate_intext(self, model):
73
        metadata = {"patient": Person(first_names=["Jan"], surname="Jansen")}
74
        doc = model.deidentify(text, metadata=metadata)
75
76
        expected_intext_annotated = (
77
            "betreft: <PATIENT>Jan Jansen</PATIENT>, bsn <BSN>111222333</BSN>, "
78
            "patnr <ID>000334433</ID>. De patient <PATIENT>J. Jansen</PATIENT> is "
79
            "<LEEFTIJD>64</LEEFTIJD> jaar oud en woonachtig in <LOCATIE>Utrecht"
80
            "</LOCATIE>. Hij werd op <DATUM>10 oktober 2018</DATUM> door arts "
81
            "<PERSOON>Peter de Visser</PERSOON> ontslagen van de kliniek van het "
82
            "<ZIEKENHUIS>UMCU</ZIEKENHUIS>. Voor nazorg kan hij worden bereikt "
83
            "via <EMAILADRES>j.JNSEN.123@gmail.com</EMAILADRES> of "
84
            "<TELEFOONNUMMER>(06)12345678</TELEFOONNUMMER>."
85
        )
86
87
        assert dd.utils.annotate_intext(doc) == expected_intext_annotated