R Academy · Lección

Tokenización y eliminación de palabras vacías

Divida el texto en tokens y filtre palabras poco informativas con anti_join().

Lección 1 de 413 pasos

Tokenización y eliminación de palabras vacías es una lección gratuita de R Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de R Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de R Academy incluye 4 lecciones en total.

¿Qué es la minería de textos?

La minería de textos (o análisis de textos) transforma texto no estructurado en datos estructurados que se pueden analizar estadísticamente. El paquete tidytext permite adoptar un enfoque tidy: cada fila es un token (palabra, bigrama o oración), lo que lo hace compatible con dplyr y 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: tokenización de palabras

unnest_tokens(output, input) divide el texto para obtener un formato con una fila por token. De forma predeterminada, tokeniza por palabra, convierte el texto a minúsculas y elimina la puntuación. El argumento token admite 'words', 'ngrams', 'sentences' y otros 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)

El conjunto de datos stop_words

tidytext incluye un tibble integrado llamado stop_words, que contiene 1.149 palabras vacías frecuentes del inglés procedentes de tres léxicos: SMART, Snowball y onix. Estas palabras ("the", "is", "and"…) aportan poco significado semántico y normalmente se eliminan antes del análisis.

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: eliminar palabras vacías

anti_join(tokens, stop_words, by = 'word') elimina todas las filas cuyo word coincide con alguna entrada de stop_words. Este es el patrón estándar de tidytext para eliminar palabras vacías: limpio, legible y 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: frecuencia de términos

Después de tokenizar y eliminar las palabras vacías, utilice count(word, sort = TRUE) para calcular la frecuencia de los términos. Esta es la base de muchos análisis de minería de textos: las palabras significativas más frecuentes caracterizan los temas del 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))

Palabras vacías personalizadas

Los corpus específicos de un dominio suelen contener palabras de alta frecuencia que no son relevantes (por ejemplo, "patient" y "doctor" en notas médicas). Cree un tibble personalizado de palabras vacías y combínelo con el léxico integrado mediante 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)

Tokenización de bigramas

Establezca token = 'ngrams', n = 2 para tokenizar el texto en pares consecutivos de palabras (bigramas). Los bigramas capturan expresiones como "machine learning" o "data science" que las palabras individuales no detectan, lo que proporciona un contexto más 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))

Filtrar bigramas para mejorar la calidad

Entre los bigramas más frecuentes aparecen pares de palabras vacías como "of the". Separe el bigrama en dos columnas con tidyr::separate(), filtre las filas en las que cualquiera de las dos palabras sea una palabra vacía y vuelva a unirlas para obtener pares de expresiones 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)

Visualizar las frecuencias de palabras

Represente las frecuencias de las palabras en un gráfico de barras con ggplot2. Ordene las barras con reorder(word, n) y utilice coord_flip() para mostrar etiquetas horizontales. Este es uno de los resultados más comunicativos de la minería de textos.

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()

Recuentos de palabras por documento

Cuando su corpus contiene varios documentos, añada una columna identificadora del documento y agrupe por doc_id, word para calcular las frecuencias de términos por documento. Esto se puede utilizar directamente en análisis TF-IDF y de modelos de temas.

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))

Tokenización de oraciones

Establezca token = 'sentences' para dividir el texto en los límites de las oraciones. Los tokens a nivel de oración resultan útiles para el análisis de sentimientos (asignar una puntuación a cada oración), la elaboración de resúmenes (seleccionar oraciones representativas) y las tareas de preguntas y respuestas.

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)

Comprobación rápida

Ha tokenizado un corpus en palabras mediante unnest_tokens() y desea eliminar las palabras frecuentes del inglés. ¿Qué operación permite hacerlo utilizando el conjunto de datos integrado stop_words?

Repaso: tokenización y palabras vacías

Conceptos clave:

  • unnest_tokens(word, text) convierte el texto sin procesar en un formato tidy con una fila por palabra
  • De forma predeterminada: convierte a minúsculas y elimina la puntuación; admite 'words', 'ngrams', 'sentences'
  • stop_words es un tibble integrado con 1.149 palabras frecuentes del inglés procedentes de 3 léxicos
  • anti_join(tokens, stop_words, by = 'word') elimina las palabras vacías
  • Combínelo con bind_rows() para añadir palabras vacías personalizadas y específicas del dominio
  • count(word, sort = TRUE) calcula la frecuencia de términos a partir de tokens tidy
  • 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()
Gratis para empezar

Aprende R con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
43
Lecciones
159

Preguntas frecuentes

¿La lección «Tokenización y eliminación de palabras vacías» es gratis?

Sí — el texto completo de «Tokenización y eliminación de palabras vacías» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de R Academy, actualiza a CoddyKit PRO. El curso de R Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Tokenización y eliminación de palabras vacías»?

Divida el texto en tokens y filtre palabras poco informativas con anti_join(). Practicas R Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar R Academy?

No se requiere experiencia previa. R Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Tokenización y eliminación de palabras vacías»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de R Academy?

Sí. Cada lección de R Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Tokenización y eliminación de palabras vacías
  2. TF-IDF y análisis de frecuencia de términos
  3. Análisis de sentimientos en R
  4. Modelado de temas con LDA
← Volver a R Academy