Logo Pré-Processamento de Texto

Tutorial Transformação Digital nº13

Autor
Afiliação

Fundação João Pinheiro

Resumo

A análise de texto é uma técnica amplamente utilizada para extrair informações valiosas de grandes volumes de dados textuais. Neste documento demonstramos como realizar a limpeza dos dados, criar um corpus textual, gerar uma matriz termo-documento e construir uma nuvem de palavras para visualizar os termos mais frequentes. O objetivo é mostrar como estruturar e analisar dados textuais de forma eficiente, utilizando um conjunto de técnicas de text mining.

Contato: transformacao.digital@fjp.mg.gov.br

1 Instalação e Carregamento dos Pacotes

Antes de iniciar a análise, é necessário instalar e carregar os pacotes necessários para o processamento de texto: install.packages(c(“readxl”, “tm”, “quanteda”, “tidytext”, “text”, “wordcloud”, “RColorBrewer”))

# Carregar bibliotecas
library(readxl)
library(tm)
library(quanteda)
library(tidytext)
library(stringi)
library(wordcloud)
library(RColorBrewer)
  • readxl: Permite ler arquivos do Excel.

  • tm (Text Mining): Principal pacote para mineração de texto.

  • quanteda: Outra ferramenta útil para análise de texto.

  • tidytext: Integra mineração de texto ao tidyverse.

  • stringi: Utilizado para normalização de caracteres.

  • wordcloud: Gera a visualização da nuvem de palavras.

  • RColorBrewer: Define esquemas de cores para gráficos.

2 Leitura da Base de Dados

A base de dados utilizada neste exemplo está armazenada em um arquivo Excel. O código abaixo lê o arquivo e armazena o conteúdo na variável. Você pode utilizar qualquer outra base de dados que julgar necessária.

# Ler a base de dados
base <- read_xlsx("reddit.xlsx", sheet = 1)

O arquivo reddit.xlsx contém os textos que serão analisados. sheet = 1 indica que estamos lendo a primeira planilha do arquivo.

3 Normalização dos Textos

Antes de iniciar a análise, devemos padronizar os textos. Isso inclui remover acentos, converter para minúsculas, eliminar pontuações e padronizar algumas palavras, como plurais ou singular.

# Normalizar acentos usando stringi
base$texto <- stri_trans_general(base$texto, "Latin-ASCII")

# Substituir plurais manualmente
base$texto <- gsub("\\bcarros\\b", "carro", base$texto)
base$texto <- gsub("\\bproblemas\\b", "problema", base$texto)

# Remover espaços extras
base$texto <- trimws(base$texto)
  • stri_trans_general(): Remove acentos e caracteres especiais. gsub(): Substitui palavras no texto (exemplo: “carros” → “carro”). trimws(): Remove espaços desnecessários no início e no fim das frases.

4 Criando o Corpus

Um corpus é um conjunto de textos estruturado para análise. O pacote tm fornece a função VCorpus() para essa finalidade.

# Criar o corpus
corpus_tm <- VCorpus(VectorSource(base$texto))
  • VCorpus() cria um objeto do tipo corpus, essencial para manipular textos de forma eficiente.

5 Definição de Stopwords

Stopwords são palavras muito comuns que geralmente não carregam significado relevante para a análise. Além da lista padrão do R, adicionamos palavras personalizadas.

stopwords_personalizadas <- c("nao", "pra", "ja", "bem", "sao", "so", "ser", "ainda", "duster", 
                              "pode", "aqui", "uns", "voce", "vi", "ver", "manutencao", "ate", 
                              "sobre", "ai", "tambem", "usar", "entao", "ter", "coisa", "algumas", 
                              "faz", "fazer", "nada", "voces", "boa", "podem", "mil", "algo", 
                              "bom", "dia", "porque", "primeiro", "alguem", "menos", "bomba", 
                              "outro", "pouco", "tudo", "realmente", "fiz", "ta", "to", "tao", 
                              "vai", "queria", "agua", "acho", "sei", "sempre", "outros", "quanto", 
                              "vezes", "podem")

