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
2. Sumy
3. Bert
4. SpaCy
5. Glove Word/Sentence Embedding
## 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
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
- keine größeren Probleme mit SpaCy. Hierbei gibt es verschiedenste Strategien, wie man mit SpaCy arbeiten
kann.
......@@ -63,7 +71,6 @@ kann.
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
......
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