R Academy · Aula

Tokenização e remoção de palavras irrelevantes

Divida o texto em tokens e filtre palavras sem informação com anti_join().

Aula 1 de 413 etapas

Tokenização e remoção de palavras irrelevantes é uma aula grátis de R Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de R Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de R Academy inclui 4 aulas no total.

O que é mineração de texto?

A mineração de texto (ou análise de texto) transforma texto não estruturado em dados estruturados que podem ser analisados estatisticamente. O pacote tidytext permite uma abordagem tidy: cada linha representa um token (palavra, bigrama ou frase), o que o torna compatível com dplyr e ggplot2.

library(tidytext)
library(dplyr)

# A simple text corpus
text_df <- tibble::tibble(
  doc_id = 1:3,
  text   = c(
    'The quick brown fox jumps over the lazy dog.',
    'Text mining with R is powerful and fun.',
    'Natural language processing enables many applications.'
  )
)

cat('Input: ', nrow(text_df), 'documents\n')
cat('Columns:', names(text_df), '\n')

unnest_tokens: Tokenização de palavras

unnest_tokens(output, input) divide o texto em um formato com uma linha por token. Por padrão, a tokenização é feita por palavra, convertendo o texto para minúsculas e removendo a pontuação. O argumento token aceita 'words', 'ngrams', 'sentences' e outros valores.

library(tidytext)
library(dplyr)

text_df <- tibble::tibble(
  doc_id = 1:2,
  text   = c(
    'R is a great language for data analysis.',
    'Text mining reveals hidden patterns in documents.'
  )
)

# Tokenise into words
tokens <- text_df |>
  unnest_tokens(word, text)

cat('Tokens extracted:', nrow(tokens), '\n')
print(tokens)

O conjunto de dados stop_words

O tidytext inclui um tibble integrado chamado stop_words, contendo 1.149 palavras funcionais comuns em inglês provenientes de três léxicos: SMART, Snowball e onix. Essas palavras ("the", "is", "and"…) carregam pouco significado semântico e normalmente são removidas antes da análise.

library(tidytext)
library(dplyr)

# Inspect the stop_words dataset
cat('Total stop words:', nrow(stop_words), '\n')
cat('Lexicons:', paste(unique(stop_words$lexicon), collapse = ', '), '\n')

# First few stop words from each lexicon
stop_words |>
  group_by(lexicon) |>
  slice_head(n = 3) |>
  print()

anti_join: Removendo palavras funcionais

anti_join(tokens, stop_words, by = 'word') remove todas as linhas cuja word corresponde a alguma entrada em stop_words. Esse é o padrão usual do tidytext para remover palavras funcionais — simples, legível e fácil de ampliar.

library(tidytext)
library(dplyr)

text_df <- tibble::tibble(
  doc_id = 1:3,
  text   = c(
    'The quick brown fox jumps over the lazy dog',
    'A stitch in time saves nine important words',
     'To be or not to be that is the question'
  )
)

tokens <- text_df |>
  unnest_tokens(word, text)

cat('Before removing stop words:', nrow(tokens), '\n')

tokens_clean <- tokens |>
  anti_join(stop_words, by = 'word')

cat('After removing stop words:', nrow(tokens_clean), '\n')
print(tokens_clean)

count: Frequência dos termos

Depois de tokenizar o texto e remover as palavras funcionais, use count(word, sort = TRUE) para calcular a frequência dos termos. Essa é a base de muitas análises de mineração de texto — as palavras significativas mais frequentes caracterizam os temas do documento.

library(tidytext)
library(dplyr)

# Use Jane Austen's novels from janeaustenr package
# For demo: simulate a small corpus
corpus <- tibble::tibble(
  text = c(
    'data science involves statistics programming analysis',
    'machine learning algorithms data patterns training',
    'statistics probability distributions random variables data',
    'programming languages python r julia statistics',
    'analysis patterns distributions algorithms science'
  )
)

word_counts <- corpus |>
  unnest_tokens(word, text) |>
  anti_join(stop_words, by = 'word') |>
  count(word, sort = TRUE)

