Instalar paquetes y llamar librerías

# install.packages("syuzhet")
library(syuzhet)
# install.packages("RColorBrewer")
library(RColorBrewer)

Cargar texto

texto_cadena <- scan(file = "/Users/valeriagrajales/Downloads/Himno_Nacional_Mexicano.txt", fileEncoding = "UTF-8", what = character(), sep = "\n", allowEscapes = T)

Tokenizar texto (Dividir un texto en palabras)

texto_palabras <- get_tokens(texto_cadena)

Explorar texto

head(texto_palabras)
## [1] "himno"     "nacional"  "mexicano"  "coro"      "mexicanos" "al"
length(texto_palabras)
## [1] 537
oraciones_vector <- get_sentences(texto_cadena)
length(oraciones_vector)
## [1] 115

Realizar Análisis de Sentimientos

sentimientos_df <- get_nrc_sentiment(texto_palabras, lang="spanish")
# Idiomas disponibles: english french, german, italian, portuguese, 
# spanish, etc.
summary(sentimientos_df)
##      anger          anticipation        disgust             fear       
##  Min.   :0.00000   Min.   :0.00000   Min.   :0.00000   Min.   :0.0000  
##  1st Qu.:0.00000   1st Qu.:0.00000   1st Qu.:0.00000   1st Qu.:0.0000  
##  Median :0.00000   Median :0.00000   Median :0.00000   Median :0.0000  
##  Mean   :0.05773   Mean   :0.04283   Mean   :0.02048   Mean   :0.0689  
##  3rd Qu.:0.00000   3rd Qu.:0.00000   3rd Qu.:0.00000   3rd Qu.:0.0000  
##  Max.   :3.00000   Max.   :2.00000   Max.   :2.00000   Max.   :2.0000  
##       joy             sadness           surprise           trust        
##  Min.   :0.00000   Min.   :0.00000   Min.   :0.00000   Min.   :0.00000  
##  1st Qu.:0.00000   1st Qu.:0.00000   1st Qu.:0.00000   1st Qu.:0.00000  
##  Median :0.00000   Median :0.00000   Median :0.00000   Median :0.00000  
##  Mean   :0.04842   Mean   :0.04283   Mean   :0.02421   Mean   :0.04097  
##  3rd Qu.:0.00000   3rd Qu.:0.00000   3rd Qu.:0.00000   3rd Qu.:0.00000  
##  Max.   :2.00000   Max.   :2.00000   Max.   :2.00000   Max.   :2.00000  
##     negative          positive     
##  Min.   :0.00000   Min.   :0.0000  
##  1st Qu.:0.00000   1st Qu.:0.0000  
##  Median :0.00000   Median :0.0000  
##  Mean   :0.07635   Mean   :0.0987  
##  3rd Qu.:0.00000   3rd Qu.:0.0000  
##  Max.   :3.00000   Max.   :3.0000
head(sentimientos_df)
##   anger anticipation disgust fear joy sadness surprise trust negative positive
## 1     0            1       0    0   1       1        0     1        0        1
## 2     0            0       0    0   0       0        0     0        0        0
## 3     0            0       0    0   0       0        0     0        0        0
## 4     0            0       0    0   1       0        0     1        0        2
## 5     0            0       0    0   0       0        0     0        0        0
## 6     0            0       0    0   0       0        0     0        0        0

Graficar resultados

barplot(
  colSums(prop.table(sentimientos_df[,1:8])),
  space = 0.2,
  horiz = FALSE,
  las = 1,
  cex.names = 0.7,
  col = brewer.pal(n=8, name = "Set3"),
  main = "Análisis de Sentimientos del Himno Nacional Mexicano",
  xlab = "Emociones"
)

Profundizar el análisis de emociones

palabras_confianza <- texto_palabras[sentimientos_df$trust > 0]
palabras_confianza_orden <- sort(table(unlist(palabras_confianza)), decreasing = TRUE)
head(palabras_confianza_orden, n = 10)
## 
##   gloria    honor      paz victoria   cantar     coro     dios    feliz 
##        4        2        2        2        1        1        1        1 
##    himno libertad 
##        1        1

Graficar resultados de sentimientos

secuencia_sentimientos <- (sentimientos_df$negative*-1) + sentimientos_df$positive
simple_plot(secuencia_sentimientos)

