Analisis de Sentimientos

El analisis de sentimientos es utilizado para extraer de formar automatica informacion sobre la conotacion positiva o negativa del lenguaje de un documento.

El analisis mostrara el resultado en 8 emociones basicas y 2 sentimientos.

Emociones basicas:

  1. Alegria
  2. Tristeza
  3. Ira
  4. Sorpresa
  5. Asco
  6. Miedo
  7. Anticipacion
  8. Confianza

Sentimientos:

  1. Positivo
  2. Negativo

1. Instalar librerias

library(RColorBrewer)
library(syuzhet)

2. Cargar texto

texto_cadena <- read.delim("letratriste.txt", header=FALSE)

3. Tokenizar texto

texto_palabras <- get_tokens(texto_cadena)

4. Explorar texto

head(texto_palabras)
## [1] "c"        "que"      "triste"   "fue"      "decirnos" "adiós"
length(texto_palabras)
## [1] 175

5. Realizar analisis de sentimientos

sentimientos_df <- get_nrc_sentiment(texto_palabras, language = "spanish")
head(sentimientos_df)
##   anger anticipation disgust fear joy sadness surprise trust negative positive
## 1     0            0       0    0   0       0        0     0        0        0
## 2     0            0       0    0   0       0        0     0        0        0
## 3     1            0       1    2   0       5        0     0        5        0
## 4     0            0       0    0   0       0        0     0        0        0
## 5     0            0       0    0   0       0        0     0        0        0
## 6     0            0       0    0   0       0        0     0        0        0
summary(sentimientos_df)
##      anger          anticipation    disgust          fear     
##  Min.   :0.00000   Min.   :0     Min.   :0.00   Min.   :0.00  
##  1st Qu.:0.00000   1st Qu.:0     1st Qu.:0.00   1st Qu.:0.00  
##  Median :0.00000   Median :0     Median :0.00   Median :0.00  
##  Mean   :0.02286   Mean   :0     Mean   :0.04   Mean   :0.08  
##  3rd Qu.:0.00000   3rd Qu.:0     3rd Qu.:0.00   3rd Qu.:0.00  
##  Max.   :1.00000   Max.   :0     Max.   :1.00   Max.   :2.00  
##       joy             sadness          surprise     trust      negative     
##  Min.   :0.00000   Min.   :0.0000   Min.   :0   Min.   :0   Min.   :0.0000  
##  1st Qu.:0.00000   1st Qu.:0.0000   1st Qu.:0   1st Qu.:0   1st Qu.:0.0000  
##  Median :0.00000   Median :0.0000   Median :0   Median :0   Median :0.0000  
##  Mean   :0.03429   Mean   :0.2171   Mean   :0   Mean   :0   Mean   :0.2057  
##  3rd Qu.:0.00000   3rd Qu.:0.0000   3rd Qu.:0   3rd Qu.:0   3rd Qu.:0.0000  
##  Max.   :1.00000   Max.   :7.0000   Max.   :0   Max.   :0   Max.   :7.0000  
##     positive      
##  Min.   :0.00000  
##  1st Qu.:0.00000  
##  Median :0.00000  
##  Mean   :0.04571  
##  3rd Qu.:0.00000  
##  Max.   :1.00000

6. Graficar Resultados de las emociones

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 = "Analisis de sentimientos de la cancion El Triste",
  xlab = "Emociones"
)

7. Realizar analisis de sentimientos

palabras_tristeza <- texto_palabras[sentimientos_df$sadness >0]
palabras_tristeza_orden <- sort(table(unlist(palabras_tristeza)),
decreasing = TRUE)

head(palabras_tristeza_orden)
## 
##  triste   dolor    azul    gris soledad 
##       4       2       1       1       1

8. Graficar resultados de sentimientos

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

simple_plot(secuencia_sentimientos)

