Análisis de sentimientos

El análisis de sentimienntos o mineria de opinión, es utilizado para extraer de forma automática información sobre la connotación positiva o negativa del lenguaje de un documento.

El análisis mostrará el resultado en 8 emociones básicas y 2 sentimientos. Emociones Básicas: 1.Alegría (joy) 2.Tristeza (sadness) 3.Ira (anger) 4.Sorpresa (surprise) 5.Asco (disgust) 6.Miedo (fear) 7.Anticipación (anticipación) 8.Confianza (trust) Sentimientos: 1.Positivo (positive) 2.Negative (negative)

1.Instalar librerías y llamar paquetes

#install.packages("syuzhet")
library(syuzhet)
#install.packages("RColorBrewer")
library(RColorBrewer)
## Warning: package 'RColorBrewer' was built under R version 4.1.3

2.Cargar texto

#file.choose()
texto_cadena <-read.delim("C:\\Users\\A00831614\\Documents\\Directorio de trabajo\\El triste.txt",header=FALSE)

3.Tokenizar texto

texto_palabras <-get_tokens(texto_cadena)

4.Tokenizar texto

head(texto_palabras)
## [1] "c"        "quã"      "triste"   "fue"      "decirnos" "adiã"
length(texto_palabras)
## [1] 182

5.Realizar análisis de sentimientos

sentimientos_df <-get_nrc_sentiment(texto_palabras,language="spanish")
#Idiomas disponibles: spanish, english, french, german, italian, portuguese, etc.
summary(sentimientos_df)
##      anger          anticipation    disgust             fear        
##  Min.   :0.00000   Min.   :0     Min.   :0.00000   Min.   :0.00000  
##  1st Qu.:0.00000   1st Qu.:0     1st Qu.:0.00000   1st Qu.:0.00000  
##  Median :0.00000   Median :0     Median :0.00000   Median :0.00000  
##  Mean   :0.02198   Mean   :0     Mean   :0.03846   Mean   :0.07692  
##  3rd Qu.:0.00000   3rd Qu.:0     3rd Qu.:0.00000   3rd Qu.:0.00000  
##  Max.   :1.00000   Max.   :0     Max.   :1.00000   Max.   :2.00000  
##       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.03297   Mean   :0.2088   Mean   :0   Mean   :0   Mean   :0.1978  
##  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.04396  
##  3rd Qu.:0.00000  
##  Max.   :1.00000
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

6. GRaficar resultados de 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="Análisis de sentimientos de la canción El triste",
  xlab="emociones"
)

7. Profundizar análisis de emociones

palabras_tristeza <-texto_palabras[sentimientos_df$sadness>0]
palabras_tristeza_orden <- sort(table(unlist(palabras_tristeza)), 
decreasing= TRUE)
head(palabras_tristeza_orden, n=10)
## 
##  triste   dolor    azul    gris soledad 
##       4       2       1       1       1

8. Graficas Resultados de Sentimientos

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

PARTE 2

Análisis del himno nacional

1.Instalar librerías y llamar paquetes

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

2.Cargar texto

#file.choose()
texto_cadena <-read.delim("C:\\Users\\A00831614\\Documents\\Directorio de trabajo\\Himno nacional.txt",header=FALSE)

3.Tokenizar texto

texto_palabras <-get_tokens(texto_cadena)

4.Tokenizar texto

head(texto_palabras)
## [1] "c"         "mexicanos" "al"        "grito"     "de"        "guerra"
length(texto_palabras)
## [1] 286

5.Realizar análisis de sentimientos

sentimientos_df <-get_nrc_sentiment(texto_palabras,language="spanish")
#Idiomas disponibles: spanish, english, french, german, italian, portuguese, etc.
summary(sentimientos_df)
##      anger          anticipation        disgust             fear        
##  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.05944   Mean   :0.02448   Mean   :0.01748   Mean   :0.08042  
##  3rd Qu.:0.00000   3rd Qu.:0.00000   3rd Qu.:0.00000   3rd Qu.:0.00000  
##  Max.   :2.00000   Max.   :2.00000   Max.   :1.00000   Max.   :2.00000  
##       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.03846   Mean   :0.04895   Mean   :0.02098   Mean   :0.04196  
##  3rd Qu.:0.00000   3rd Qu.:0.00000   3rd Qu.:0.00000   3rd Qu.:0.00000  
##  Max.   :2.00000   Max.   :1.00000   Max.   :2.00000   Max.   :2.00000  
##     negative          positive      
##  Min.   :0.00000   Min.   :0.00000  
##  1st Qu.:0.00000   1st Qu.:0.00000  
##  Median :0.00000   Median :0.00000  
##  Mean   :0.09441   Mean   :0.09091  
##  3rd Qu.:0.00000   3rd Qu.:0.00000  
##  Max.   :2.00000   Max.   :2.00000
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     0            0       0    0   0       0        0     0        0        0
## 4     2            0       0    1   0       1        2     0        2        0
## 5     0            0       0    0   0       0        0     0        0        0
## 6     1            0       0    2   0       1        0     0        2        0

