Resumindo textos com NLP 🤗 [updated]
Resumir textos automaticamente é algo que pode ser extremamente útil quando estamos muito ocupados e também quando o que desejamos é apenas um breve resumo do texto ou artigo em questão. São diversas as formas existentes para se resumir um texto, a que desenvolvi neste projeto foi através do Processamento de Linguagem Natural — Natural Language Processing (NLP) e duas de suas bibliotecas mais famosas, NLTK e spaCy. Para construir e colocar a aplicação em produção utilizei a plataforma Streamlit e a plataforma em nuvem Heroku.
Update! Devido a atualizações na plataforma Heroku, a platforma Streamlit também foi utilizada para o deploy da aplicação.
Algumas definições importantes:
- Processamento de Linguagem Natural — Natural Language Processing (NLP)
“Processamento de Linguagem Natural se refere ao ramo da ciência da computação — e mais especificamente, o ramo da inteligência artificial ou IA — preocupado em dar aos computadores a capacidade de entender texto e palavras faladas da mesma forma que os seres humanos.”
2. NLTK (Natural Language Toolkit)
“NLTK é uma plataforma líder para a construção de programas Python para trabalhar com dados de linguagem humana. Ele fornece interfaces fáceis de usar para mais de 50 corpora e recursos lexicais , como WordNet, junto com um conjunto de bibliotecas de processamento de texto para classificação, tokenização, lematização, marcação, análise e raciocínio semântico, wrappers para bibliotecas de PNL de força industrial.” — Documentação NLTK
3. spaCy
“spaCy é uma biblioteca de código aberto gratuita para Processamento de Linguagem Natural avançado em Python. Foi projetado especificamente para uso em produção e ajuda a criar aplicativos que processam e “entendem” grandes volumes de texto. Ele pode ser usado para construir sistemas de extração de informações ou de compreensão de linguagem natural, ou para pré-processar texto para aprendizado profundo.” — Documentação spaCy
4. Streamlit
“Streamlit é uma biblioteca Python de código aberto que facilita a criação e o compartilhamento de belos aplicativos da web personalizados para aprendizado de máquina e ciência de dados. Em apenas alguns minutos, você pode criar e implantar aplicativos de dados poderosos.” — Documentação Streamlit
5. Heroku
“Heroku é uma plataforma como serviço (PaaS) em nuvem baseada em contêiner. Os desenvolvedores usam o Heroku para implantar, gerenciar e dimensionar aplicativos modernos. Nossa plataforma é elegante, flexível e fácil de usar, oferecendo aos desenvolvedores o caminho mais simples para colocar seus aplicativos no mercado.” — Sobre Heroku
Vamos começar com a implementação utilizando a biblioteca NLTK.
Para acompanhar o código completo, acesse o repositório no GitHub.
Primeiro instale e importe as dependências necessárias:
Defina as Stop Words que você irá utilizar, neste exemplo utilizei as em português e em inglês:
Agora vamos criar uma função para remover as Stop Words, em português:
E enfim, criamos uma função para realizar todo processamento e sumarizar o texto, em português (para sumarizar em inglês, mude os parâmetros passados):
Para calcular a frequência de distribuição das palavras utilizamos o módulo de probabilidade do NLTK.
A classe FreqDist,
probability Module
, é usada para codificar “distribuições de frequência”, que contam o número de vezes que ocorre cada resultado de um experimento. — Documentação NLTK
Para tokenizar as frases utilizamos o sent_tokenize
e para retornar uma cópia tokenizada do texto, o word_tokenize
.
Por fim, utilizamos o nlargest
para retornar uma lista com os n maiores elementos do conjunto de dados recebido.
Para criar a aplicação web, utilizamos o framework Streamlit. Existem diferentes maneiras de definir essa etapa e a documentação pode te ajudar a criar da forma que achar mais interessante.
And… wait for it… deploy!
Esta aplicação foi deployada na plataforma Heroku (posteriormente, devido a atualizações na plataforma Heroku, o deploy foi realizado na plataforma Streamlit) e você pode acessá-la aqui.
Para a implementação utilizando a biblioteca spaCy, acesse o notebook no GitHub.
É isso! Experimente com qualquer texto e veja os resultados. Existem muitos algoritmos de sumarização que foram propostos nos últimos anos e há muito mais a se explorar. Que tal tornar a aplicação inteligente com IA?! Vá em frente, melhore esse algoritmo! 🤘
Se você tiver alguma sugestão ou recomendação, eu adoraria saber!