library(tm)
library(pdftools)
library(SnowballC)
library(wordcloud)
library(RColorBrewer)
library(syuzhet)
library(ggplot2)
library(stringr)
library(text)
library(textdata)
library(tidytext)
library(dplyr)
library(tidyr)
library(zoo)
library(gridExtra)
<- readLines("/Users/gabrielmedina/Downloads/Aladdin_1992.txt")
t1992 <- Corpus(VectorSource(t1992))
corp_1992
<- readLines("/Users/gabrielmedina/Downloads/Aladdin_2019.txt")
t2019 <- Corpus(VectorSource(t2019)) corp_2019
# Convert the text to lower case
<- tm_map(corp_1992, content_transformer(tolower))
corp_1992 # Remove numbers
<- tm_map(corp_1992, removeNumbers)
corp_1992 # Remove english common stopwords
<- tm_map(corp_1992, removeWords, stopwords("english"))
corp_1992
# Remove punctuations
<- tm_map(corp_1992, removePunctuation)
corp_1992 # Eliminate extra white spaces
<- tm_map(corp_1992, stripWhitespace)
corp_1992
# Convert the text to lower case
<- tm_map(corp_2019, content_transformer(tolower))
corp_2019 # Remove numbers
<- tm_map(corp_2019, removeNumbers)
corp_2019 # Remove english common stopwords
<- tm_map(corp_2019, removeWords, stopwords("english"))
corp_2019
# Remove punctuations
<- tm_map(corp_2019, removePunctuation)
corp_2019# Eliminate extra white spaces
<- tm_map(corp_2019, stripWhitespace) corp_2019
# base combinada
=c(corp_2019,corp_1992) aladin_2_versiones
<- TermDocumentMatrix(corp_1992)
dtm_1992 <- TermDocumentMatrix(corp_2019)
dtm_2019 <- TermDocumentMatrix(aladin_2_versiones) dtm_2
=findFreqTerms(dtm_1992, lowfreq = 30)
freq_1992 freq_1992
## [1] "aladdin" "like" "back" "right" "carpet" "look"
## [7] "will" "pulls" "never" "one" "can" "see"
## [13] "lamp" "man" "iago" "jafar" "get" "head"
## [19] "now" "away" "turns" "just" "got" "looks"
## [25] "abu" "wish" "sees" "prince" "princess" "sultan"
## [31] "jasmine" "genie" "ali"
=findFreqTerms(dtm_2019, lowfreq = 30)
freq_2019 freq_2019
## [1] "wish" "genie" "like" "never" "will" "aladdin" "lamp"
## [8] "right" "think" "can" "one" "okay" "know" "get"
## [15] "jasmine" "got" "jafar" "sultan" "now" "see" "just"
## [22] "prince" "ali"
# Convertir las DTM en matrices para facilitar la manipulación
<- as.matrix(dtm_1992)
mat_1992 <- as.matrix(dtm_2019)
mat_2019
# Extraer frecuencias para los términos frecuentes en cada año
<- rowSums(mat_1992[rownames(mat_1992) %in% freq_1992, , drop=FALSE])
freq_1992_data <- rowSums(mat_2019[rownames(mat_2019) %in% freq_2019, , drop=FALSE])
freq_2019_data
# Convertir en data frames para facilitar la combinación
<- data.frame(term=names(freq_1992_data), freq_1992=freq_1992_data)
df_1992 <- data.frame(term=names(freq_2019_data), freq_2019=freq_2019_data)
df_2019
# Combinar los data frames por término
<- merge(df_1992, df_2019, by="term", all=TRUE)
combined_df
# Rellenar NAs con 0 para indicar ausencia de frecuencia
is.na(combined_df)] <- 0
combined_df[
# Ordenar por una de las columnas de frecuencia, si se desea
<- combined_df[order(-combined_df$freq_1992),]
combined_df
# Mostrar el data frame combinado
print(combined_df)
## term freq_1992 freq_2019
## 2 aladdin 382 195
## 13 jafar 200 66
## 14 jasmine 194 74
## 1 abu 168 0
## 8 genie 166 133
## 32 sultan 111 43
## 12 iago 93 0
## 7 carpet 89 0
## 5 back 72 0
## 26 prince 63 77
## 20 looks 60 0
## 17 lamp 57 38
## 18 like 52 52
## 25 one 48 47
## 27 princess 46 0
## 11 head 44 0
## 15 just 44 42
## 30 see 43 31
## 34 turns 42 0
## 28 pulls 41 0
## 3 ali 40 45
## 19 look 38 0
## 23 now 38 40
## 9 get 35 39
## 10 got 35 30
## 31 sees 35 0
## 4 away 32 0
## 21 man 32 0
## 29 right 32 43
## 35 will 32 47
## 6 can 31 43
## 22 never 30 37
## 36 wish 30 46
## 16 know 0 41
## 24 okay 0 32
## 33 think 0 40
ggplot(head(df_1992, 10), aes(x = reorder(term, -freq_1992), y = freq_1992)) +
geom_bar(stat = "identity", fill = "lightblue")+
labs(x= "Palabra", y = "Frecuencia", title = "Top 10 Palabras en Aladdin 1992")+
geom_text(aes(label = freq_1992), vjust = -0.5) +
ylim(0,400)
ggplot(head(df_2019, 10), aes(x = reorder(term, -freq_2019), y = freq_2019)) +
geom_bar(stat = "identity", fill = "lightblue")+
labs(x= "Palabra", y = "Frecuencia", title = "Top 10 Palabras en el Aladdin 2019")+
geom_text(aes(label = freq_2019), vjust = -0.5) +
ylim(0,400)
findAssocs(dtm_1992, terms = "ali", corlimit = 0.2)
## $ali
## ababwa prince lousy loyalty mighty
## 0.53 0.48 0.29 0.29 0.20
set.seed(123)
wordcloud(words= df_1992$term, freq=df_1992$freq_1992, min.freq = 1, random.order = FALSE, colors = brewer.pal(8, "RdPu"))
set.seed(123)
wordcloud(words= df_2019$term, freq=df_2019$freq_2019, min.freq = 1, random.order = FALSE, colors = brewer.pal(8, "RdPu"))
= get_tokens(corp_1992)
texto_palabras =get_nrc_sentiment(texto_palabras, language = "spanish" )
emocionesdf= barplot(colSums(prop.table(emocionesdf[,1:8]))) plot1
# Generate the simplified macro shape plot
=get_nrc_sentiment(texto_palabras, language = "spanish" )
emocionesdf=(emocionesdf$negative-1) + emocionesdf$positive
sentimientos= simple_plot(sentimientos) plot2
= get_tokens(corp_2019)
texto_palabras2 =get_nrc_sentiment(texto_palabras2, language = "spanish" )
emocionesdf2= barplot(colSums(prop.table(emocionesdf2[,1:8]))) plot2
# Generate the simplified macro shape plot
=get_nrc_sentiment(texto_palabras2, language = "spanish" )
emocionesdf2=(emocionesdf2$negative-1) + emocionesdf2$positive
sentimientos2= simple_plot(sentimientos2) plot2
En este análisis de texto, primero que nada se realizó una limpieza de datos, en la cual se llevó acabo una análisis de exploración del texto para encontrar inconsistencias. Gracias a dicha exploración se determinó eliminar stopwords “the”,“at”, etc. que no aportan nada al contexto o el entendimiento de las versiones. Además, para un correcto análisis, se eliminaron signos de puntuación, se cambió todo el texto a minúsculas, se eliminaron los números y los espacios en blanco repetidos. Posteriormente se llevaron acabo transformaciones que permitieran el análisis del texto, específicamente, se hizo una base de datos combinada, así como se convirtieron los corpus a matrices y a dataframes.
Personajes Principales Mantienen Relevancia: La persistencia de personajes como “Aladdin”, “Jafar” y “Jasmine” en ambas versiones, aunque con una reducción en la frecuencia, sugiere que mientras estos personajes siguen siendo centrales, la narrativa alrededor de ellos podría haberse expandido para incluir nuevas subtramas o personajes secundarios, ajustando su enfoque narrativo.
Reducción en la Mención de Personajes Secundarios y Elementos: La notable disminución en la mención de personajes como “Abu”, “Iago” y “Carpet” en la versión de 2019 podría indicar un cambio en la relevancia de estos personajes dentro de la historia o una posible modernización de la narrativa que prioriza elementos diferentes. La ausencia de “Abu”, “Iago” y “Carpet” en la lista de 2019 sugiere que la nueva versión podría haber reducido la atención en las travesuras cómicas o las dinámicas de personajes secundarios para centrarse más en el desarrollo de personajes principales o introducir nuevos elementos narrativos.
Consistencia en Temas Universales: La presencia de términos como “prince” (príncipe) y “princess” (princesa) en ambas versiones, con una frecuencia similar o incluso aumentada en el caso de “prince”, refleja la conservación de temas universales de nobleza, romance y aspiración, fundamentales en la trama de “Aladdin”. Sin embargo, en la versión de 1992, se nota un enfoque más mágino e imaginativo, con una mayor frecuencia de palabras como “magis”, “lamp”, etc.
Modernización del Lenguaje y Contexto: La presencia de términos más neutrales o genéricos como “looks”, “like”, “one”, “just”, y “see” en ambas versiones, con poca variación en su frecuencia, puede indicar un esfuerzo por mantener un lenguaje accesible y relevante para las audiencias contemporáneas. Esto podría reflejar un intento de hacer la historia más atemporal o de enfocarse en elementos de la narrativa que resuenan universalmente.
En cuanto al análisis de sentimientos, se puede apreciar cómo la versión de 1992 tiene un presencia mayoritaria de emociones negativas como disgusto, miedo y coraje, por otro lado la versión de 2019 tiene un enfoque más positivo y amigable, donde predomina ampliamente la emoción de confianza. Por otro lado, el desarrollo de las emociones a lo largo de la trama es muy similiar entre ambas versiones, es decir, el desarrollo de las tramas es muy similar notandose un desarrollo del problema al principio de la película u un clímas poco antes de la parte final.