Primer paso: prerequisitos

Lo primero que debemos hacer es instalar las bibliotecas necesarias para ejecutar el programa

# Quita el signo de # de las siguientes líneas. Sólo se ejecuta una vez
# install.packages("tm")
# install.packages("wordcloud")
# install.packages("RColorBrewer")
# install.packages("tidytext")

Segundo pas: Indicar las bibliotecas

Ya que están instaladas, el siguiente paso es informar que se van a usar:

library(tm)
## Loading required package: NLP
library(wordcloud)
## Loading required package: RColorBrewer
library(RColorBrewer)

Tercer paso: la lectura y análisis del documento

1. Leer el archivo de texto

texto <- readLines("notas.txt", encoding = "UTF-8")

2. Crear un corpus

corpus <- Corpus(VectorSource(texto))

3. Limpieza y preprocesamiento del texto

corpus <- tm_map(corpus, content_transformer(tolower))  # Convertir a minúsculas
## Warning in tm_map.SimpleCorpus(corpus, content_transformer(tolower)):
## transformation drops documents
corpus <- tm_map(corpus, removePunctuation)              # Eliminar puntuación
## Warning in tm_map.SimpleCorpus(corpus, removePunctuation): transformation drops
## documents
corpus <- tm_map(corpus, removeNumbers)                  # Eliminar números
## Warning in tm_map.SimpleCorpus(corpus, removeNumbers): transformation drops
## documents
corpus <- tm_map(corpus, removeWords, stopwords("spanish")) # Eliminar stop words en español
## Warning in tm_map.SimpleCorpus(corpus, removeWords, stopwords("spanish")):
## transformation drops documents
corpus <- tm_map(corpus, stripWhitespace)                # Eliminar espacios extras
## Warning in tm_map.SimpleCorpus(corpus, stripWhitespace): transformation drops
## documents

4. Crear matriz de términos-documentos

dtm <- TermDocumentMatrix(corpus)
matriz <- as.matrix(dtm)
palabras_freq <- sort(rowSums(matriz), decreasing = TRUE)
df_palabras <- data.frame(palabra = names(palabras_freq), 
                          frecuencia = palabras_freq)

4.1. (Opcional) Ver las palabras más frecuentes

head(df_palabras, 20)
##                     palabra frecuencia
## “                         “         53
## uam                     uam         39
## universidad     universidad         26
## radio                 radio         22
## derechos           derechos         18
## general             general         18
## sino                   sino         17
## niños                 niños         16
## méxico               méxico         16
## unidad               unidad         16
## social               social         16
## investigación investigación         15
## trabajo             trabajo         15
## ópera                 ópera         15
## número               número         14
## niñas                 niñas         14
## autónoma           autónoma         14
## conocimiento   conocimiento         13
## células             células         13
## ciencia             ciencia         13

5. Generar la nube de palabras

set.seed(1234)  # Para reproducibilidad

wordcloud(words = df_palabras$palabra, 
          freq = df_palabras$frecuencia,
          min.freq = 2,                    # Frecuencia mínima
          max.words = 100,                 # Número máximo de palabras
          random.order = FALSE,            # Palabras ordenadas por frecuencia
          rot.per = 0.35,                  # Proporción de palabras rotadas 90°
          colors = brewer.pal(8, "Dark2")) # Paleta de colores

6. (Opcional) Guardar la nube de palabras como imagen

png("nube_palabras.png", width = 800, height = 800)
wordcloud(words = df_palabras$palabra, 
          freq = df_palabras$frecuencia,
          min.freq = 2,
          max.words = 100,
          random.order = FALSE,
          rot.per = 0.35,
          colors = brewer.pal(8, "Dark2"))
dev.off()
## quartz_off_screen 
##                 2