LS0tCnRpdGxlOiAiSGltbm8gTmFjaW9uYWwiCmF1dGhvcjogIlZhbGVyaWEgR3JhamFsZXMiCmRhdGU6ICIyMDIzLTA5LTI1IgpvdXRwdXQ6IAogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IFRSVUUKICAgIHRvY19mbG9hdDogVFJVRQogICAgY29kZV9kb3dubG9hZDogVFJVRQogICAgdGhlbWU6ICJyZWFkYWJsZSIKICAgIGhpZ2hsaWdodDogInB5Z21lbnRzIgotLS0KIVtdKC9Vc2Vycy92YWxlcmlhZ3JhamFsZXMvRG93bmxvYWRzL2ZhaXJseS1vZGQtcGFyZW50cy13YW5kYS5naWYpCgojIyMgSW5zdGFsYXIgcGFxdWV0ZXMgeSBsbGFtYXIgbGlicmVyw61hcwpgYGB7cn0KIyBpbnN0YWxsLnBhY2thZ2VzKCJzeXV6aGV0IikKbGlicmFyeShzeXV6aGV0KQojIGluc3RhbGwucGFja2FnZXMoIlJDb2xvckJyZXdlciIpCmxpYnJhcnkoUkNvbG9yQnJld2VyKQpgYGAKCgojIyMgQ2FyZ2FyIHRleHRvCmBgYHtyfQp0ZXh0b19jYWRlbmEgPC0gc2NhbihmaWxlID0gIi9Vc2Vycy92YWxlcmlhZ3JhamFsZXMvRG93bmxvYWRzL0hpbW5vX05hY2lvbmFsX01leGljYW5vLnR4dCIsIGZpbGVFbmNvZGluZyA9ICJVVEYtOCIsIHdoYXQgPSBjaGFyYWN0ZXIoKSwgc2VwID0gIlxuIiwgYWxsb3dFc2NhcGVzID0gVCkKCmBgYAoKIyMjIFRva2VuaXphciB0ZXh0byAoRGl2aWRpciB1biB0ZXh0byBlbiBwYWxhYnJhcykKYGBge3J9CnRleHRvX3BhbGFicmFzIDwtIGdldF90b2tlbnModGV4dG9fY2FkZW5hKQpgYGAKCiMjIyBFeHBsb3JhciB0ZXh0bwpgYGB7cn0KaGVhZCh0ZXh0b19wYWxhYnJhcykKbGVuZ3RoKHRleHRvX3BhbGFicmFzKQpvcmFjaW9uZXNfdmVjdG9yIDwtIGdldF9zZW50ZW5jZXModGV4dG9fY2FkZW5hKQpsZW5ndGgob3JhY2lvbmVzX3ZlY3RvcikKYGBgCgojIyMgUmVhbGl6YXIgQW7DoWxpc2lzIGRlIFNlbnRpbWllbnRvcwpgYGB7cn0Kc2VudGltaWVudG9zX2RmIDwtIGdldF9ucmNfc2VudGltZW50KHRleHRvX3BhbGFicmFzLCBsYW5nPSJzcGFuaXNoIikKIyBJZGlvbWFzIGRpc3BvbmlibGVzOiBlbmdsaXNoIGZyZW5jaCwgZ2VybWFuLCBpdGFsaWFuLCBwb3J0dWd1ZXNlLCAKIyBzcGFuaXNoLCBldGMuCnN1bW1hcnkoc2VudGltaWVudG9zX2RmKQpoZWFkKHNlbnRpbWllbnRvc19kZikKYGBgCgojIyMgR3JhZmljYXIgcmVzdWx0YWRvcwpgYGB7cn0KYmFycGxvdCgKICBjb2xTdW1zKHByb3AudGFibGUoc2VudGltaWVudG9zX2RmWywxOjhdKSksCiAgc3BhY2UgPSAwLjIsCiAgaG9yaXogPSBGQUxTRSwKICBsYXMgPSAxLAogIGNleC5uYW1lcyA9IDAuNywKICBjb2wgPSBicmV3ZXIucGFsKG49OCwgbmFtZSA9ICJTZXQzIiksCiAgbWFpbiA9ICJBbsOhbGlzaXMgZGUgU2VudGltaWVudG9zIGRlbCBIaW1ubyBOYWNpb25hbCBNZXhpY2FubyIsCiAgeGxhYiA9ICJFbW9jaW9uZXMiCikKYGBgCgojIyMgUHJvZnVuZGl6YXIgZWwgYW7DoWxpc2lzIGRlIGVtb2Npb25lcwpgYGB7cn0KcGFsYWJyYXNfY29uZmlhbnphIDwtIHRleHRvX3BhbGFicmFzW3NlbnRpbWllbnRvc19kZiR0cnVzdCA+IDBdCnBhbGFicmFzX2NvbmZpYW56YV9vcmRlbiA8LSBzb3J0KHRhYmxlKHVubGlzdChwYWxhYnJhc19jb25maWFuemEpKSwgZGVjcmVhc2luZyA9IFRSVUUpCmhlYWQocGFsYWJyYXNfY29uZmlhbnphX29yZGVuLCBuID0gMTApCmBgYAoKIyMjIEdyYWZpY2FyIHJlc3VsdGFkb3MgZGUgc2VudGltaWVudG9zCmBgYHtyfQpzZWN1ZW5jaWFfc2VudGltaWVudG9zIDwtIChzZW50aW1pZW50b3NfZGYkbmVnYXRpdmUqLTEpICsgc2VudGltaWVudG9zX2RmJHBvc2l0aXZlCnNpbXBsZV9wbG90KHNlY3VlbmNpYV9zZW50aW1pZW50b3MpCmBgYAoK