6. Graficar resultados de 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="Análisis de sentimientos del himno nacional",
  xlab="emociones"
)

7. Profundizar análisis de emociones

palabras_tristeza <-texto_palabras[sentimientos_df$sadness>0]
palabras_tristeza_orden <- sort(table(unlist(palabras_tristeza)), 
decreasing= TRUE)
head(palabras_tristeza_orden, n=10)
## 
##  guerra  sangre   grito destino soldado 
##       7       3       2       1       1

8. Graficas Resultados de Sentimientos

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

LS0tDQp0aXRsZTogIkFjdGl2aWRhZCA0LjUiDQpvdXRwdXQ6IA0KIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiBUUlVFDQogICAgdG9jX2Zsb2F0OiBUUlVFDQogICAgY29kZV9kb3dubG9hZDogVFJVRQ0KICAgIHRoZW1lOiAieWV0aSINCiAgICBoaWdobGlnaHQ6ICJ0YW5nbyINCi0tLQ0KDQoNCiFbXShDOlxcVXNlcnNcXEEwMDgzMTYxNFxcRG9jdW1lbnRzXFxEaXJlY3RvcmlvIGRlIHRyYWJham9cXGVtb2Npb25lcy5naWYpDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBvcmFuZ2U7Ij4gQW7DoWxpc2lzIGRlIHNlbnRpbWllbnRvczwvc3Bhbj4NCg0KRWwgYW7DoWxpc2lzIGRlIHNlbnRpbWllbm50b3MgbyBtaW5lcmlhIGRlIG9waW5pw7NuLCBlcyB1dGlsaXphZG8gcGFyYSBleHRyYWVyIGRlIGZvcm1hIGF1dG9tw6F0aWNhIGluZm9ybWFjacOzbiBzb2JyZSBsYSBjb25ub3RhY2nDs24gcG9zaXRpdmEgbyBuZWdhdGl2YSBkZWwgbGVuZ3VhamUgZGUgdW4gZG9jdW1lbnRvLg0KDQpFbCBhbsOhbGlzaXMgbW9zdHJhcsOhIGVsIHJlc3VsdGFkbyBlbiA4IGVtb2Npb25lcyBiw6FzaWNhcyB5IDIgc2VudGltaWVudG9zLg0KRW1vY2lvbmVzIELDoXNpY2FzOg0KMS5BbGVncsOtYSAoam95KQ0KMi5UcmlzdGV6YSAoc2FkbmVzcykNCjMuSXJhIChhbmdlcikNCjQuU29ycHJlc2EgKHN1cnByaXNlKQ0KNS5Bc2NvIChkaXNndXN0KQ0KNi5NaWVkbyAoZmVhcikNCjcuQW50aWNpcGFjacOzbiAoYW50aWNpcGFjacOzbikNCjguQ29uZmlhbnphICh0cnVzdCkNClNlbnRpbWllbnRvczoNCjEuUG9zaXRpdm8gKHBvc2l0aXZlKQ0KMi5OZWdhdGl2ZSAobmVnYXRpdmUpDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBvcmFuZ2U7Ij4gMS5JbnN0YWxhciBsaWJyZXLDrWFzIHkgbGxhbWFyIHBhcXVldGVzIDwvc3Bhbj4NCmBgYHtyfQ0KI2luc3RhbGwucGFja2FnZXMoInN5dXpoZXQiKQ0KbGlicmFyeShzeXV6aGV0KQ0KI2luc3RhbGwucGFja2FnZXMoIlJDb2xvckJyZXdlciIpDQpsaWJyYXJ5KFJDb2xvckJyZXdlcikNCmBgYA0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjogb3JhbmdlOyI+Mi5DYXJnYXIgdGV4dG8gPC9zcGFuPg0KYGBge3J9DQojZmlsZS5jaG9vc2UoKQ0KdGV4dG9fY2FkZW5hIDwtcmVhZC5kZWxpbSgiQzpcXFVzZXJzXFxBMDA4MzE2MTRcXERvY3VtZW50c1xcRGlyZWN0b3JpbyBkZSB0cmFiYWpvXFxFbCB0cmlzdGUudHh0IixoZWFkZXI9RkFMU0UpDQpgYGANCg0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBvcmFuZ2U7Ij4zLlRva2VuaXphciB0ZXh0byA8L3NwYW4+DQpgYGB7cn0NCnRleHRvX3BhbGFicmFzIDwtZ2V0X3Rva2Vucyh0ZXh0b19jYWRlbmEpDQpgYGANCg0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBvcmFuZ2U7Ij40LlRva2VuaXphciB0ZXh0byA8L3NwYW4+DQpgYGB7cn0NCmhlYWQodGV4dG9fcGFsYWJyYXMpDQpsZW5ndGgodGV4dG9fcGFsYWJyYXMpDQpgYGANCg0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBvcmFuZ2U7Ij41LlJlYWxpemFyIGFuw6FsaXNpcyBkZSBzZW50aW1pZW50b3MgPC9zcGFuPg0KYGBge3J9DQpzZW50aW1pZW50b3NfZGYgPC1nZXRfbnJjX3NlbnRpbWVudCh0ZXh0b19wYWxhYnJhcyxsYW5ndWFnZT0ic3BhbmlzaCIpDQojSWRpb21hcyBkaXNwb25pYmxlczogc3BhbmlzaCwgZW5nbGlzaCwgZnJlbmNoLCBnZXJtYW4sIGl0YWxpYW4sIHBvcnR1Z3Vlc2UsIGV0Yy4NCnN1bW1hcnkoc2VudGltaWVudG9zX2RmKQ0KaGVhZChzZW50aW1pZW50b3NfZGYpDQpgYGANCg0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBvcmFuZ2U7Ij42LiBHUmFmaWNhciByZXN1bHRhZG9zIGRlIGVtb2Npb25lcyA8L3NwYW4+DQpgYGB7cn0NCmJhcnBsb3QoDQogIGNvbFN1bXMocHJvcC50YWJsZShzZW50aW1pZW50b3NfZGZbLDE6OF0pKSwNCiAgc3BhY2U9MC4yLA0KICBob3Jpej1GQUxTRSwNCiAgbGFzPSAxLA0KICBjZXgubmFtZXM9IDAuNywNCiAgY29sPWJyZXdlci5wYWwobj04LCBuYW1lPSJTZXQzIiksDQogIG1haW49IkFuw6FsaXNpcyBkZSBzZW50aW1pZW50b3MgZGUgbGEgY2FuY2nDs24gRWwgdHJpc3RlIiwNCiAgeGxhYj0iZW1vY2lvbmVzIg0KKQ0KYGBgDQoNCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogb3JhbmdlOyI+Ny4gUHJvZnVuZGl6YXIgYW7DoWxpc2lzIGRlIGVtb2Npb25lcyA8L3NwYW4+DQpgYGB7cn0NCnBhbGFicmFzX3RyaXN0ZXphIDwtdGV4dG9fcGFsYWJyYXNbc2VudGltaWVudG9zX2RmJHNhZG5lc3M+MF0NCnBhbGFicmFzX3RyaXN0ZXphX29yZGVuIDwtIHNvcnQodGFibGUodW5saXN0KHBhbGFicmFzX3RyaXN0ZXphKSksIA0KZGVjcmVhc2luZz0gVFJVRSkNCmhlYWQocGFsYWJyYXNfdHJpc3RlemFfb3JkZW4sIG49MTApDQpgYGANCg0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBvcmFuZ2U7Ij44LiBHcmFmaWNhcyBSZXN1bHRhZG9zIGRlIFNlbnRpbWllbnRvcyA8L3NwYW4+DQpgYGB7cn0NCnNlY3VlbmNpYV9zZW50aW1pZW50b3MgPC0gKHNlbnRpbWllbnRvc19kZiRuZWdhdGl2ZSotMSkrc2VudGltaWVudG9zX2RmJHBvc2l0aXZlDQpzaW1wbGVfcGxvdChzZWN1ZW5jaWFfc2VudGltaWVudG9zKQ0KYGBgDQoNCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPlBBUlRFIDIgPC9zcGFuPg0KDQoNCg0KDQoNCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZDsiPiBBbsOhbGlzaXMgZGVsIGhpbW5vIG5hY2lvbmFsPC9zcGFuPg0KDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7Ij4gMS5JbnN0YWxhciBsaWJyZXLDrWFzIHkgbGxhbWFyIHBhcXVldGVzIDwvc3Bhbj4NCmBgYHtyfQ0KI2luc3RhbGwucGFja2FnZXMoInN5dXpoZXQiKQ0KbGlicmFyeShzeXV6aGV0KQ0KI2luc3RhbGwucGFja2FnZXMoIlJDb2xvckJyZXdlciIpDQpsaWJyYXJ5KFJDb2xvckJyZXdlcikNCmBgYA0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyI+Mi5DYXJnYXIgdGV4dG8gPC9zcGFuPg0KDQpgYGB7cn0NCiNmaWxlLmNob29zZSgpDQp0ZXh0b19jYWRlbmEgPC1yZWFkLmRlbGltKCJDOlxcVXNlcnNcXEEwMDgzMTYxNFxcRG9jdW1lbnRzXFxEaXJlY3RvcmlvIGRlIHRyYWJham9cXEhpbW5vIG5hY2lvbmFsLnR4dCIsaGVhZGVyPUZBTFNFKQ0KYGBgDQoNCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyI+My5Ub2tlbml6YXIgdGV4dG8gPC9zcGFuPg0KYGBge3J9DQp0ZXh0b19wYWxhYnJhcyA8LWdldF90b2tlbnModGV4dG9fY2FkZW5hKQ0KYGBgDQoNCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyI+NC5Ub2tlbml6YXIgdGV4dG8gPC9zcGFuPg0KYGBge3J9DQpoZWFkKHRleHRvX3BhbGFicmFzKQ0KbGVuZ3RoKHRleHRvX3BhbGFicmFzKQ0KYGBgDQoNCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyI+NS5SZWFsaXphciBhbsOhbGlzaXMgZGUgc2VudGltaWVudG9zIDwvc3Bhbj4NCmBgYHtyfQ0Kc2VudGltaWVudG9zX2RmIDwtZ2V0X25yY19zZW50aW1lbnQodGV4dG9fcGFsYWJyYXMsbGFuZ3VhZ2U9InNwYW5pc2giKQ0KI0lkaW9tYXMgZGlzcG9uaWJsZXM6IHNwYW5pc2gsIGVuZ2xpc2gsIGZyZW5jaCwgZ2VybWFuLCBpdGFsaWFuLCBwb3J0dWd1ZXNlLCBldGMuDQpzdW1tYXJ5KHNlbnRpbWllbnRvc19kZikNCmhlYWQoc2VudGltaWVudG9zX2RmKQ0KYGBgDQoNCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyI+Ni4gR3JhZmljYXIgcmVzdWx0YWRvcyBkZSBlbW9jaW9uZXMgPC9zcGFuPg0KYGBge3J9DQpiYXJwbG90KA0KICBjb2xTdW1zKHByb3AudGFibGUoc2VudGltaWVudG9zX2RmWywxOjhdKSksDQogIHNwYWNlPTAuMiwNCiAgaG9yaXo9RkFMU0UsDQogIGxhcz0gMSwNCiAgY2V4Lm5hbWVzPSAwLjcsDQogIGNvbD1icmV3ZXIucGFsKG49OCwgbmFtZT0iU2V0MyIpLA0KICBtYWluPSJBbsOhbGlzaXMgZGUgc2VudGltaWVudG9zIGRlbCBoaW1ubyBuYWNpb25hbCIsDQogIHhsYWI9ImVtb2Npb25lcyINCikNCmBgYA0KDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZDsiPjcuIFByb2Z1bmRpemFyIGFuw6FsaXNpcyBkZSBlbW9jaW9uZXMgPC9zcGFuPg0KYGBge3J9DQpwYWxhYnJhc190cmlzdGV6YSA8LXRleHRvX3BhbGFicmFzW3NlbnRpbWllbnRvc19kZiRzYWRuZXNzPjBdDQpwYWxhYnJhc190cmlzdGV6YV9vcmRlbiA8LSBzb3J0KHRhYmxlKHVubGlzdChwYWxhYnJhc190cmlzdGV6YSkpLCANCmRlY3JlYXNpbmc9IFRSVUUpDQpoZWFkKHBhbGFicmFzX3RyaXN0ZXphX29yZGVuLCBuPTEwKQ0KYGBgDQoNCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogb3JhbmdlOyI+OC4gR3JhZmljYXMgUmVzdWx0YWRvcyBkZSBTZW50aW1pZW50b3MgPC9zcGFuPg0KYGBge3J9DQpzZWN1ZW5jaWFfc2VudGltaWVudG9zIDwtIChzZW50aW1pZW50b3NfZGYkbmVnYXRpdmUqLTEpK3NlbnRpbWllbnRvc19kZiRwb3NpdGl2ZQ0Kc2ltcGxlX3Bsb3Qoc2VjdWVuY2lhX3NlbnRpbWllbnRvcykNCmBgYA0KDQo=