cat('Top 8 words:\n')
print(head(word_counts, 8))

Palavras funcionais personalizadas

Corpora específicos de um domínio geralmente contêm palavras muito frequentes que são irrelevantes (por exemplo, "paciente" e "médico" em anotações médicas). Crie um tibble personalizado de palavras funcionais e una-o ao léxico integrado usando bind_rows().

library(tidytext)
library(dplyr)

# Domain-specific words to remove
custom_stops <- tibble::tibble(
  word   = c('data', 'analysis', 'r', 'using', 'also'),
  lexicon = 'custom'
)

# Combine with built-in stop words
all_stops <- bind_rows(stop_words, custom_stops)
cat('Total stop words after custom:', nrow(all_stops), '\n')

corpus <- tibble::tibble(
  text = c(
    'Using R for data analysis and machine learning models',
    'Statistical data analysis also involves data visualisation'
  )
)

clean_tokens <- corpus |>
  unnest_tokens(word, text) |>
  anti_join(all_stops, by = 'word') |>
  count(word, sort = TRUE)

print(clean_tokens)

Tokenização de bigramas

Defina token = 'ngrams', n = 2 para tokenizar o texto em pares consecutivos de palavras (bigramas). Os bigramas capturam expressões como "machine learning" ou "data science" que as palavras isoladas não identificam, oferecendo um contexto mais rico.

library(tidytext)
library(dplyr)

corpus <- tibble::tibble(
  doc_id = 1:2,
  text = c(
    'machine learning and deep learning are powerful techniques',
    'natural language processing uses machine learning methods'
  )
)

bigrams <- corpus |>
  unnest_tokens(bigram, text, token = 'ngrams', n = 2)

cat('Bigrams extracted:', nrow(bigrams), '\n')
print(bigrams)

# Count most common bigrams
bigram_counts <- bigrams |> count(bigram, sort = TRUE)
cat('\nTop bigrams:\n')
print(head(bigram_counts, 5))

Filtrando bigramas para garantir qualidade

Os bigramas mais frequentes incluem pares de palavras funcionais, como "of the". Separe o bigrama em duas colunas com tidyr::separate(), filtre as linhas em que uma das palavras seja uma palavra funcional e depois una-as novamente para obter pares de expressões significativos.

library(tidytext)
library(dplyr)
library(tidyr)

corpus <- tibble::tibble(
  text = c(
    'the field of machine learning and deep learning is growing',
    'natural language processing is a subfield of artificial intelligence'
  )
)

bigrams_filtered <- corpus |>
  unnest_tokens(bigram, text, token = 'ngrams', n = 2) |>
  separate(bigram, into = c('word1', 'word2'), sep = ' ') |>
  filter(
    !word1 %in% stop_words$word,
    !word2 %in% stop_words$word
  ) |>
  unite(bigram, word1, word2, sep = ' ') |>
  count(bigram, sort = TRUE)

print(bigrams_filtered)

Visualizando frequências de palavras

Represente as frequências das palavras em um gráfico de barras usando ggplot2. Ordene as barras com reorder(word, n) e use coord_flip() para obter rótulos horizontais. Esse é um dos resultados mais comunicativos da mineração de texto.

library(tidytext)
library(dplyr)
library(ggplot2)

corpus <- tibble::tibble(
  text = c(
    'statistics probability machine learning algorithms patterns',
    'data science programming analysis visualisation models',
    'machine learning deep learning neural networks patterns',
    'probability statistics hypothesis testing distributions',
    'algorithms optimisation gradient descent models training'
  )
)

top_words <- corpus |>
  unnest_tokens(word, text) |>
  anti_join(stop_words, by = 'word') |>
  count(word, sort = TRUE) |>
  slice_head(n = 10)

ggplot(top_words, aes(reorder(word, n), n)) +
  geom_col(fill = 'steelblue') +
  coord_flip() +
  labs(x = 'Word', y = 'Count', title = 'Top 10 Terms') +
  theme_minimal()

