test_summary_sentence_embedding.py 12.5 KB
Newer Older
1
import math
2
from unittest import TestCase
3
4

from app.summary.summary_sentence_embedding import SentenceEmbeddingSummarizer
Nils König's avatar
Nils König committed
5
import spacy
6
7
8


class TestSummarizationSentenceEmbedding(TestCase):
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
    test_text = (
        "Herr Doktor Çelik, wir sprechen regelmäßig über Ihre Arbeit "
        "als Oberarzt auf der Isolierstation für Covid-19-Kranke im "
        "Klinikum Darmstadt. Wie ist aktuell die Lage? Es ist ein "
        "gemischtes Bild. Aktuell haben wir bei uns den Zenit der "
        "Neuaufnahmen vorerst überschritten. Wir wissen noch nicht "
        "genau, wie es weitergeht. Aber auf der Normalstation "
        "entspannt sich die Situation etwas, wir haben in den "
        "vergangenen Tagen weniger Patienten aufgenommen und "
        "gleichzeitig einige Patienten entlassen können. Ganz anders "
        "sieht es leider auf der Intensivstation aus: Da steigt die "
        "Zahl der Covid-Patienten, gerade mussten die Räumlichkeiten "
        "vergrößert werden. In der Vergangenheit war es so, dass sich "
        "die Situation zuerst auf der Normalstation entspannt hat und "
        "zwei Wochen später dann auf der Intensivstation. Jetzt ist "
        "die Besonderheit zu beobachten, dass viele Patienten sehr "
        "schnell nach der Krankenhausaufnahme auf die Intensivstation "
        "müssen. Die klinischen Verläufe sind momentan schwerer. Die "
        "Korrelation zwischen Patienten auf der Normal- und auf der "
        "Intensivstation ist in der dritten Welle durcheinandergeraten"
        ". Woran liegt das? Insgesamt haben sich die Kenngrößen in der"
        " Pandemie verändert. In den ersten zwei Wellen war der Anteil"
        " der Infizierten, die im Krankenhaus behandelt werden müssen,"
        " recht konstant – also die Hospitalisierungsrate. Das ist ein"
        " wichtiger Wert für die Planung im Krankenhaus und für"
        " politische Maßnahmen. Dieser Wert scheint niedriger geworden"
        " zu sein, weil viele alte Menschen jetzt geimpft sind. Es"
        " brauchen weniger Infizierte eine Krankenhausbehandlung."
        " Gleichzeitig scheint die Intensivquote aber deutlich höher"
        " zu sein – also der Anteil der Patienten im Krankenhaus, die"
        " auf die Intensivstation müssen. Durch die Mutation B.1.1.7"
        " hat sich der Verlauf der Krankheit verändert. Es müssen"
        " viele junge Menschen unter 50 mit sehr schweren Verläufen"
        " behandelt werden. Das kann eigentlich nur an der Mutation"
        " liegen. Alle anderen Faktoren waren in der zweiten Welle"
        " ähnlich wie jetzt. Auch die Inzidenz unter den jüngeren"
        " Menschen war nicht viel niedriger. Aber in der dritten Welle"
        " sehen wir viel häufiger junge Patienten mit schweren"
        " Verläufen. Inwiefern haben sich die Verläufe verändert?"
        " Vorher kamen die Patienten meist eine Woche nach"
        " Symptombeginn mit milden oder schweren Symptomen auf die"
        " Normalstation, zu Beginn der zweiten Krankheitswoche hat"
        " sich oft eine Verschlechterung eingestellt. Jetzt läuft es"
        " bei uns öfter so, dass die Patienten schon mit sehr wenig"
        " Sauerstoff im Blut in der Notaufnahme ankommen oder schon"
        " Gefäßverschlüsse haben. Einige müssen direkt auf die"
        " Intensivstation – das haben wir vorher selten gesehen, jetzt"
        " kommt das regelmäßig vor. Sollte der Anteil der"
        " intensivpflichtigen Patienten unter den Infizierten weiter"
        " ansteigen, hilft auch ein leichtes Absinken der"
        " Neuinfiziertenzahlen nicht, um die Intensivstationen zu"
        " entlasten. Aber noch lässt sich das nicht richtig"
        " einschätzen. Es ist also noch kein Grund zur Freude, dass"
        " sich der Inzidenzwert auf hohem Niveau eingependelt hat? In"
        " Darmstadt liegt er schon seit ein paar Wochen um 100, da"
        " scheint ein Plateau erreicht. Aber der Inzidenzwert muss in"
        " seiner Bedeutung für uns neu geeicht werden. Er ist immer"
        " noch eine entscheidende Größe, aber wir wissen nicht mehr"
        " genau, welcher Wert welche Bedeutung für die Entwicklung im"
        " Krankenhaus hat. Subjektiv wirkt es bei uns so, als müssten"
        " die jüngeren Patienten im Schnitt länger behandelt werden,"
        " auch das spielt eine Rolle. Sie haben eine sehr viel höhere"
        " Chance, die Intensivtherapie zu überleben – aber mit einer"
        " höheren Liegezeit. Wann verlegen Sie Patienten von der"
        " Normal- auf die Intensivstation? Covid-Stationen sind"
        " mittlerweile richtige Überwachungsstationen geworden. Es"
        " werden sekundengenau die Vitalparameter der Patienten"
        " überwacht, so können auch Patienten, die einen höheren"
        " Sauerstoffbedarf haben, noch lange sicher bei uns behalten"
        " werden. Ein Patient muss beispielsweise auf die"
        " Intensivstation, wenn er mehr Sauerstoff braucht, als man"
        " auf einer Normalstation verabreichen kann. Maschinelle"
        " Druckbeatmung findet zum Beispiel auf der Intensivstation"
        " statt. Außerdem wird ein Patient verlegt, wenn wir merken,"
        " dass eine sehr unheilvolle Dynamik begonnen hat. Tritt"
        " innerhalb von kurzer Zeit eine Verschlechterung der"
        " Sauerstoffwerte auf und verschlechtert sich gleichzeitig das"
        " Röntgenbild der Lunge, verlegen wir manchmal Patienten, die"
        " ihre Luftnot selbst noch gar nicht so bemerken. Man"
        " erschrickt immer noch darüber, wenn man einen Patienten, der"
        " lächelt und mit uns spricht, auf die Intensivstation verlegt"
        " und er dort Stunden später intubiert werden muss. Es wurde"
        " bekannt, dass Asthmaspray bei Covid-Erkrankungen helfen kann"
        ". Beobachten Sie das auch? Zu Beginn der Pandemie wurden"
        " Asthmakranke als Risikogruppe eingestuft. Man hat aber sehr"
        " schnell gemerkt, dass sie eher keine schweren Verläufe haben"
        ". Und dann hat man überprüft, ob das vielleicht an"
        " Asthmasprays mit Kortison liegt. Eine Studie deutet darauf"
        " hin, dass Covid-Patienten, die das früh im Krankheitsverlauf"
        " nutzen, seltener einen schweren Verlauf haben. Diese Studie"
        " hat eine Hypothese generiert und ist Anlass für weitere,"
        " größere Studien. Man kann aus ihr noch keine Empfehlung für"
        " eine prophylaktische Einnahme oder sogar eine Nutzung ohne"
        " ärztlichen Rat ableiten. Das Spray hat auch potentielle"
        " Nebenwirkungen, es kann zu bakteriellen Pneumonien führen"
        " oder zu Pilzinfekten im Mund. Deswegen sollte man das nur"
        " nehmen, wenn es der Hausarzt oder Lungenarzt empfiehlt. Aus"
        " welchen Bevölkerungsgruppen kommen Ihre Patienten aktuell?"
        " Das sind Menschen, die mitten im Leben stehen: Eltern,"
        " Berufstätige, oft auch Menschen aus prekären Wohn- und"
        " Arbeitsverhältnissen. Die Ansteckungen finden, soweit man"
        " das eruieren kann, weiterhin vor allem im familiären und"
        " beruflichen Umfeld statt. In vielen Personalabteilungen wird"
        " leider aus mangelndem Detailwissen sehr inkonsequent"
        " gehandelt. Wenn man den Personalabteilungen oder den Chefs"
        " die Entscheidungen über das Kontaktpersonenmanagement"
        " überlässt, geht vieles schief. Wir haben immer wieder"
        " mitbekommen, dass eine Quarantäne nach einem Risikokontakt"
        " abgekürzt wurde, weil es keine Symptome gab und direkt nach"
        " dem Kontakt ein Test gemacht worden ist. Das geschieht auch"
        " aus Unwissen, weil Gesundheitsämter nicht eingebunden oder"
        " nicht erreicht werden. Jeder Fehler kann zu weiteren"
        " Infektionen führen. Wie ist die Stimmung beim"
        " Krankenhauspersonal? Die Reserven sind erschöpft, wir machen"
        " das seit einem Jahr. Und dass jetzt so viele jüngere"
        " Patienten betroffen sind, ist emotional noch mal belastender"
        ". Viele junge Patienten hatten sich in Sicherheit gewähnt und"
        " sind sehr erschrocken darüber, wenn es sie auf einmal so"
        " hart trifft. Das geht auch an hartgesottenen Pflegenden und"
        " Medizinern nicht spurlos vorbei. Es ist auf der einen Seite"
        " zunehmend schwierig, Personal für die Covid-Abteilung zu"
        " gewinnen. Auf der anderen Seite macht die Covid-Abteilung"
        " die Abläufe in allen anderen Bereichen des Krankenhauses"
        " nicht leichter. Mal müssen wir uns ausbreiten, dann wieder"
        " zurückziehen, das ist schwer kalkulierbar. Es kann in einem"
        " Krankenhaus grade nur sehr schlecht geplant werden, und das"
        " ist immer Gift für die Stimmung beim Personal. Was halten"
        " Sie davon, dass sich prominente Schauspieler unter dem"
        " Schlagwort #allesdichtmachen über Corona-Maßnahmen lustig"
        " machen? Der wirtschaftliche und kulturelle Schaden des"
        " vergangenen Jahres ist sicher groß, es steckt also ein Kern"
        " legitimer Kritik in dieser Aktion – oder zumindest eine"
        " nachvollziehbare Motivation. Allerdings ist meiner Meinung"
        " nach der Inhalt, den ich nicht von Querdenker-Argumenten"
        " unterscheiden kann, der Zynismus und die spottende Ironie,"
        " Gift für die öffentliche Diskussion, ohne dass ich im Detail"
        " auf die Thesen eingehen möchte. Es ist in diesen"
        " Diskussionen sehr wichtig, sachlich zu bleiben. Diese Aktion"
        " ist meiner Meinung nach das Gegenteil: polemisierend,"
        " populistisch, wissenschaftsleugnend und unfair. Speziell von"
        " Menschen, die das Glück haben, durch Alter und"
        " sozioökonomischen Status nicht zur absoluten Risikogruppe zu"
        " gehören. Offen gesagt, fühlt man sich als Mediziner davon"
        " verhöhnt. Ich glaube vielen Menschen in den"
        " Gesundheitsberufen, aber auch Angehörigen und Patienten geht"
        " es gerade so. Sie wurden kürzlich mit Astra-Zeneca geimpft."
        " Warum? Für Ihr Alter ist der Impfstoff nicht mehr empfohlen."
        " Einige Bundesländer lockern die Vorgaben dazu bereits. Ich"
        " hatte eigentlich einen Termin für eine Biontech-Impfung,"
        " habe aber darum gebeten, dass ich einen anderen Impfstoff"
        " bekomme. Ich halte den Impfstoff für mich persönlich für"
        " sicher und wirksam. Vor Ort konnte ich noch mit einer"
        " ärztlichen Kollegin reden und wurde nach einer Beratung mit"
        " dem Vakzin von Astra-Zeneca geimpft. Der Impfstoff wird"
        " aktuell oft von Menschen über 60 verschmäht, bleibt häufiger"
        " liegen, das bremst die Impfkampagne. Ich möchte einfach,"
        " dass die Impfkampagne schnell vorankommt.")