As palavras listadas acima serão removidas do texto.

6 Processamento do Corpus

Agora, aplicamos várias transformações para limpar o texto:

Essas funções garantem que o texto esteja no formato ideal para análise.

corpus_tm <- tm_map(corpus_tm, content_transformer(tolower))  # Minúsculas
corpus_tm <- tm_map(corpus_tm, removePunctuation)             # Remover pontuação
corpus_tm <- tm_map(corpus_tm, removeNumbers)                 # Remover números
corpus_tm <- tm_map(corpus_tm, removeWords, stopwords("portuguese"))  # Stopwords padrão
corpus_tm <- tm_map(corpus_tm, removeWords, stopwords_personalizadas) # Stopwords customizadas
corpus_tm <- tm_map(corpus_tm, stripWhitespace)               # Remover espaços extras

7 Criando a Matriz Termo-Documento

A Matriz Termo-Documento (TDM) é uma tabela onde cada linha representa um termo e cada coluna representa um documento, com a contagem de ocorrências de cada termo.

tdm <- TermDocumentMatrix(corpus_tm, control = list(wordLengths = c(2, Inf)))  # Remove palavras curtas

# Visualizar a matriz termo-documento
inspect(tdm)
<<TermDocumentMatrix (terms: 3006, documents: 100)>>
Non-/sparse entries: 5435/295165
Sparsity           : 98%
Maximal term length: 234
Weighting          : term frequency (tf)
Sample             :
             Docs
Terms          1 37 50 60 64 65 77 82 90 92
  carro       19 34  9  5  4  9  6  7 10  7
  combustivel 24  0  1  0  0  3  1  0  0  0
  consumo      1  1  1  2  0  0  0  2  3  0
  etanol      88  2  1  0  1  4  1  1  5  1
  gasolina    23  0  0  0  1  0  0  0  2  0
  km           2  5  1  1  0  0  1  3  2  5
  kml          0  1  0  0  0  0  0  1  3  0
  motor       14  4  0  0  0  2  3  0  1  1
  oleo        16  0  0  0  0  0 15  0  0  4
  problema    15  1  0  3  4  1  0  0  0  3
  • TermDocumentMatrix() cria a matriz. O argumento wordLengths = c(2, Inf) remove palavras muito curtas.

8 Criando um Dataframe de Frequências

Transformamos a matriz TDM em um dataframe para facilitar a visualização.

# Converter para uma matriz para análise
tdm_matrix <- as.matrix(tdm)

# Mostrar as palavras mais frequentes
word_freq <- sort(rowSums(tdm_matrix), decreasing = TRUE)

# Criar um dataframe para visualização
df_freq <- data.frame(palavra = names(word_freq), frequencia = word_freq)

9 Criando a Nuvem de Palavras

Uma nuvem de palavras ajuda a visualizar os termos mais frequentes:

set.seed(1234)  # Para manter a mesma disposição visual
wordcloud(words = df_freq$palavra, 
          freq = df_freq$frequencia, 
          min.freq = 15,  # Ajustar conforme necessário
          max.words = 100, 
          random.order = FALSE, 
          rot.per = 0.3, 
          colors = brewer.pal(8, "Dark2"))

  • wordcloud() gera a visualização. min.freq = 15 define o mínimo de ocorrências para exibir uma palavra. brewer.pal(8, “Dark2”) define as cores.

10 Conclusão

Agora você consegue realizar uma análise de textos no R. Abordando desde a limpeza de dados até a visualização por nuvem de palavras. Essas técnicas são úteis para diversos contextos, como análise de opiniões, estudos de mercado e ciência de dados aplicada à linguagem natural.

11 Referências

ROSS, S. D. Lematização no R. RPubs, 2021. Disponível em: https://rpubs.com/StevenDuttRoss/lemmatizacao-no-R. Acesso em: 30. jan. 2025.