Contagens de palavras por documento

Quando seu corpus tem vários documentos, adicione uma coluna identificadora do documento e agrupe por doc_id, word para calcular as frequências dos termos por documento. Isso alimenta diretamente as análises de TF-IDF e de modelos de tópicos.

library(tidytext)
library(dplyr)

docs <- tibble::tibble(
  doc_id = c(1, 1, 1, 2, 2, 2, 3, 3, 3),
  text   = c(
    'machine learning models training',
    'neural networks deep learning',
    'algorithms gradient descent optimisation',
    'statistical analysis probability distributions',
    'hypothesis testing confidence intervals regression',
    'bayesian inference prior posterior likelihood',
    'data visualisation plots charts dashboards',
    'ggplot2 ggvis plotly interactive graphics',
    'colour scales aesthetics themes layers'
  )
)

word_counts <- docs |>
  unnest_tokens(word, text) |>
  anti_join(stop_words, by = 'word') |>
  count(doc_id, word, sort = TRUE)

cat('Word-doc pairs:', nrow(word_counts), '\n')
print(head(word_counts, 10))

Tokenização de frases

Defina token = 'sentences' para dividir o texto nos limites das frases. Os tokens no nível da frase são úteis para análise de sentimentos (avaliar cada frase), sumarização (selecionar frases representativas) e tarefas de perguntas e respostas.

library(tidytext)
library(dplyr)

doc <- tibble::tibble(
  id   = 1L,
  text = paste(
    'R is a statistical programming language.',
    'It is widely used in data science and machine learning.',
    'The tidyverse makes data manipulation easy.',
    'Text mining with tidytext is elegant and powerful.'
  )
)

sentences <- doc |>
  unnest_tokens(sentence, text, token = 'sentences')

cat('Sentences found:', nrow(sentences), '\n')
print(sentences$sentence)

Verificação rápida

Você tokenizou um corpus em palavras usando unnest_tokens() e quer remover palavras comuns em inglês. Qual operação faz isso usando o conjunto de dados integrado stop_words?

Recapitulação: Tokenização e palavras funcionais

Principais conclusões:

  • unnest_tokens(word, text) converte texto bruto em um formato organizado com uma linha por palavra
  • Padrão: converte para minúsculas e remove a pontuação; aceita 'words', 'ngrams' e 'sentences'
  • stop_words é um tibble integrado com 1.149 palavras comuns em inglês provenientes de 3 léxicos
  • anti_join(tokens, stop_words, by = 'word') remove palavras funcionais
  • Combine com bind_rows() para adicionar palavras funcionais personalizadas do domínio
  • count(word, sort = TRUE) calcula a frequência dos termos a partir dos tokens organizados
  • Bigramas: unnest_tokens(bigram, text, token = 'ngrams', n = 2)
library(tidytext)
library(dplyr)

tibble::tibble(text = 'The quick brown fox jumps over the lazy dog') |>
  unnest_tokens(word, text) |>
  anti_join(stop_words, by = 'word') |>
  count(word, sort = TRUE) |>
  print()
Grátis para começar

Aprenda R com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
43
Aulas
159

Perguntas Frequentes

A aula “Tokenização e remoção de palavras irrelevantes” é grátis?

Sim — o texto completo de “Tokenização e remoção de palavras irrelevantes” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de R Academy, atualize para CoddyKit PRO. O curso de R Academy inclui 4 aulas no total.

O que vou aprender em “Tokenização e remoção de palavras irrelevantes”?

Divida o texto em tokens e filtre palavras sem informação com anti_join(). Você pratica R Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar R Academy?

Nenhuma experiência prévia é necessária. R Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Tokenização e remoção de palavras irrelevantes”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de R Academy?

Sim. Cada aula de R Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Tokenização e remoção de palavras irrelevantes
  2. TF-IDF e análise de frequência de termos
  3. Análise de sentimentos em R
  4. Modelagem de tópicos com LDA
← Voltar para R Academy