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")
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)
texto <- readLines("notas.txt", encoding = "UTF-8")
corpus <- Corpus(VectorSource(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
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)
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
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
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