LS0tCnRpdGxlOiAiU2VudGltaWVudG9zIgphdXRob3I6ICJQYXRyaWNpbyBTYW5jaGV6IgpkYXRlOiAiMjAyMy0wOS0yNSIKb3V0cHV0OiAKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiBUUlVFCiAgICB0b2NfZmxvYXQ6IFRSVUUKICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUKICAgIHRoZW1lOiAic2ltcGxleCIKICAgIGhpZ2hsaWdodDogInB5Z21lbnRzIgotLS0KCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+QW5hbGlzaXMgZGUgU2VudGltaWVudG9zPC9zcGFuPgoKRWwgYW5hbGlzaXMgZGUgc2VudGltaWVudG9zIGVzIHV0aWxpemFkbyBwYXJhIGV4dHJhZXIgZGUgZm9ybWFyIGF1dG9tYXRpY2EgaW5mb3JtYWNpb24gc29icmUgbGEgY29ub3RhY2lvbiBwb3NpdGl2YSBvIG5lZ2F0aXZhIGRlbCBsZW5ndWFqZSBkZSB1biBkb2N1bWVudG8uCgpFbCBhbmFsaXNpcyBtb3N0cmFyYSBlbCByZXN1bHRhZG8gZW4gOCBlbW9jaW9uZXMgYmFzaWNhcyB5IDIgc2VudGltaWVudG9zLgoKRW1vY2lvbmVzIGJhc2ljYXM6CgoxLiBBbGVncmlhCjIuIFRyaXN0ZXphCjMuIElyYQo0LiBTb3JwcmVzYQo1LiBBc2NvCjYuIE1pZWRvCjcuIEFudGljaXBhY2lvbgo4LiBDb25maWFuemEKClNlbnRpbWllbnRvczoKCjEuIFBvc2l0aXZvCjIuIE5lZ2F0aXZvCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij4xLiBJbnN0YWxhciBsaWJyZXJpYXM8L3NwYW4+CmBgYHtyfQpsaWJyYXJ5KFJDb2xvckJyZXdlcikKbGlicmFyeShzeXV6aGV0KQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPjIuIENhcmdhciB0ZXh0bzwvc3Bhbj4KCmBgYHtyfQp0ZXh0b19jYWRlbmEgPC0gcmVhZC5kZWxpbSgibGV0cmF0cmlzdGUudHh0IiwgaGVhZGVyPUZBTFNFKQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPjMuIFRva2VuaXphciB0ZXh0bzwvc3Bhbj4KCmBgYHtyfQp0ZXh0b19wYWxhYnJhcyA8LSBnZXRfdG9rZW5zKHRleHRvX2NhZGVuYSkKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij40LiBFeHBsb3JhciB0ZXh0bzwvc3Bhbj4KYGBge3J9CmhlYWQodGV4dG9fcGFsYWJyYXMpCmxlbmd0aCh0ZXh0b19wYWxhYnJhcykKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij41LiBSZWFsaXphciBhbmFsaXNpcyBkZSBzZW50aW1pZW50b3M8L3NwYW4+CmBgYHtyfQpzZW50aW1pZW50b3NfZGYgPC0gZ2V0X25yY19zZW50aW1lbnQodGV4dG9fcGFsYWJyYXMsIGxhbmd1YWdlID0gInNwYW5pc2giKQpoZWFkKHNlbnRpbWllbnRvc19kZikKc3VtbWFyeShzZW50aW1pZW50b3NfZGYpCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+Ni4gR3JhZmljYXIgUmVzdWx0YWRvcyBkZSBsYXMgZW1vY2lvbmVzPC9zcGFuPgpgYGB7cn0KYmFycGxvdCgKICBjb2xTdW1zKHByb3AudGFibGUoc2VudGltaWVudG9zX2RmWywxOjhdKSksCiAgc3BhY2UgPSAwLjIsCiAgaG9yaXogPSBGQUxTRSwKICBsYXMgPSAxLAogIGNleC5uYW1lcyA9IDAuNywKICBjb2wgPSBicmV3ZXIucGFsKG49OCwgbmFtZT0iU2V0MyIpLAogIG1haW4gPSAiQW5hbGlzaXMgZGUgc2VudGltaWVudG9zIGRlIGxhIGNhbmNpb24gRWwgVHJpc3RlIiwKICB4bGFiID0gIkVtb2Npb25lcyIKKQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPjcuIFJlYWxpemFyIGFuYWxpc2lzIGRlIHNlbnRpbWllbnRvczwvc3Bhbj4KYGBge3J9CnBhbGFicmFzX3RyaXN0ZXphIDwtIHRleHRvX3BhbGFicmFzW3NlbnRpbWllbnRvc19kZiRzYWRuZXNzID4wXQpwYWxhYnJhc190cmlzdGV6YV9vcmRlbiA8LSBzb3J0KHRhYmxlKHVubGlzdChwYWxhYnJhc190cmlzdGV6YSkpLApkZWNyZWFzaW5nID0gVFJVRSkKCmhlYWQocGFsYWJyYXNfdHJpc3RlemFfb3JkZW4pCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+OC4gR3JhZmljYXIgcmVzdWx0YWRvcyBkZSBzZW50aW1pZW50b3M8L3NwYW4+CmBgYHtyfQpzZWN1ZW5jaWFfc2VudGltaWVudG9zIDwtIChzZW50aW1pZW50b3NfZGYkbmVnYXRpdmUqLTEpK3NlbnRpbWllbnRvc19kZiRwb3NpdGl2ZQoKc2ltcGxlX3Bsb3Qoc2VjdWVuY2lhX3NlbnRpbWllbnRvcykKYGBgCgo=