O que aprendemos sobre mineração de texto a partir da decisão que prendeu Bolsonaro?

Considere o seguinte texto:

“O evento foi maravilhoso! A organização estava impecável, os palestrantes foram inspiradores e os participantes super engajados. Saí de lá com o coração cheio de gratidão e motivação para aplicar tudo o que aprendi. O ambiente era acolhedor, as pessoas muito simpáticas e a energia contagiante. A comida estava ótima, os intervalos bem distribuídos e tudo funcionou perfeitamente”.

Agora, leia este:

“O evento foi decepcionante. A organização deixou muito a desejar, com informações desencontradas e falta de suporte para os participantes. Os palestrantes pareciam desmotivados, muitos apenas repetiram conteúdos genéricos, sem aprofundamento. Durante todo o dia, era visível o desânimo no rosto das pessoas”.

Conheça o JOTA PRO Poder, plataforma de monitoramento que oferece transparência e previsibilidade para empresas

Sentiu a diferença? No primeiro exemplo, o tom emocional é predominantemente positivo, com termos como “maravilhoso”, “impecável”, “gratidão”, entre outros. No segundo, palavras como “decepcionante”, “desmotivados” e “desânimo” indicam exatamente o oposto, uma sensação de negatividade.

Você pode se perguntar: “Mas podemos medir as emoções desses textos?”. À primeira vista essa pergunta pode soar estranha, mas é exatamente isso que iremos fazer. Quando falamos de análise de sentimentos em ciência de dados, não estamos nos referindo ao estado psicológico de um indivíduo, mas sim a uma técnica automatizada da análise de conteúdo. A idéia é simples: identificar se um determinado texto transmite “emoções positivas, negativas ou neutras” de acordo com as palavras utilizadas[1].

Inspirados por esse princípio, criamos o Sentimentalizador, ferramenta original que automatiza a análise de sentimentos em língua portuguesa. O objetivo? Identificar, extrair e classificar emoções expressas por meio de léxico previamente organizado. Como estudo de caso, examinaremos o conteúdo da Petição 14.129, em que o ministro do STF Alexandre de Moraes determinou a prisão domiciliar de Jair Bolsonaro.

O primeiro passo foi localizar o arquivo da decisão. Para tanto, fizemos uma busca no Google com os descritores “bolsonaro”, “prisão”, “decisão” e “na íntegra”. Chegamos neste link. Apesar do arquivo exibir terminação PDF, o conteúdo não está em formato de texto, mas sim disponível como figura.

Isso representa um obstáculo adicional e exige um tratamento específico que também pode ser implementado no R com auxílio do pacote “tesseract”. Recapitulando o passo a passo, vamos importar o arquivo original para o R, informar o idioma que estamos trabalhando (no caso, português) e depois usar a função ocr que transforma figura em texto, conforme demonstra a Figura 1.

Figura 1: Importação e aplicação do OCR

Até aqui tudo tranquilo? Então segue o jogo. Temos agora um novo objeto chamado texto_extraido que agrupa o conteúdo do PDF original como se fosse um .txt de bloco de notas. Ou seja, o R foi capaz de ler o arquivo original, decodificar a imagem e extrair os caracteres (texto), transformando tudo em uma variável do tipo “character”. É sobre esse arquivo que iremos nos concentrar a partir de agora. A Figura 2 ilustra o processamento do arquivo com ênfase na limpeza do texto.

Figura 2: Limpeza do texto

Vamos fazer uma função de limpeza. Essa função vai, nessa ordem: a) transformar todo o texto em letra minúscula; b) remover todas as pontuações; c) remover números, afinal, números não têm sentimentos; d) remover stopwords, que são palavras do tipo “de”, “para”, “enquanto”, que não exibem valor semântico significativo para os nosso propósitos e e) remover espaços em branco. Depois de criada a função, vamos usá-la em nosso arquivo de texto. Se ficou viajando na maionese, pare tudo e releia o parágrafo[2].

O terceiro passo consiste em carregar algum arquivo de léxico na língua que você pretende analisar (em nosso caso a portuguesa). Esse procedimento é essencial pois é a partir dele que iremos classificar as palavras como positivas, negativas ou neutras.

Nesse exemplo, iremos trabalhar com o OpLexicon, léxico desenvolvido especialmente para a língua portuguesa, disponível publicamente neste link. Esse arquivo contém uma lista extensa de palavras previamente rotuladas quanto ao seu valor emocional, com base em estudos linguísticos e validações das empíricas.