167
    def test_summarize_text(self):
168
169
170
171
172
173
        """
        In this case the summarize function is tested.
        """

        summary_sentence_embedding = SentenceEmbeddingSummarizer()

174
175
        summary = summary_sentence_embedding.summarize(self.test_text,
                                                       max_length=130)
176
177
178
        assert type(summary) == str

    def test_summarize_text_length(self):
179
180
181
182
183
184
        """
        In this case the length of the summary is tested.
        """

        summary_sentence_embedding = SentenceEmbeddingSummarizer()

185
186
        summary = summary_sentence_embedding.summarize(self.test_text,
                                                       max_length=130)
Nils König's avatar
Nils König committed
187
188
189
190
        nlp = spacy.load('de_core_news_sm')
        text = nlp(self.test_text)
        sentences = list(text.sents)
        sentences = [sentence.text.strip() for sentence in sentences]
191
192
193
194
        total_sentences_text = len(sentences)

        min_num_sentences_for_summary = 1
        max_num_sentences_for_summary = 10
195
196
197
        num_sentences_in_percent = 0.3
        num_sentences_for_summary = math.floor(total_sentences_text *
                                               num_sentences_in_percent)
198

199
200
201
202
        if num_sentences_for_summary < min_num_sentences_for_summary:
            num_sentences_for_summary = min_num_sentences_for_summary
        elif num_sentences_for_summary > max_num_sentences_for_summary:
            num_sentences_for_summary = max_num_sentences_for_summary
203

Nils König's avatar
Nils König committed
204
205
206
        text_summary = nlp(summary)
        sentences_summary = list(text_summary.sents)
        sentences_summary = [sentence.text.strip() for sentence in
207
208
                             sentences_summary]
        total_sentences_summary = len(sentences_summary)
209

210
        assert num_sentences_for_summary == total_sentences_summary