-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsummarization.py
82 lines (68 loc) · 2.82 KB
/
summarization.py
1
2
3
4
5
6
7
8
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
import re
import nltk
import heapq
# nltk.download('punkt')
# nltk.download('stopwords')
from utils import preprocess_lematize
import os
from sumy.parsers.plaintext import PlaintextParser
from sumy.nlp.tokenizers import Tokenizer
from sumy.summarizers.luhn import LuhnSummarizer
def summarizer_sumy(text):
parser = PlaintextParser.from_string(
text.cleaned_text, Tokenizer('portuguese'))
sumarizador = LuhnSummarizer()
resumo = sumarizador(parser.document, 5)
return resumo
def summarization_freq(original):
# lista_palavras = nltk.word_tokenize(original)
list_sentences = nltk.sent_tokenize(original)
formatado = preprocess_lematize(original)
frequencia_palavras = nltk.FreqDist(nltk.word_tokenize(formatado))
# for a in frequencia_palavras:
# print(a, frequencia_palavras[a])
frequencia_palavras_relativa = frequencia_palavras.copy()
frequencia_maxima = max(frequencia_palavras.values())
for palavra in frequencia_palavras.keys():
frequencia_palavras_relativa[palavra] = (
frequencia_palavras[palavra] / frequencia_maxima)
# for a in frequencia_palavras_relativa:
# print(a, frequencia_palavras_relativa[a])
notas_sentencas = {}
for sentenca in list_sentences:
for palavra in nltk.word_tokenize(sentenca.lower()):
if palavra in frequencia_palavras_relativa.keys():
if sentenca not in notas_sentencas.keys():
notas_sentencas[sentenca] = frequencia_palavras_relativa[palavra]
else:
notas_sentencas[sentenca] += frequencia_palavras_relativa[palavra]
sentencas_ordenadas = dict(sorted(notas_sentencas.items(),
key=lambda item: item[1], reverse=True))
quantity = round(0.3 * len(list_sentences))
quantity = 1 if quantity < 1 else quantity
best_sentencas = heapq.nlargest(
quantity, notas_sentencas, key=notas_sentencas.get)
# data = pd.DataFrame.from_dict(
# frequencia_palavras, orient='index').sort_values(frequencia_palavras[0], ascending=False)
# print(data)
return list_sentences, best_sentencas
def save_summary(title, list_sentences, best_sentencas):
HTML_TEMPLATE = """<html>
<head>
<title>{0}</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>{1}</body>
</html>"""
text = ''
for i in list_sentences:
if i in best_sentencas:
text += str(i).replace(i, f"<mark>{i}</mark>")
else:
text += i
arquivo = open(os.path.join(title + '.html'), 'wb')
html = HTML_TEMPLATE.format(title + ' - Resumo', text)
arquivo.write(html.encode('utf-8'))
arquivo.close()
# formatted_text = preprocesamento(texto_original)
# print(sumarization_by_freq(texto_original, 5))