Commit 2bdd91d4 authored by Patrick Schlindwein's avatar Patrick Schlindwein
Browse files

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

Learn/#16 additional summ srategies

See merge request !34
parents f30c8fb7 d9768ce3
Pipeline #70360 passed with stages
in 11 minutes and 46 seconds
import numpy as np
import spacy
import string
from sklearn.metrics.pairwise import cosine_similarity
import networkx as nx
nlp = spacy.load('de_core_news_sm')
#nlp = spacy.load('en_core_web_sm')
stopWords = nlp.Defaults.stop_words
pretrained_model = 'glove_model.txt'
vector_size = 300
text_sample = 'text.txt'
def remove_stopwords(sen):
filtered_sent=[]
for word in sen:
if (not word.is_stop and not word.is_punct and not word.like_num):
filtered_sent.append(word.text.lower())
return filtered_sent
def create_word_embeddings(model):
word_embeddings = {}
f = open(model, encoding='utf-8')
for line in f:
values = line.split()
word = values[0]
coefs = np.asarray(values[1:], dtype='float32')
word_embeddings[word] = coefs
f.close()
return word_embeddings
def summarize(text):
text = nlp(text)
sentences = []
sentences = list(text.sents)
clean_sentences = [remove_stopwords(sent) for sent in sentences]
word_embeddings = create_word_embeddings('glove_de.txt')
print (len(word_embeddings))
sentence_vectors = []
for s in clean_sentences:
if len(s) != 0:
v = sum([word_embeddings.get(w, np.zeros((vector_size,))) for w in s])/(len(s)+0.001)
else:
v = np.zeros((vector_size,))
sentence_vectors.append(v)
# similarity matrix
sim_mat = np.zeros([len(sentences), len(sentences)])
for i in range(len(sentences)):
for j in range(len(sentences)):
if i != j:
sim_mat[i][j] = cosine_similarity(sentence_vectors[i].reshape(1,vector_size), sentence_vectors[j].reshape(1,vector_size))[0,0]
nx_graph = nx.from_numpy_array(sim_mat)
scores = nx.pagerank(nx_graph)
ranked_sentences = sorted(((scores[i],s) for i,s in enumerate(sentences)), reverse=True)
for i in range(5):
print(ranked_sentences[i][1])
if __name__ == '__main__':
source = open(text_sample, 'r').read()
summarize(source)
\ No newline at end of file
...@@ -25,6 +25,7 @@ wurden, handelt es sich hierbei um kein eigenes Framework, sondern viel eher um ...@@ -25,6 +25,7 @@ wurden, handelt es sich hierbei um kein eigenes Framework, sondern viel eher um
2. Sumy 2. Sumy
3. Bert 3. Bert
4. SpaCy 4. SpaCy
5. Glove Word/Sentence Embedding
## t5: https://towardsdatascience.com/simple-abstractive-text-summarization-with-pretrained-t5-text-to-text-transfer-transformer-10f6d602c426 ## t5: https://towardsdatascience.com/simple-abstractive-text-summarization-with-pretrained-t5-text-to-text-transfer-transformer-10f6d602c426
...@@ -52,6 +53,13 @@ gefunden, weshalb Texte nur kryptisch ausgegeben werden. Aufgabe wäre hier, ein ...@@ -52,6 +53,13 @@ gefunden, weshalb Texte nur kryptisch ausgegeben werden. Aufgabe wäre hier, ein
welche Variante sich besser eignet. welche Variante sich besser eignet.
## Word/sentence embedding with pre-trained vectors
- Es werden Sentence Embeddings zon den dazugehörenden Wörter erzeugt.
- Hier können die Embeddings für die Deutsche Sprache z.b von der Seite https://deepset.ai/german-word-embeddings genutzt werden. (Glove,Word2Vec,fastText)
- Man muss hier, die pre-trained Embeddings als Datei -- in Form von {Wort element1 element2 ... elementN} enthält -- addieren und wie groß ist jeder Vektor (100,300,..)
- Genutzte Biliotheken sind : numpy, scikit-learn (pip install -U scikit-learn), networkx (pip install networkx)
## Spacy & word embedding ## Spacy & word embedding
- keine größeren Probleme mit SpaCy. Hierbei gibt es verschiedenste Strategien, wie man mit SpaCy arbeiten - keine größeren Probleme mit SpaCy. Hierbei gibt es verschiedenste Strategien, wie man mit SpaCy arbeiten
kann. kann.
...@@ -63,7 +71,6 @@ kann. ...@@ -63,7 +71,6 @@ kann.
Spacy + Word embedding + fastext: Wie glove zur Textklassifizierung statt Textzusammenfassung Spacy + Word embedding + fastext: Wie glove zur Textklassifizierung statt Textzusammenfassung
## transformer and pipeline: ## transformer and pipeline:
- abstrakte Methode um Texte zusammenzufassen. Sehr langsam, nach den imports muss die 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 heruntergeladen werden (beim ersten Mal). Anschließend immernoch sehr slow, Zusammenfassungen sind
......
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