Commit 2ca8ef24 authored by Alexander Scharfenberg's avatar Alexander Scharfenberg Committed by Patrick Schlindwein
Browse files

Refactor/#83 improvments4 strategies

parent 62198c9c
from sklearn.feature_extraction.text import CountVectorizer
from spacy.lang.de.stop_words import STOP_WORDS
from app.summary.summary_strategy_interface import ISummaryStrategy
from app.utilities.utilities import Utilities
class SimpleSpacySummarizer(ISummaryStrategy):
......@@ -15,7 +15,7 @@ class SimpleSpacySummarizer(ISummaryStrategy):
return self._id
def summarize(self, text: str, num_sentences: int):
text = Utilities.clean_up_text(text)
doc = self._nlp(text)
# Divide into tokens, vectorize and remove stop words
......
import math
from app.summary.summary_strategy_interface import ISummaryStrategy
from app.utilities.utilities import Utilities
class SummaryTFIDF(ISummaryStrategy):
......@@ -192,6 +193,7 @@ class SummaryTFIDF(ISummaryStrategy):
return summary
def summarize(self, text: str, num_sentences: int) -> str:
text = Utilities.clean_up_text(text)
text = self._nlp(text)
# put all sentences in a list
......
from summarizer import Summarizer
from app.summary.summary_strategy_interface import ISummaryStrategy
from app.utilities.utilities import Utilities
class BertSummary(ISummaryStrategy):
......@@ -16,6 +17,7 @@ class BertSummary(ISummaryStrategy):
return self._id
def summarize(self, text: str, num_sentences: int) -> str:
"""
This method returns a summary for the given text
......@@ -28,7 +30,7 @@ class BertSummary(ISummaryStrategy):
# 'bert-base-german-cased' multilingual should include german but
# summarizes text differently somehow custom summarizer has to be
# created with a model and tokenizer
text = Utilities.clean_up_text(text)
custom_summarizer = Summarizer(custom_model=self._bert_model,
custom_tokenizer=self._bert_tokenizer)
model = custom_summarizer
......
......@@ -6,6 +6,7 @@ from scipy.spatial import distance_matrix
from app.summary.summary_strategy_interface import ISummaryStrategy
from app.utilities.models import sentence_transformer
from app.utilities.utilities import Utilities
class SentenceEmbeddingSummarizer(ISummaryStrategy):
......@@ -19,6 +20,7 @@ class SentenceEmbeddingSummarizer(ISummaryStrategy):
return self._id
def summarize(self, text: str, num_sentences: int) -> str:
text = Utilities.clean_up_text(text)
text = self._nlp(text)
# convert the article/passage to a list of sentences using spacy
sentences = list(text.sents)
......
......@@ -4,6 +4,7 @@ from typing import Any
from spacy.lang.de.stop_words import STOP_WORDS
from app.summary.summary_strategy_interface import ISummaryStrategy
from app.utilities.utilities import Utilities
class WordEmbeddingSummarizer(ISummaryStrategy):
......@@ -17,6 +18,7 @@ class WordEmbeddingSummarizer(ISummaryStrategy):
return self._id
def summarize(self, text: str, num_sentences: int) -> str:
text = Utilities.clean_up_text(text)
extra_words = list(STOP_WORDS) + list(punctuation) + ['\n']
docx = self._nlp(text)
# Technik um ein Vokabular anzulegen
......
test_text = """Die COVID-19-Impfung schützt vor COVID-19. Auch durch eine
COVID-19-Erkrankung kann man einen Schutz vor COVID-19 aufbauen. Für einen
Schutz vor COVID-19 gelten verschiedene Bedingungen. Dabei spielen u.a. die
der Impfdosen, der Impfabstand und die Dauer nach Durchlaufen der
Infektion bzw. nach Impfung eine Rolle. In Deutschland gelten Personen als
geschützt, die: mit einem in der EU zugelassenen COVID-19-Impfstoff geimpft
wurden und bei denen nach Gabe der letzten Impfstoffdosis mindestens 14 Tage
vergangen sind. Je nach Impfstoff sind für die Erlangung des vollständigen
Impfschutzes eine (Vektor-basierter Impfstoff COVID-19 Vaccine Janssen von
Janssen-Cilag International) oder zwei Impfdosen (Vektor-basierter Impfstoff
Vaxzevria von AstraZeneca sowie mRNA-Impfstoff COVID-19 Vaccine Moderna von
Moderna oder Comirnaty von BioNTech) notwendig. Eine aktuelle Liste von in
der EU zugelassenen COVID-19-Impfstoffen wie auch Informationen zur
notwendigen Anzahl an Impfdosen sind auf den Internetseiten des PEI zu
finden: https://www.pei.de/impfstoffe/covid-19 Entsprechend der Zulassung
muss bei Impfstoffen, bei denen zwei Impfstoffdosen verabreicht werden
müssen, auf die Einhaltung eines Mindestabstands geachtet werden: Beim
mRNA-Impfstoff von Moderna 4 Wochen, beim mRNA-Impfstoff von BioNTech 3
Wochen und beim Vektor-basierten Impfstoff von AstraZeneca 4 Wochen. Hierbei
ist zu beachten, dass die STIKO zur besseren Wirksamkeit der Impfstoffe und
aus Gründen der Impfstoffknappheit einen Impfabstand von 6 Wochen bei
mRNA-Impfstoffen und von 12 Wochen bei der Vektor-basierten Impfung von
AstraZeneca empfiehlt. Personen, die eine Infektion mit SARS-CoV-2
durchgemacht haben (PCR-bestätigt), die weniger als 6 Monate zurückliegt (FAQ
Sollen Personen, die eine SARS-CoV-2-Infektion durchgemacht haben oder von
COVID-19 genesen sind, geimpft werden?). Personen, die eine Infektion mit
SARS-CoV-2 durchgemacht haben (PCR-bestätigt), die mehr als 6 Monate
zurückliegt, und im Anschluss daran einmalig mit einem COVID-19-Impfstoff
geimpft wurden (FAQ Ist bei der Impfung Genesener eine einzige Impfdosis
ausreichend?). Auch wenn das Zeitintervall von 6 Monaten überschritten ist,
reicht eine Dosis zur vollständigen Grundimmunisierung aus. Personen,
die einmal geimpft wurden und nach der ersten Impfstoffdosis eine
SARS-CoV-2-Infektion durchgemacht haben, die weniger als 6 Monate
zurückliegt. Personen, die einmal geimpft wurden, nach der ersten
Impfstoffdosis eine SARS-CoV-2-Infektion durchgemacht haben und 6 Monate
später ein weiteres Mal geimpft wurden. Auch wenn das Zeitintervall von 6
Monaten überschritten ist, reicht eine Dosis zur vollständigen
Grundimmunisierung aus. In Bezug auf die genaue Schutzdauer nach
vollständiger COVID-19-Impfung liegen aktuell noch keine belastbaren Daten
vor. Ob und wann zu einem späteren Zeitpunkt eine Auffrischimpfung nötig ist,
um den Impfschutz aufrecht zu erhalten, ist noch nicht klar (siehe FAQ Muss
eine COVID-19-Impfung zu einem späteren Zeitpunkt aufgefrischt werden?). Die
STIKO wird sich dazu äußern, sobald entsprechende Evidenz vorliegt. Die Dauer
der Wirksamkeit der Impfstoffe hängt u.a. davon ab, inwiefern die Impfwirkung
über Zeit nachlässt und welche Varianten von SARS-CoV-2 in Deutschland
dominant werden. Bei manchen Varianten ist von einer eingeschränkte
Wirksamkeit der COVID-19-Impfstoffe auszugehen (Welchen Einfluss haben die
neuen Varianten von SARS-CoV-2 auf die Wirksamkeit der COVID-19-Impfstoffe?).
Die COVID-19-Impfstoffe sind gut wirksam, vor allem schützen sie sehr gut vor
schweren Verläufen. Dennoch kommen auch bei vollständig geimpften Personen
noch COVID-19-Erkrankungen vor (FAQ Kann es trotz COVID-19-Impfung zu einer
COVID-19-Erkrankung kommen?). Personen, die vollständig geschützt sind,
werden andere Menschen mit hoher Wahrscheinlichkeit nicht mehr anstecken,
ein gewisses Restrisiko bleibt jedoch bestehen (Können Personen,
die vollständig geimpft sind, das Virus weiterhin übertragen?)."""
# test_text = """Die COVID-19-Impfung schützt vor COVID-19. Auch durch eine
# COVID-19-Erkrankung kann man einen Schutz vor COVID-19 aufbauen. Für einen
# Schutz vor COVID-19 gelten verschiedene Bedingungen. Dabei spielen u.a. die
# der Impfdosen, der Impfabstand und die Dauer nach Durchlaufen der
# Infektion bzw. nach Impfung eine Rolle. In Deutschland gelten Personen als
# geschützt, die: mit einem in der EU zugelassenen COVID-19-Impfstoff geimpft
# wurden und bei denen nach Gabe der letzten Impfstoffdosis mindestens 14 Tage
# vergangen sind. Je nach Impfstoff sind für die Erlangung des vollständigen
# Impfschutzes eine (Vektor-basierter Impfstoff COVID-19 Vaccine Janssen von
# Janssen-Cilag International) oder zwei Impfdosen (Vektor-basierter Impfstoff
# Vaxzevria von AstraZeneca sowie mRNA-Impfstoff COVID-19 Vaccine Moderna von
# Moderna oder Comirnaty von BioNTech) notwendig. Eine aktuelle Liste von in
# der EU zugelassenen COVID-19-Impfstoffen wie auch Informationen zur
# notwendigen Anzahl an Impfdosen sind auf den Internetseiten des PEI zu
# finden: https://www.pei.de/impfstoffe/covid-19 Entsprechend der Zulassung
# muss bei Impfstoffen, bei denen zwei Impfstoffdosen verabreicht werden
# müssen, auf die Einhaltung eines Mindestabstands geachtet werden: Beim
# mRNA-Impfstoff von Moderna 4 Wochen, beim mRNA-Impfstoff von BioNTech 3
# Wochen und beim Vektor-basierten Impfstoff von AstraZeneca 4 Wochen. Hierbei
# ist zu beachten, dass die STIKO zur besseren Wirksamkeit der Impfstoffe und
# aus Gründen der Impfstoffknappheit einen Impfabstand von 6 Wochen bei
# mRNA-Impfstoffen und von 12 Wochen bei der Vektor-basierten Impfung von
# AstraZeneca empfiehlt. Personen, die eine Infektion mit SARS-CoV-2
# durchgemacht haben (PCR-bestätigt), die weniger als 6 Monate zurückliegt (FAQ
# Sollen Personen, die eine SARS-CoV-2-Infektion durchgemacht haben oder von
# COVID-19 genesen sind, geimpft werden?). Personen, die eine Infektion mit
# SARS-CoV-2 durchgemacht haben (PCR-bestätigt), die mehr als 6 Monate
# zurückliegt, und im Anschluss daran einmalig mit einem COVID-19-Impfstoff
# geimpft wurden (FAQ Ist bei der Impfung Genesener eine einzige Impfdosis
# ausreichend?). Auch wenn das Zeitintervall von 6 Monaten überschritten ist,
# reicht eine Dosis zur vollständigen Grundimmunisierung aus. Personen,
# die einmal geimpft wurden und nach der ersten Impfstoffdosis eine
# SARS-CoV-2-Infektion durchgemacht haben, die weniger als 6 Monate
# zurückliegt. Personen, die einmal geimpft wurden, nach der ersten
# Impfstoffdosis eine SARS-CoV-2-Infektion durchgemacht haben und 6 Monate
# später ein weiteres Mal geimpft wurden. Auch wenn das Zeitintervall von 6
# Monaten überschritten ist, reicht eine Dosis zur vollständigen
# Grundimmunisierung aus. In Bezug auf die genaue Schutzdauer nach
# vollständiger COVID-19-Impfung liegen aktuell noch keine belastbaren Daten
# vor. Ob und wann zu einem späteren Zeitpunkt eine Auffrischimpfung nötig ist,
# um den Impfschutz aufrecht zu erhalten, ist noch nicht klar (siehe FAQ Muss
# eine COVID-19-Impfung zu einem späteren Zeitpunkt aufgefrischt werden?). Die
# STIKO wird sich dazu äußern, sobald entsprechende Evidenz vorliegt. Die Dauer
# der Wirksamkeit der Impfstoffe hängt u.a. davon ab, inwiefern die Impfwirkung
# über Zeit nachlässt und welche Varianten von SARS-CoV-2 in Deutschland
# dominant werden. Bei manchen Varianten ist von einer eingeschränkte
# Wirksamkeit der COVID-19-Impfstoffe auszugehen (Welchen Einfluss haben die
# neuen Varianten von SARS-CoV-2 auf die Wirksamkeit der COVID-19-Impfstoffe?).
# Die COVID-19-Impfstoffe sind gut wirksam, vor allem schützen sie sehr gut vor
# schweren Verläufen. Dennoch kommen auch bei vollständig geimpften Personen
# noch COVID-19-Erkrankungen vor (FAQ Kann es trotz COVID-19-Impfung zu einer
# COVID-19-Erkrankung kommen?). Personen, die vollständig geschützt sind,
# werden andere Menschen mit hoher Wahrscheinlichkeit nicht mehr anstecken,
# ein gewisses Restrisiko bleibt jedoch bestehen (Können Personen,
# die vollständig geimpft sind, das Virus weiterhin übertragen?)."""
test_text = ("Der britische MI6-Geheimagent James Bond (Daniel Craig) richtet "
"bei einer nicht autorisierten Solo-Mission in Mexiko-Stadt "
"Chaos und Verwüstung an, als er den Schurken Marco Sciarra ("
"Alessandro Cremona) tötet. Nach diversen diplomatischen "
"Verwicklungen suspendiert Geheimdienst-Chef M (Ralph Fiennes) "
"007 vom Dienst, was den Agenten aber nicht davon abhält, "
"seine Jagd nach Sciarras Hintermännern auf eigene Faust "
"fortzusetzen. In Rom nimmt er sich Lucia (Monica Bellucci), "
"die Witwe des Getöteten zur Brust, was ihn schließlich zu einem "
"Treffen der Geheimorganisation Spectre führt. Deren mysteriöser "
"Boss Franz Oberhauser (Christoph Waltz) ist ein alter Bekannter "
"des Agenten. Im MI6 stehen unterdessen die Zeichen auf Umbruch. "
"M wird von Max Denbigh (Andrew Scott), dem neuen Leiter des "
"Centre for National Security, unter Druck gesetzt, "
"das Doppelnull-Programm zu beenden und stattdessen auf den "
"totalen Überwachungsstaat zu setzen. Bond führt seinen Feldzug "
"davon ungerührt fort und gerät bald mit der Hilfe von "
"Quartiermeister Q (Ben Whishaw) und Sekretärin Miss Moneypenny "
"(Naomie Harris) an die Ärztin Madeleine Swann (Léa Seydoux), "
"die Tochter seines Feindes Mr. White (Jesper Christensen). Sie "
"soll ihn seinem Ziel näher bringen: Oberhauser aufzuspüren und "
"zu töten.")
test_text2 = '''Sowohl vollständig durchgeführte Impfungen als auch eine
durchgemachte SARS-CoV-2-Infektion vermitteln bis auf wenige Ausnahmen bei
......
import re
class Utilities:
@staticmethod
def clean_up_text(text):
text = re.sub(r"\s\s+", " ", text)
text = re.sub(r"\s\.", ".", text)
text = re.sub(r"\s,", ",", text)
return re.sub(r"[(\[].*?[)\]]", "", text)
......@@ -77,5 +77,5 @@ scipy==1.6.2
protobuf==3.16.0
summarizer==0.0.7
bert-extractive-summarizer==0.7.1
sentencepiece==0.1.94
sentencepiece==0.1.95
chatette==1.6.3
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment