Commit a3e26980 authored by Patrick Schlindwein's avatar Patrick Schlindwein
Browse files

Merge branch 'learn/#16_Evaluation_strategies' into 'master'

[learn,#16]strategies & documentation

See merge request !32
parents 077aea15 6bbed5fc
Pipeline #70346 passed with stages
in 11 minutes and 30 seconds
......@@ -118,4 +118,9 @@ Für bestehende Quellen (Webseiten, Word-Docx, PDF, ...) werden Änderungen auto
- Als Quelle dient eine beliebige Webseite, Änderungen wieder automatisch überwachen und Änderungen des Chatbot-Wissens entsprechend in einer MongoDB eintragen.
## Definition of Done
- Schlagen Sie eine vor :)
1. Akzeptanzkriterien erfüllt
2. Review durchgeführt mit Issue-Partner
3. Code läuft fehlerfrei
4. Merge Request stellen & angenommen vom Git-Head
5. Doku ist erstellt und aktuell in Git-Issues
6. ReadMe wird ergänzt im Projekt
from summarizer import Summarizer
from transformers import BertModel, BertTokenizer
bertgerman_model = BertModel.from_pretrained('bert-base-german-cased', output_hidden_states=True)
bertgerman_tokenizer = BertTokenizer.from_pretrained('bert-base-german-cased')
custom_summarizer = Summarizer(custom_model=bertgerman_model, custom_tokenizer=bertgerman_tokenizer)
model = custom_summarizer
body = '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.'
result = model(body, ratio=0.2) # Specified with ratio
result = model(body, num_sentences=3) # Will return 3 sentences
print(result)
##__________________________________________________________
from summarizer import Summarizer
from transformers import BertModel, BertTokenizer
bertgerman_model = BertModel.from_pretrained('bert-base-german-cased', output_hidden_states=True)
bertgerman_tokenizer = BertTokenizer.from_pretrained('bert-base-german-cased')
custom_summarizer = Summarizer(custom_model=bertgerman_model, custom_tokenizer=bertgerman_tokenizer)
model = custom_summarizer
body = '''
Die ersten Patente auf das Prinzip des Transistors meldete Julius Edgar Lilienfeld im Jahr 1925 an.[3] Lilienfeld beschreibt in seiner Arbeit ein elektronisches Bauelement, das Eigenschaften einer Elektronenröhre aufweist und im weitesten Sinne mit dem heute als Feldeffekttransistor (FET) bezeichneten Bauelement vergleichbar ist. Zu dieser Zeit war es technisch noch nicht möglich, Feldeffekttransistoren praktisch zu realisieren.[4]
Im Jahr 1934 ließ der Physiker Oskar Heil den Aufbau eines Feldeffekttransistor patentieren, bei dem es sich um einen Halbleiter-FET mit isoliertem Gate handelt.[5] Die ersten praktisch realisierten Sperrschicht-Feldeffekttransistoren JFETs mit einem p-n-Übergang (positiv-negativ) und einem Gate als Steuerelektrode gehen auf Herbert F. Mataré, Heinrich Welker sowie parallel dazu William Shockley und Walter H. Brattain aus dem Jahr 1945 zurück.[6] Der Feldeffekttransistor wurde somit historisch vor dem Bipolartransistor realisiert, konnte sich damals aber noch nicht praktisch durchsetzen. Damals wurden diese Bauelemente noch nicht als Transistor bezeichnet; den Begriff „Transistor“ prägte John R. Pierce im Jahr 1948.[2]
Ab 1942 experimentierte Herbert Mataré bei Telefunken mit dem von ihm als Duodiode (Doppelspitzendiode) bezeichneten Bauelement im Rahmen der Entwicklung eines Detektors für Doppler-Funkmess-Systeme (RADAR). Die von Mataré dazu aufgebauten Duodioden waren Punktkontakt-Dioden auf Halbleiterbasis mit zwei sehr nahe beieinander stehenden Metallkontakten auf dem Halbleitersubstrat. Mataré experimentierte dabei mit polykristallinem Silizium (kurz: Polysilizium), das er von Karl Seiler aus dem Telefunken-Labor in Breslau bezog, und mit Germanium, das er von einem Forschungsteam der Luftwaffe bei München (in dem auch Heinrich Welker mitwirkte) erhielt. Bei den Experimenten mit Germanium entdeckte er Effekte, die sich nicht als zwei unabhängig arbeitende Dioden erklären ließen: Die Spannung an der einen Diode konnte den Strom durch die andere Diode beeinflussen. Diese Beobachtung bildete die Grundidee für die späteren Spitzentransistoren, eine frühe Bauform des Bipolartransistors.
In den Bell Laboratories in den Vereinigten Staaten entwickelte die Gruppe um John Bardeen, William Shockley und Walter Brattain den ersten funktionierenden Bipolartransistor in Form eines Spitzentransistors, der am 23. Dezember 1947 erstmals firmenintern präsentiert werden konnte.[7][8][9] Für die Erfindung des Bipolartransistors erhielten John Bardeen, William Shockley und Walter Brattain 1956 den Nobelpreis für Physik. Da Shockley mit seinem Team einen Bipolartransistor realisiert hatten, welcher nicht auf dem Funktionsprinzip eines Feldeffekttransistors basiert, finden sich in dem US-Patent auch keine Referenzen auf die theoretischen Vorarbeiten von Lilienfeld und Heil aus den 1920er Jahren.[10][11]
Unabhängig von den Arbeiten in den USA entwickelten die beiden Wissenschaftler Herbert Mataré und Heinrich Welker in Frankreich ebenfalls einen funktionsfähigen Bipolartransistor. Sie waren einige Monate später erfolgreich und meldeten dafür am 13. August 1948 in Paris ein Patent an.[12][13][14] Am 18. Mai 1949 wurde diese Entwicklung unter dem Kunstwort „Transistron“ der Öffentlichkeit vorgestellt, der neue Begriff „Transistron“ fand aber in Folge keine wesentliche Verbreitung.[15]
In den Folgejahren folgen weitere, technologische Verbesserungen. So gelang der Gruppe um Gordon Teal, Morgan Sparks und William Shockley bei den Bell Labs im Jahr 1951 die Herstellung eines Flächentransistors, welcher aus nur einem Kristall besteht. Bis dahin waren Bipolartransistoren als Spitzentransistoren aufgebaut.[16]
In den 1950er-Jahren gab es einen Wettlauf zwischen der Elektronenröhre und den damals üblichen Bipolartransistoren, in dem die Chancen des Bipolartransistors wegen der vergleichsweise niedrigen Transitfrequenzen häufig eher skeptisch beurteilt wurden. Die geringe Größe, der geringe Energiebedarf und später die zunehmenden Transitfrequenzen der Transistoren führten jedoch dazu, dass in den 1960er Jahren die Elektronenröhren als Signalverstärker auf fast allen technischen Gebieten abgelöst wurden.
Feldeffekttransistoren spielten im praktischen Einsatz, im Gegensatz zu den ersten Bipolartransistoren, in den 1950er bis in die späten 1960er Jahre noch kaum eine Rolle, obwohl deren theoretischen Grundlagen länger bekannt sind. Feldeffekttransistoren ließen sich mit den damaligen Kenntnissen nicht wirtschaftlich fertigen und waren wegen der Durchschlagsgefahr des Gates durch unbeabsichtigte elektrostatische Entladung umständlich zu handhaben. Zur Lösung der bei bipolaren Transistoren auftretenden Probleme wie Leistungsbedarf und Anforderungen für integrierte Schaltungen beschäftigten sich Entwickler ab etwa 1955 eingehender mit den Halbleiteroberflächen und fanden Fertigungsverfahren wie die Planartechnik, die die Feldeffekttransistoren im Folgejahrzehnt zur Serienreife brachten.
Die ersten handelsüblichen Bipolartransistoren wurden aus dem Halbleitermaterial Germanium hergestellt und ähnlich wie Elektronenröhren in winzige Glasröhrchen eingeschmolzen. Die verschieden dotierten Zonen entstanden mit einem zentralen Germaniumplättchen, in das von beiden Seiten „Indiumpillen“ anlegiert waren.[17][18] Letztere drangen damit tief in das Grundmaterial ein, in der Mitte blieb aber eine Basisstrecke gewünschter Dicke frei. Im Jahr 1954 kamen Bipolartransistoren aus Silizium auf den Markt (Gordon Teal bei Texas Instruments und Morris Tanenbaum an den Bell Labs). Dieses Grundmaterial war einfacher verfügbar und preisgünstiger. Seit den späten 1960er Jahren kamen großteils Metall- oder Kunststoffgehäuse zur Anwendung. Einsatzbereiche lagen zunächst in der analogen Schaltungstechnik wie den damals aufkommenden Transistorradios. Das Basismaterial Germanium wurde in Folge verstärkt durch das technisch vorteilhaftere Silizium ersetzt, das einen größeren Arbeitstemperaturbereich bei wesentlich geringeren Restströmen abdeckte und durch die Siliziumdioxid-Passivierung langzeitstabiler in den elektrischen Kennwerten gegenüber Germanium ist.
Der erste auf Galliumarsenid basierende Feldeffekttransistor, sogenannte MESFET, wurde 1966 von Carver Mead entwickelt.[19] Dünnschichttransistoren (engl. thin film transistor, abgekürzt TFT) wurden bereits 1962 von P. Weimer entwickelt, konnten aber erst rund 30 Jahre später im Bereich heute üblicher farbiger TFT-Displays einen Anwendungsbereich finden.[20]
Werden alle Transistoren in sämtlichen bislang hergestellten Schaltkreisen wie Arbeitsspeicher, Prozessoren usw., zusammengezählt, ist der Transistor inzwischen diejenige technische Funktionseinheit, die von der Menschheit in den höchsten Gesamtstückzahlen produziert wurde und wird. Moderne integrierte Schaltungen, wie die in Personal Computern eingesetzten Mikroprozessoren, bestehen aus vielen Millionen bis Milliarden Transistoren.
'''
##result = model(body, ratio=0.2) # Specified with ratio
##result = model(body, num_sentences=5) # Will return 3 sentences
##print(result)
result = model(body, max_length=500) ##max_length und min_length agieren sehr random, hier gilt es auszutesten, welcher Param sich eignet
full = ''.join(result)
print(full)
print(len(full))## Anzahl Zeichen der Zusammenfassung
print(len(body)) ## Anzahl Zeichen des Originaltexts
\ No newline at end of file
#!/usr/bin/env python
# coding: utf-8
import nltk
from nltk.corpus import stopwords
from nltk.cluster.util import cosine_distance
import numpy as np
import networkx as nx
def read_article(file_name):
file = open(file_name, "r")
filedata = file.readlines()
article = filedata[0].split(". ")
sentences = []
for sentence in article:
print(sentence)
sentences.append(sentence.replace("[^a-zA-Z]", " ").split(" "))
sentences.pop()
return sentences
def sentence_similarity(sent1, sent2, stopwords=None):
if stopwords is None:
stopwords = []
sent1 = [w.lower() for w in sent1]
sent2 = [w.lower() for w in sent2]
all_words = list(set(sent1 + sent2))
vector1 = [0] * len(all_words)
vector2 = [0] * len(all_words)
# build the vector for the first sentence
for w in sent1:
if w in stopwords:
continue
vector1[all_words.index(w)] += 1
# build the vector for the second sentence
for w in sent2:
if w in stopwords:
continue
vector2[all_words.index(w)] += 1
return 1 - cosine_distance(vector1, vector2)
def build_similarity_matrix(sentences, stop_words):
# Create an empty similarity matrix
similarity_matrix = np.zeros((len(sentences), len(sentences)))
for idx1 in range(len(sentences)):
for idx2 in range(len(sentences)):
if idx1 == idx2: # ignore if both are same sentences
continue
similarity_matrix[idx1][idx2] = sentence_similarity(sentences[idx1], sentences[idx2], stop_words)
return similarity_matrix
def generate_summary(file_name, top_n=5):
nltk.download("stopwords")
stop_words = stopwords.words('english')
summarize_text = []
# Step 1 - Read text anc split it
sentences = read_article(file_name)
# Step 2 - Generate Similary Martix across sentences
sentence_similarity_martix = build_similarity_matrix(sentences, stop_words)
# Step 3 - Rank sentences in similarity martix
sentence_similarity_graph = nx.from_numpy_array(sentence_similarity_martix)
scores = nx.pagerank(sentence_similarity_graph)
# Step 4 - Sort the rank and pick top sentences
ranked_sentence = sorted(((scores[i], s) for i, s in enumerate(sentences)), reverse=True)
print("Indexes of top ranked_sentence order are ", ranked_sentence)
for i in range(top_n):
summarize_text.append(" ".join(ranked_sentence[i][1]))
# Step 5 - Offcourse, output the summarize texr
print("Summarize Text: \n", ". ".join(summarize_text))
# let's begin
generate_summary("BS.txt", 2)
\ No newline at end of file
#importiere sprachklasse deutsch
from spacy.lang.de import German
from spacy.lang.de.stop_words import STOP_WORDS
from string import punctuation
import spacy
# erstelle nlp-objekt,welches verarbeitungspipeline enthält
extra_words=list(STOP_WORDS)+list(punctuation)+['\n']
nlp= spacy.load("de_core_news_sm")
doc = """
Ein Betriebssystem, auch OS (von englisch operating system) genannt, ist eine Zusammenstellung von Computerprogrammen, die die Systemressourcen eines Computers, wie Arbeitsspeicher, Festplatten, Ein- und Ausgabegeräte verwaltet und diese Anwendungsprogrammen zur Verfügung stellt.
Das Betriebssystem bildet dadurch die Schnittstelle zwischen den Hardware-Komponenten und der Anwendungssoftware des Benutzers.[2] Betriebssysteme bestehen in der Regel aus einem Kernel (deutsch: Kern), der die Hardware des Computers verwaltet, sowie speziellen Programmen, die beim Start unterschiedliche Aufgaben übernehmen.
Zu diesen Aufgaben gehört unter anderem das Laden von Gerätetreibern. Betriebssysteme finden sich in fast allen Arten von Computern:
Als Echtzeitbetriebssysteme auf Prozessrechnern und Eingebetteten Systemen, auf Personal Computern, Tabletcomputern, Smartphones und auf größeren Mehrprozessorsystemen wie z. B. Servern und Großrechnern.
Die Aufgaben eines Betriebssystems lassen sich wie folgt zusammenfassen: Benutzerkommunikation; Laden, Ausführen, Unterbrechen und Beenden von Programmen; Verwaltung und Zuteilung der Prozessorzeit; Verwaltung des internen Speicherplatzes für Anwendungen; Verwaltung und Betrieb der angeschlossenen Geräte; Schutzfunktionen z. B. durch Zugriffsbeschränkungen.
Die Gewichtung zwischen diesen Aufgaben wandelte sich im Laufe der Zeit, insbesondere wird Schutzfunktionen wie dem Speicherschutz oder begrenzten Benutzerrechten heute eine höhere Bedeutung zugemessen als noch in den 1990er Jahren.
Dies macht Systeme allgemein robuster, reduziert z. B. die Zahl der Programm- und Systemabstürze und macht das System auch stabiler gegen Angriffe von außen, etwa durch Computerviren.
Dieser Artikel behandelt den Begriff „Betriebssystem“ hauptsächlich im Kontext „allgemein zur Informationsverarbeitung verwendete Computersysteme“. Daneben sind Betriebssysteme (mit ggf. spezialisierter Funktionalität) grundsätzlich in nahezu allen Geräten im Einsatz, in denen Software betrieben wird (wie Spielecomputer, Mobiltelefone, Navigationssysteme, Maschinen der Maschinenbaubranchen u. v. a.).
Auch viele Steuerungssysteme (eingebettetes System) die z. B. in Flugzeugen, Autos, Zügen, oder in Satelliten zu finden sind, besitzen spezialisierte Betriebssysteme.
"""
docx = nlp(doc)
#Technik um ein Vokabular anzulegen
all_words = [word.text for word in docx]
Freq_word={}
for w in all_words:
w1=w.lower()
if w1 not in extra_words and w1.isalpha():
if w1 in Freq_word.keys():
Freq_word[w1]+=1
else:
Freq_word[w1]=1
#Überschrift-Generierung:
val=sorted((Freq_word.values()))
max_freq = val[-3:]
print("Thema des Dokuments:-")
for word, freq in Freq_word.items():
if freq in max_freq:
print(word, end="")
else:
continue
#TFIDF - Term Frequency - Inve Freq_word.keys():rse Document Frequency: Maß, um die Wichtigkeit eines Wortes im Dokument ausfindig zu machen
for word in
Freq_word[word] = (Freq_word[word]/max_freq[-1])
#Sentence Strength - Vergibt jedem Satz im Dokument eine Gewichtung
sent_strength={}
for sent in docx.sents:
for word in sent:
if word.text.lower() in Freq_word.keys():
if sent in sent_strength.keys():
sent_strength[sent]+=Freq_word[word.text.lower()]
else:
sent_strength[sent]=Freq_word[word.text.lower()]
else:
continue
# Getting strong sentences - um die wichtigsten Sätze herauszufiltern
top_sentences=(sorted(sent_strength.values())[::-1])
top30percent_sentence=int(0.3*len(top_sentences))
top_sent=top_sentences[:top30percent_sentence]
# Zusammenfassung erstellen:
summary=[]
for sent,strength in sent_strength.items():
if strength in top_sent:
summary.append(sent)
else:
continue
for i in summary:
print(i, end="")
#----> Alle Schritte zielen auf die extractive technique ab
#____________________________________________
# Techniken um Texte zusammenzufassen:
#1. extractive technique - wichtigsten sätze werden zusammengefasst
#2. abstractive technique - Sätze in eigenen sätzen umformulieren und versuchen, die Bedeutung dabei gleich zu behalten
import torch
import json
from transformers import T5Tokenizer, T5ForConditionalGeneration, T5Config
model = T5ForConditionalGeneration.from_pretrained('t5-small')
tokenizer = T5Tokenizer.from_pretrained('t5-small')
device = torch.device('cpu')
text ="""
The US has "passed the peak" on new coronavirus cases, President Donald Trump said and predicted that some states would reopen this month.
The US has over 637,000 confirmed Covid-19 cases and over 30,826 deaths, the highest for any country in the world.
At the daily White House coronavirus briefing on Wednesday, Trump said new guidelines to reopen the country would be announced on Thursday after he speaks to governors.
"We'll be the comeback kids, all of us," he said. "We want to get our country back."
The Trump administration has previously fixed May 1 as a possible date to reopen the world's largest economy, but the president said some states may be able to return to normalcy earlier than that.
"""
preprocess_text = text.strip().replace("\n","")
t5_prepared_Text = "summarize: "+preprocess_text
print ("original text preprocessed: \n", preprocess_text)
tokenized_text = tokenizer.encode(t5_prepared_Text, return_tensors="pt").to(device)
# summmarize
summary_ids = model.generate(tokenized_text,
num_beams=4,
no_repeat_ngram_size=2,
min_length=30,
max_length=100,
early_stopping=True)
output = tokenizer.decode(summary_ids[0], skip_special_tokens=True)
print ("\n\nSummarized text: \n",output)
# Summarized output from above ::::::::::
# the us has over 637,000 confirmed Covid-19 cases and over 30,826 deaths.
# president Donald Trump predicts some states will reopen the country in april, he said.
# "we'll be the comeback kids, all of us," the president says.
\ No newline at end of file
# -*- coding: utf-8 -*-
from __future__ import absolute_import
from __future__ import division, print_function, unicode_literals
from sumy.parsers.html import HtmlParser
from sumy.parsers.plaintext import PlaintextParser
from sumy.nlp.tokenizers import Tokenizer
from sumy.summarizers.lsa import LsaSummarizer as Summarizer
from sumy.nlp.stemmers import Stemmer
from sumy.utils import get_stop_words
LANGUAGE = "german"
SENTENCES_COUNT = 10
if __name__ == "__main__":
#url = "https://de.wikipedia.org/wiki/Betriebssystem" ## muss geändert werden, sodass document statt url verwendet wird
#parser = HtmlParser.from_url(url, Tokenizer(LANGUAGE))
# or for plain text files
parser = PlaintextParser.from_file("testtext.txt", Tokenizer(LANGUAGE))
stemmer = Stemmer(LANGUAGE)
summarizer = Summarizer(stemmer)
summarizer.stop_words = get_stop_words(LANGUAGE)
for sentence in summarizer(parser.document, SENTENCES_COUNT):
print(sentence)
\ No newline at end of file
## Vorwort:
- Da SpaCy das favorisierte Framework ist, bietet es sich an word embedding zu verwenden, da es
viele Algorithmen gibt, die auf word embedding aufbauen. Jedoch möchten wir kein Modell implementieren
und es selbstständig anlernen, da dieses Verfahren viele Eingabetexte benötigt, um sinnvolle Textausgaben
zu generieren. Viel eher implementieren wir pre-trained Modelle.
- Word Embedding Methoden:
1. Bag of words
2. tf-idf
3. word2vec
4. glove embedding
5. fastext
6. elmo
- Des Weiteren soll kein anderes Framework als SpaCy verwendet werden. Sofern andere Strategien verwendet
wurden, handelt es sich hierbei um kein eigenes Framework, sondern viel eher um Algorithmen und Methoden.
## Strategien:
- bereits implementiert:
1. TFIDF (sentence embedding)
2. sentence embedding with transformers
3.
- weiterführende Strategien:
1. abstractive summary with T5 - nur englisch
2. Sumy
3. Bert
4. SpaCy
## t5: https://towardsdatascience.com/simple-abstractive-text-summarization-with-pretrained-t5-text-to-text-transfer-transformer-10f6d602c426
- !pip install transformers==2.8.0
& !pip install torch==1.4.0
- Problem mit der Strategie ist, dass Texte länger als 512 Token nicht verarbeitet werden
- unklar bisher auch, ob Deutsche Texte funktionieren. Bisher wurde kein deutsches pre-trained Modell
gefunden, weshalb Texte nur kryptisch ausgegeben werden. Aufgabe wäre hier, ein Modell selbst anzulernen,
hierfür gibt es bereits Projekte, die dies umgesetzt haben, jedoch soll die Qualität dabei nicht hoch
gewesen sein.
## Sumy: https://pypi.org/project/sumy/
- Make sure you have Python 2.7/3.3+ and pip (Windows, Linux) installed
- pip install sumy
- import nltk
- nltk.download('punkt')
- pip install numpy
- nimmt aktuell eine Website über URL und erzeugt dazu Zusammenfassung
## Bert: https://pypi.org/project/bert-extractive-summarizer/
- Es gilt einen Custom Summarizer zu erstellen, der default summarizer ist für die englische Sprache.
- Zwei Versionen wurden in BERT.py implementiert, beide sind verwertbar und hier gilt es zu testen,
welche Variante sich besser eignet.
## Spacy & word embedding
- keine größeren Probleme mit SpaCy. Hierbei gibt es verschiedenste Strategien, wie man mit SpaCy arbeiten
kann.
Zu untersuchende Strategien:
Spacy + Word embedding + word2vec: Eigenes Modell trainieren?
Spacy + Word embedding + glove: Nach Untersuchungen wird glove hauptsächlich zur Textklassifizierung
verwendet
Spacy + Word embedding + fastext: Wie glove zur Textklassifizierung statt Textzusammenfassung
## transformer and pipeline:
- abstrakte Methode um Texte zusammenzufassen. Sehr langsam, nach den imports muss die pipeline
heruntergeladen werden (beim ersten Mal). Anschließend immernoch sehr slow, Zusammenfassungen sind
sehr kryptisch.
## BART:
- Verwendet Bert sowie GPT, funktioniert jedoch nicht bei Deutschen Texten
## Pysummarization:
- Funktioniert sehr gut für englische Texte, habe jedoch kein deutsches Modell gefunden
## NLTK:
- nicht erwünscht als Framework für unser Projekt, jedoch wurde eine Strategie trotzdem hierfür getestet.
- Strategie funktioniert gut, es gibt viele Möglichkeiten NLTK einzubinden
## XLM: https://huggingface.co/transformers/model_summary.html
- könnte funktionieren, unsicher bisher bei der Implementierung
## Tensorflow:
- nur Strategien gefunden, die auf ein eigenständiges Training aufbauen. Dies wäre
jedoch für uns unvorteilhaft.
from transformers import pipeline
# using pipeline API for summarization task
summarization = pipeline("summarization")
original_text = """
„Interstellar“ ist nicht gerade ein Schnellschuss. Erste Pläne zu dem Science-Fiction-Epos gab es bereits 2006, damals war noch Steven Spielberg für die Regie vorgesehen. Ein Jahr später wurde Christopher Nolans Bruder Jonathan angeheuert, um das Drehbuch zu schreiben, doch auch nachdem Spielberg längst ausgestiegen war, sollte es bis 2012 dauern, bis jemand auf die naheliegende Idee kam, den „Inception“- und „The Dark Knight“-Regisseur selbst auch mit ins Boot zu holen. Von diesem Moment an haben viele Fans ein zweites „2001 - Odyssee im Weltraum“ oder besser noch die filmische Quadratur des Kreises erwartet - nicht mehr und nicht weniger. Und auch wenn „Interstellar“ diesem Anspruch nicht ganz standhält, fügt der Meisterregisseur seiner Filmografie doch einen ebenso einzigartigen wie unerwarteten weiteren Meilenstein hinzu: eine sakrale Weltraum-Oper, in der große Gefühle wichtiger sind als bahnbrechende Effekte. Obwohl es um nichts weniger als den Überlebenskampf der Menschheit geht, legt Nolan seinen Film zunächst als intimes Familiendrama an, um schließlich in der zweiten Hälfte buchstäblich in neue Dimensionen vorzustoßen: Er erkundet die Rätsel des Universums und überwältigt dabei mit grandiosen Bildern und einer Emotionalität, die man aus seinen Werken bisher kaum kannte.
In der nahen Zukunft: Die Menschheit stirbt. Langsam, aber scheinbar unausweichlich. Das Klima hat sich verändert, die Nahrungsmittel werden immer knapper, Wissenschaft und Staat sind auf dem Rückzug. Wer überleben will, wird Farmer. Der zweifache Vater und Witwer Cooper (Matthew McConaughey) bewirtschaftet mitten im Nirgendwo des amerikanischen Korngürtels riesige Maisfelder, um seine Kinder Murph (Mackenzie Foy) und Tom (Timothée Chalamet) sowie seinen Schwiegervater Donald (John Lithgow) zu ernähren. Doch Cooper hasst es, Farmer zu sein, er ist Ingenieur und flog früher für die NASA Raumschiffe. Ein unerklärliches Phänomen bringt ihn und seine zehnjährige Tochter einem Geheimnis auf die Spur: NORAD, das US-Luft- und Weltraum-Verteidigungskommando, existiert entgegen der allgemeinen Annahme noch. Unter Leitung von Professor Brand (Michael Caine) arbeiten Regierung und NASA verborgen unter der Erde an einem Plan, die Menschheit zu retten. Cooper schließt sich der Mission an, die Richtung Saturn aufbricht, um dort durch ein Wurmloch in eine andere Galaxie vorzustoßen und nach neuen Kolonien zu suchen. Mit an Bord sind Wissenschaftler und Astronauten: Brands Tochter Amelia (Anne Hathaway), Doyle (Wes Bentley) und Romilly (David Gyasi). Schweren Herzens lässt Cooper seine Familie zurück: Er weiß, dass es für ihn kaum eine Rückkehr geben wird.
"""
summary_text = summarization(original_text)[0]['summary_text']
print("Summary:", summary_text)
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