É a partir deste dicionário que o algoritmo aprende a interpretar o tom emocional do texto. Você pode trabalhar com outros arquivos e até mesmo criar o seu próprio léxico, adaptando as palavras e características do seu objeto de estudo. A Figura 3 ilustra como o arquivo do léxico é utilizado para classificar as palavras na análise de sentimento.

Figura 3: Aplicação do léxico

Com auxílio do pacote dplyr, muito útil para manipulação de arquivos no R, é possível filtrar apenas as variáveis de interesse, no caso, a palavra e o respectivo sentimento associado a ela.

Por fim, palavras com valor lexical classificadas como ‘–1’ agora serão interpretadas como sentimento negativo. Já palavras com valor ‘1’ serão classificadas com sentimento positivo. As demais palavras classificadas como ‘0’ serão neutras. A Figura 4 ilustra a parte do código que implementa a análise de sentimento no R com auxílio do pacote tidytext.

Figura 4: Análise de sentimento

Este trecho de código realiza a análise de sentimentos a partir de textos em português. Primeiramente, cada frase da base de dados é decomposta em palavras isoladas (tokens). Em seguida, essas palavras são comparadas com um dicionário de sentimentos (OpLexicon) para identificar se cada palavra possui carga emocional positiva, negativa ou neutra.

Depois disso, o código conta quantas palavras pertencem a cada categoria de sentimento, renomeando as colunas para facilitar a leitura dos resultados. Por fim, calcula-se a porcentagem relativa de cada sentimento em relação ao total e cria-se um rótulo combinando a porcentagem com a quantidade absoluta de ocorrências, permitindo uma visualização da distribuição dos sentimentos no conjunto analisado.

Depois de processados (limpeza, tokenização e categorização), é possível usar o pacote ggplot2 para visualizar os resultados. A Figura 5 mostra o processo detalhado de construção do gráfico que vai ilustrar a distribuição de frequência da análise de sentimento.

Figura 5: Elaboração do gráfico

Ao final, o código vai produzir os seguintes resultados:

tabela com a frequência absoluta e relativa da análise de sentimentos (positivo, negativo e neutro);
tabela sintética com a classificação de cada palavra (é importante verificar caso a caso para ter certeza de que a ferramenta fez o serviço corretamente);
um gráfico de barras com os resultados consolidados da análise de sentimentos (ver Figura 6).

Figura 6: Visualização da análise de sentimento

Assim, considerando as 5.576 palavras escritas nas 25 páginas da Petição 14.129, observamos que a maior parte do conteúdo é neutro (54,9%), sendo cerca de 1 em 4 palavras com sentimento positivo e 20,95% dos termos associados a sensações negativas.

Informações direto ao ponto sobre o que realmente importa: assine gratuitamente a JOTA Principal, a nova newsletter do JOTA

Em resumo, você viu como funciona uma análise de sentimentos no R, desde a preparação do texto até a classificação automática das palavras com base no léxico.

O passo a passo mostrou que, com um pouco de criatividade e algumas linhas de código, podemos realizar análises inovadoras e identificar padrões emocionais que muitas vezes passariam despercebidos. Se esse tema despertou seu interesse, o caminho não precisa parar aqui. Pelo contrário. Pode ser apenas o seu primeiro passo.

Materiais de replicação, incluindo dados e scripts computacionais, estão publicamente disponíveis aqui.

[1] Como explicam os professores Pushman (@cbpuschmann) e Haim (@DrFollowMario), no livro “Automated Content Analysis With R”, ao mostrarem que essa técnica, crescentemente difundida nas Ciências Sociais, “(sic) busca determinar a polaridade de um texto […] geralmente com palavras atribuídas a categorias positivas e negativas”. Se quiser aprender mais sobre o tema, sugerimos os seguintes artigos: a) Bestvater, S. E., & Monroe, B. L. (2023). Sentiment is not stance: Target-aware opinion classification for political text analysis. Political Analysis, 31(2), 235-256; b) Rice, D. R., & Zorn, C. (2021). Corpus-based dictionaries for sentiment analysis of specialized vocabularies. Political Science Research and Methods, 9(1), 20-35 e c) Wilkerson, J., & Casas, A. (2017). Large-scale computerized text analysis in political science: Opportunities and challenges. Annual Review of Political Science, 20(1), 529-544.

[2] Dois artigos que devem te ajudar a visualizar as potencialidades da análise de texto na pesquisa empirica: <https://bibanpocs.emnuvens.com.br/revista/article/view/455/433> e <https://www.scielo.br/j/rsocp/a/W34dV4fXQfthZmSmQLmkXzs/>.

Generated by Feedzy