test_intent_id_similarity.py 7.13 KB
Newer Older
1
2
3
4
5
6
7
8
9
from unittest import TestCase
from app.utilities.generator import IntentHandler
from app.similarity.cluster_algorithm import find_intent_clusters
from app.similarity.intent import Intent


class TestSimilarityAnalysis(TestCase):
    rki_faq = [
        "Was ist über den Erreger und die Krankheit bekannt?",
10
11
12
13
14
15
16
        "Wie erfasst das RKI die Situation in Deutschland, wie schätzt das RKI"
        " die Lage ein und welche Empfehlungen gibt es für die "
        "Fachöffentlichkeit?",
        "Was versteht man unter der Reproduktionszahl R, und wie wichtig ist"
        " sie für die Bewertung der Lage?",
        "Welchen Zusammenhang gibt es generell zwischen erhöhten Testzahlen "
        "und erhöhten Fallzahlen?",
17
18
19
20
        "Gibt es eine Saisonalität bei SARS-CoV-2?",
        "Welche Rolle spielen die neuen, besorgniserregenden Varianten?",
        "Wo gibt es die aktuellen Fallzahlen und Inzidenzen?",
        "Was ist alles meldepflichtig?",
21
22
23
24
25
26
27
28
29
30
        "Wie funktioniert der Meldeweg und welche Informationen zu den "
        "Erkrankten werden ans RKI übermittelt?",
        "Werden die Meldedaten durch die wachsende Anzahl an Schnelltests "
        "verzerrt?",
        "Wie entsteht die Diskrepanz zwischen Inzidenzen der Landkreise und "
        "den Angaben des RKI-Dashboards?",
        "Warum sind die Fallzahlen am/nach dem Wochenende geringer als an "
        "Arbeitstagen?",
        "Wie erfassen Gesundheitsämter Fälle, Ausbrüche und "
        "Infektionsumstände?",
31
        "Wie werden Todesfälle erfasst?",
32
33
34
35
36
37
        "Weiß man, wie viele COVID-19-Patienten im Krankenhaus und auf "
        "Intensivstationen behandelt werden und wie viele"
        " die akute Infektion überstanden haben?",
        "Was ist der Unterschied zwischen den COVID-19-Meldedaten nach "
        "<abbr>IfSG </abbr>und SARS-CoV-2-Nachweisen aus"
        " dem Sentinel der Arbeitsgemeinschaft Influenza?",
38
        "Warum bilden sich die COVID-19-Wellen bisher nicht bei GrippeWeb ab?",
39
40
41
42
43
        "Wieso unterscheidet sich die Anzahl der COVID-19 Fälle aus dem "
        "ICOSARI-Krankenhaus-Sentinel von der Anzahl"
        " Intensivpatienten mit COVID-19 aus dem DIVI-Intensivregister?",
        "Welche Gruppen sind besonders häufig von einem schweren Verlauf "
        "betroffen?",
44
45
46
47
        "Ist man nach einer durchgemachten SARS-CoV-2-Infektion immun?",
        "Was ist über COVID-19 bei Kindern und Jugendlichen bekannt?",
        "Was ist über COVID-19 bei Schwangeren bekannt?",
        "Ist die Blutgruppe ein Risikofaktor für COVID-19?",
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
        "Welche Behandlungsmöglichkeiten stehen für eine COVID-19-Erkrankung"
        " zur Verfügung?",
        "Warum sind bei SARS-CoV-2/COVID-19 solche weitreichenden Maßnahmen"
        " erforderlich?",
        "Wie kann man sich bzw. seine Mitmenschen vor einer Ansteckung"
        " schützen?",
        "Welche Rolle spielen die Impfungen gegen COVID-19, Impfungen im"
        " Rahmen der Pandemie und was gilt es beim"
        " Impfen zu beachten?",
        "Welchen Vorteil bringt Abstand halten die Beschränkung sozialer"
        " Kontakte?",
        "Was ist beim Tragen einer Mund-Nasen-Bedeckung bzw. eines"
        " Mund-Nasen-Schutzes (\"OP-Maske\") in der "
        "Öffentlichkeit zu beachten?",
        "Welche Funktion bzw. Einsatzbereiche haben FFP2-Masken außerhalb des"
        " Arbeitsschutzes?",
        "Ist der Einsatz von Visieren anstatt einer Mund-Nasen-Bedeckung im"
        " öffentlichen Raum sinnvoll?",
66
67
68
        "Ist der Einsatz von Visieren im öffentlichen Raum sinnvoll?",
        "Welche Rolle spielen Aerosole bei der Übertragung von SARS-CoV-2?",
        "Was ist beim Lüften zu beachten?",
69
70
        "Können Luftreinigungsgeräte bzw. mobile Luftdesinfektionsgeräte"
        " andere Hygienemaßnahmen ersetzen?",
71
72
        "Was ist aus Sicht des Infektionsschutzes im Schulumfeld zu beachten?",
        "Was ist beim Umgang mit an COVID-19-Verstorbenen zu beachten?",
73
74
75
        "Was müssen Arbeitnehmerinnen und Arbeitnehmer während der"
        " COVID-19-Pandemie beachten, welche Verpflichtungen"
        " haben Arbeitgeber?",
76
        "Was ist bei Reisen zu beachten?",
77
78
79
        "Besteht die Gefahr, sich über Lebensmittel, Oberflächen,"
        " Gegenstände oder in der Umwelt mit SARS-CoV-2"
        " anzustecken?",
80
        "Welche Empfehlungen gibt es für den Umgang mit Haustieren?",
81
82
        "Was versteht man unter Isolierung, was unter Quarantäne und welchen"
        " Zweck haben diese?",
83
84
        "Wann und wie lange muss man in Quarantäne?",
        "Was wird empfohlen bei Personen, die als genesen gelten?",
85
86
        "Was versteht man unter Kontaktpersonennachverfolgung, was müssen"
        " Kontaktpersonen beachten?",
87
88
89
90
        "Wie funktioniert die Corona Warn-App?",
        "Wie funktioniert die Corona App?",
        "Was ist ein Containment Scout?",
        "Wie geht man bei Ausbruchsuntersuchungen vor?",
91
92
        "Wie wird eine Infektion mit SARS-CoV-2 labordiagnostisch nachgewiesen"
        ", welche Tests gibt es?",
93
        "Welche Anforderungen werden an Antigen-Tests gestellt?",
94
95
96
97
        "Was ist bei Antigentests zur Eigenanwendung (Selbsttests) zu"
        " beachten?",
        "Wann sollte ein Arzt eine Laboruntersuchung auf SARS-CoV-2"
        " veranlassen?",
98
99
100
101
102
103
104
105
106
107
108
        "Was sollen Betroffene mit Symptomen tun?",
        "Was sollen Symptomen mit Betroffene tun?",
        "Was sollen Betroffene tun?",
        "Wie wird die Anzahl an Labortests in Deutschland erfasst?",
        "Was bedeutet die Positivenquote?",
        "Welche Rolle spielen falsch-positive Testergebnisse?",
        "Ist ein Test bei Personen ohne jedes Krankheitszeichen sinnvoll? ",
        "Warum sind Genomsequenzierungen wichtig?",
        "Wo gibt es weitere Informationen?"
    ]

