Você está visualizando atualmente Como sumarizar textos usando Python

Como sumarizar textos usando Python

Nesse artigo você vai aprender como sumarizar textos em python, para isso você vai precisar de um ambiente completamente configurado e funcional, conhecimento na linguagem e também alguma familiaridade com os conceitos de Processamento de linguagem natural.

Uma das funções do Processamento de Linguagem Natural é realizar a sumarização automática de textos utilizando algum critério de relevância. É claro que a sumarização automática de textos é uma função bastante genérica e pode ser empregada em qualquer contexto.
 
Imagine que você têm 500 textos de 10 páginas para realizar a leitura. No entanto, você não tem certeza se determinado texto está dentro do escopo que você precisa abordar na pesquisa. É possível que a realização de uma sumarização automática forneça um texto mais compacto e possa agilizar no processo de seleção dos melhores candidatos a serem lidos na íntegra.
 
O exemplo supracitado é na verdade apenas uma aplicação de muitas outras que a sumarização pode beneficiar. Nesta seção iremos implementar um exemplo de sumarização feito em python. É claro que devemos salientar que essa área é bastante grande e existem diversas técnicas para realizar a sumarização.
 

Resumo da abordagem

 
Esta abordagem utilizará como fonte de dados a Wikipedia. Esse repositório muito conhecido possui “toneladas” de texto e podem ser utilizados gratuitamente. A seguir, um breve passo a passo da abordagem:
 
 
Obtendo dados da Web – como obter dados de um artigo da wikipedia utilizando o python
Parse usando Soup – realizando a conversão do formato soup para texto plano
Tokenização de texto em sentenças – processando o texto utilizando o NLTK
Construindo um histograma  – construindo a estrutura para realizar a avaliação dos parágrafos.
Calculando a pontuação – calculando a pontuação com base na relevância de cada parágrafo
 
Obtendo o resumo – selecionando os melhores parágrafos.

O primeiro passo para construirmos nossa aplicação é importar as bibliotecas necessárias para obter os dados que serão sumarizados e realizar ainda o pré-processamento do texto.

import bs4 as bs
import urllib.request
import re
import nltk
import heapq

bs4  – biblioteca é utilizada para lidar com o protocolo SOUP (XML) dentro do Python. 
urllib.request – biblioteca para realizar um request utilizando o Python.
re – biblioteca que interpreta expressões regulares
nltk – biblioteca python para Processamento de Linguagem Natural
heapq – biblioteca para ordenação de arrays.

A seguir utilizaremos um link qualquer da wikipedia e faremos um request para “pegarmos” estes dados:

Usamos esse link

# pegando dados da wikipedia

source = urllib.request.urlopen("https://en.wikipedia.org/wiki/France").read()

A biblioteca BeaultifulSoup torna possível localizar um elemento dentro do arquivo e concatena-lo em uma só string.

 soup = bs.BeautifulSoup(source,‘lxml’)

text = ""

for paragraph in soup.find_all('p'):
text += paragraph.text

O pré-processamento deverá ocorrer removendo números, espaços extras e toda sequência de caracteres que não serão utilizados. 

 # preprocessing the text

text = re.sub(r'[[0-9]*]',' ', text)
text = re.sub(r's+',' ', text)

clean_text = text.lower()
clean_text = re.sub(r'W', ' ', clean_text)
clean_text = re.sub(r'd', ' ', clean_text)
clean_text = re.sub(r's+', ' ', clean_text)

sentences = nltk.sent_tokenize(text)

stop_words = nltk.corpus.stopwords.words('english')

O próximo passo é utilizar os dados pré-processados para separar o texto em sentenças (ps: lembrar de não remover a pontuação no pré-processamento). Os dados obtidos serão submetidos a uma contagem da frequência das palavras e posteriormente a frequência será convertida em porcentagem utilizando a maior frequência possível como parâmetro.

 word2count = {}
 for word in nltk.word_tokenize(clean_text):
   if word not in stop_words:
      if word not in word2count.keys():
         word2count[word] = 1 
      else:
         word2count[word] += 1 #conta a frequência das palavras 
         for key in word2count.keys(): 
            word2count[key] = word2count[key] /max(word2count.values()) #transforma em porcentagem

O próximo passo é realizar a pontuação das frases utilizando um critério. O critério utilizado é se a frase analisada possui as palavras do histograma criado.

sent2score = {}

for sentence in sentences:
for word in nltk.word_tokenize(sentence.lower()):
if word in word2count.keys():
if len(sentence.split(' ')) < 30:
if sentence not in sent2score.keys():
sent2score[sentence] = word2count[word]
else:
sent2score[sentence] += word2count[word]

As sentenças com o Score mais alto serão selecionadas utilizando a ordenação:

best_sentences = heapq.nlargest(10, sent2score,key=sent2score.get)

print("-------------------------------------------------------------n")
for sentence in best_sentences:
print(sentence)

Considerações importantes

É claro que essa forma de sumarizar textos em python e construir resumos automáticos não é absoluta e não gera resultados perfeitos. Existem diversas outras abordagens interessantes que merecem atenção em diversos artigos publicados na área .

Vinicius dos Santos

Apenas um apaixonado por Ciência da Computação e a forma com que ela pode transformar vidas!

Deixe um comentário

seis + oito =