# Carregar bibliotecas
library(readxl)
library(tm)
library(quanteda)
library(tidytext)
library(stringi)
library(wordcloud)
library(RColorBrewer)
Pré-Processamento de Texto
Tutorial Transformação Digital nº13
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”))
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 extras7 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.