109
110
111
112
113
114
115
    def test_similarity(self):
        """
        In this case two similar Intents are created and the
        Intent:similarity_intent() method is tested
        """

        # generate 2 similar ids
116
117
        ih = IntentHandler(TestSimilarityAnalysis.rki_faq[53])
        ih2 = IntentHandler(TestSimilarityAnalysis.rki_faq[54])
118
        id1 = ih.generate_intent_id(3).replace("_", " ")
119
120
        id2 = ih2.generate_intent_id(3).replace("_", " ")

121
122
        # init id vectors
        intent1 = Intent(id1)
123
124
125
        intent2 = Intent(id2)

        # check if they are similar
126
        self.assertGreaterEqual(intent1.similarity_intent(intent2), 0.85)
127
128

    def test_cluster(self):
129
130
131
132
133
        """
        In this case the find_intent_clusters() method is tested.
        """

        # init
134
135
136
137
138
        intent_list = []

        # generate ids for all questions and init the id vectors
        for q in TestSimilarityAnalysis.rki_faq:
            ih = IntentHandler(q)
139
140
            id1 = ih.generate_intent_id(3).replace("_", " ")
            intent = Intent(id1)
141
142
143
144
145
146
147
148
149
150
151
152
153
154
            if intent.vector_norm > 0:
                intent_list.append(intent)

        # generate the clusters
        cluster_list = find_intent_clusters(intent_list, 0.85, 10)

        # find clusters with more then 1 entry
        counter = 0
        for cluster in cluster_list:
            if len(cluster) > 1:
                counter += 1

        # check if all 4 clusters were found
        self.assertEqual(counter, 4)