
Analisis de emociones
1. Cargar las librerias
library(readtext)
library(syuzhet)
library(RColorBrewer)
library(wordcloud)
library(tm)
## Loading required package: NLP
2. Limpiar texto
texto_df <- readtext("/Users/sebastianfajardo/Desktop/himno.rtf")
texto <- texto_df$text
texto_limpio <- tolower(texto) # Convertir a minúsculas
texto_limpio <- gsub("[[:punct:]]", " ", texto_limpio) # Eliminar puntuación
texto_limpio <- gsub("[[:digit:]]", "", texto_limpio) # Eliminar números
texto_limpio <- gsub("\\s+", " ", texto_limpio) # Eliminar espacios extra
texto_palabras <- unlist(strsplit(texto_limpio, "\\s+"))
emociones_df <- get_nrc_sentiment(texto_palabras, language = "spanish")
3. Generar graficas y
wordcloud
barplot(colSums(prop.table(emociones_df[, 1:8])), col = brewer.pal(8, "Dark2"),
main = "Distribución de Emociones", ylab = "Proporción de Emociones")

sentimientos <- (emociones_df$negative * -1) + emociones_df$positive
plot(sentimientos, type = "l", main = "Sentimientos Generales", xlab = "Índice", ylab = "Sentimiento")

wordcloud(words = texto_palabras, min.freq = 1, random.order = FALSE,
colors = brewer.pal(8, "Dark2"))
## Warning in tm_map.SimpleCorpus(corpus, tm::removePunctuation): transformation
## drops documents
## Warning in tm_map.SimpleCorpus(corpus, function(x) tm::removeWords(x,
## tm::stopwords())): transformation drops documents

conclusión
Sentimiento se refiere tanto a un estado de ánimo como también a una
emoción conceptualizada que determina el estado de ánimo.
LS0tCnRpdGxlOiAic2VudGltaWVudG9zIgphdXRob3I6ICJTZWJhc3Rpw6FuIEZhamFyZG8tIEEwMTQxMjAzNSIKZGF0ZTogIjIwMjQtMDgtMTMiCm91dHB1dDogCiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogVFJVRQogICAgdG9jX2Zsb2F0OiBUUlVFCiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFCiAgICB0aGVtZTogY29zbW8KLS0tCiFbXSgvVXNlcnMvc2ViYXN0aWFuZmFqYXJkby9Eb3dubG9hZHMvc2VudGltaWVudG9zLmpwZykKCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+QW5hbGlzaXMgZGUgZW1vY2lvbmVzPC9zcGFuPgoKIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij4xLiBDYXJnYXIgbGFzIGxpYnJlcmlhczwvc3Bhbj4KYGBge3J9CmxpYnJhcnkocmVhZHRleHQpCmxpYnJhcnkoc3l1emhldCkKbGlicmFyeShSQ29sb3JCcmV3ZXIpCmxpYnJhcnkod29yZGNsb3VkKQpsaWJyYXJ5KHRtKQpgYGAKIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij4yLiBMaW1waWFyIHRleHRvPC9zcGFuPgpgYGB7cn0KdGV4dG9fZGYgPC0gcmVhZHRleHQoIi9Vc2Vycy9zZWJhc3RpYW5mYWphcmRvL0Rlc2t0b3AvaGltbm8ucnRmIikKdGV4dG8gPC0gdGV4dG9fZGYkdGV4dCAKCnRleHRvX2xpbXBpbyA8LSB0b2xvd2VyKHRleHRvKSAjIENvbnZlcnRpciBhIG1pbsO6c2N1bGFzCnRleHRvX2xpbXBpbyA8LSBnc3ViKCJbWzpwdW5jdDpdXSIsICIgIiwgdGV4dG9fbGltcGlvKSAjIEVsaW1pbmFyIHB1bnR1YWNpw7NuCnRleHRvX2xpbXBpbyA8LSBnc3ViKCJbWzpkaWdpdDpdXSIsICIiLCB0ZXh0b19saW1waW8pICMgRWxpbWluYXIgbsO6bWVyb3MKdGV4dG9fbGltcGlvIDwtIGdzdWIoIlxccysiLCAiICIsIHRleHRvX2xpbXBpbykgIyBFbGltaW5hciBlc3BhY2lvcyBleHRyYQoKdGV4dG9fcGFsYWJyYXMgPC0gdW5saXN0KHN0cnNwbGl0KHRleHRvX2xpbXBpbywgIlxccysiKSkKCmVtb2Npb25lc19kZiA8LSBnZXRfbnJjX3NlbnRpbWVudCh0ZXh0b19wYWxhYnJhcywgbGFuZ3VhZ2UgPSAic3BhbmlzaCIpCmBgYAoKIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij4zLiBHZW5lcmFyIGdyYWZpY2FzIHkgd29yZGNsb3VkPC9zcGFuPgpgYGB7cn0KYmFycGxvdChjb2xTdW1zKHByb3AudGFibGUoZW1vY2lvbmVzX2RmWywgMTo4XSkpLCBjb2wgPSBicmV3ZXIucGFsKDgsICJEYXJrMiIpLAogICAgICAgIG1haW4gPSAiRGlzdHJpYnVjacOzbiBkZSBFbW9jaW9uZXMiLCB5bGFiID0gIlByb3BvcmNpw7NuIGRlIEVtb2Npb25lcyIpCgpzZW50aW1pZW50b3MgPC0gKGVtb2Npb25lc19kZiRuZWdhdGl2ZSAqIC0xKSArIGVtb2Npb25lc19kZiRwb3NpdGl2ZQoKcGxvdChzZW50aW1pZW50b3MsIHR5cGUgPSAibCIsIG1haW4gPSAiU2VudGltaWVudG9zIEdlbmVyYWxlcyIsIHhsYWIgPSAiw41uZGljZSIsIHlsYWIgPSAiU2VudGltaWVudG8iKQoKd29yZGNsb3VkKHdvcmRzID0gdGV4dG9fcGFsYWJyYXMsIG1pbi5mcmVxID0gMSwgcmFuZG9tLm9yZGVyID0gRkFMU0UsIAogICAgICAgICAgY29sb3JzID0gYnJld2VyLnBhbCg4LCAiRGFyazIiKSkKYGBgCgojIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPmNvbmNsdXNpw7NuPC9zcGFuPgpTZW50aW1pZW50byBzZSByZWZpZXJlIHRhbnRvIGEgdW4gZXN0YWRvIGRlIMOhbmltbyBjb21vIHRhbWJpw6luIGEgdW5hIGVtb2Npw7NuIGNvbmNlcHR1YWxpemFkYSBxdWUgZGV0ZXJtaW5hIGVsIGVzdGFkbyBkZSDDoW5pbW8uCg==