library(SnowballC)
library(pdftools)
library(gridExtra)
library(tidytext)
library(stringr)
library(SnowballC)
library(RColorBrewer)
library(text)
library(zoo)
library(tm)
library(textdata)
library(tidyr)
library(ggplot2)
library(dplyr)
library(syuzhet)
library(wordcloud)
#Leer PDF
pdf_1992 <- pdf_text("Aladin_1992.pdf")
#Convertir a corpus
corpus_Aladin_1992 <- Corpus(VectorSource(pdf_1992))
#Leer PDF
pdf_2019 <- pdf_text("Aladin_2019.pdf")
#Convertir a corpus
corpus_Aladin_2019 <- Corpus(VectorSource(pdf_2019))
removeQuotationMarks <- content_transformer(function(x) gsub("\"", "", x))
cleanTextEnhanced <- content_transformer(function(x) {
x <- gsub("[\"“”‘’]", "", x)
x <- gsub("[[:punct:]]", "", x)
x <- gsub("\\s+", " ", x)
x <- trimws(x)
return(x)
})
corpusLimpio_Aladin_1992 <- tm_map(corpus_Aladin_1992, content_transformer(tolower))
corpusLimpio_Aladin_1992 <- tm_map(corpusLimpio_Aladin_1992, removePunctuation, ucp = TRUE)
corpusLimpio_Aladin_1992 <- tm_map(corpusLimpio_Aladin_1992, removeNumbers)
corpusLimpio_Aladin_1992 <- tm_map(corpusLimpio_Aladin_1992, removeWords, stopwords("english"))
corpusLimpio_Aladin_2019 <- tm_map(corpus_Aladin_2019, content_transformer(tolower))
corpusLimpio_Aladin_2019 <- tm_map(corpusLimpio_Aladin_2019, removePunctuation, ucp = TRUE)
corpusLimpio_Aladin_2019 <- tm_map(corpusLimpio_Aladin_2019, removeNumbers)
corpusLimpio_Aladin_2019 <- tm_map(corpusLimpio_Aladin_2019, removeWords, stopwords("english"))
#Term-Document Matrix para Aladin de 1992
Matrix_A_1992 <- TermDocumentMatrix(corpusLimpio_Aladin_1992)
#Term-Document Matrix para Aladin de 2019
Matrix_A_2019 <- TermDocumentMatrix(corpusLimpio_Aladin_2019)
#Term-Document Matrix para las versiones convinadas
corpus_A <- c(corpusLimpio_Aladin_1992, corpusLimpio_Aladin_2019)
Matrix_A <- TermDocumentMatrix(corpus_A)
aladin_matrix <- as.matrix(Matrix_A)
freq_terms <- findFreqTerms(Matrix_A, lowfreq = 35)
freq_matrix <- aladin_matrix[freq_terms, ]
apply(freq_matrix, 1, sum)
## \\n\\n \\n\\naladdin \\n\\ngenie \\naladdin abu
## 52 58 42 43 122
## aladdin ali back can cant
## 136 53 79 61 43
## carpet come dont genie get
## 84 44 90 103 72
## good got head hes iago
## 37 59 40 48 37
## jafar jasmine just know lamp
## 86 70 74 50 57
## like little look looks make
## 92 40 50 59 47
## man never new now one
## 39 60 35 63 77
## prince princess pulls right see
## 101 53 36 57 67
## sultan take thats think turns
## 59 39 53 51 40
## way well will wish yes
## 39 50 69 65 42
## youre
## 56
associations <- findAssocs(Matrix_A, "jasmine", 0.3)
#Extraer las asociaciones de 'jasmine' y ordenarlas en orden decreciente
asociacion_jasmine <- associations$jasmine
asociacion_jasmine_sorted <- sort(asociacion_jasmine, decreasing = TRUE)
#Top 5 asociaciones
top_5 <- head(asociacion_jasmine_sorted, 5)
print(top_5)
## \\nabu \\naladdin \\ngenie \\njafar \\nsultan
## 1 1 1 1 1
#Terminos frecuentes
TF_Aladin_1992 <- findFreqTerms(Matrix_A_1992, lowfreq = 80)
#Extreaer frecuencias
matrix_F_1992 <- as.matrix(Matrix_A_1992[TF_Aladin_1992, ])
frecuencias_1992 <- rowSums(matrix_F_1992)
#Terminos frecuentes
TF_Aladin_2019 <- findFreqTerms(Matrix_A_2019, lowfreq = 20)
#Extreaer frecuencias
matrix_F_2019 <- as.matrix(Matrix_A_2019[TF_Aladin_2019, ])
frecuencias_2019 <- rowSums(matrix_F_2019)
#Crear un data frame para convinar los datos y asi lograr realizar la comparacion
comparacion_frecuencias <- merge(data.frame(Term = names(frecuencias_1992), Aladdin_1992 = frecuencias_1992),
data.frame(Term = names(frecuencias_2019), Aladdin_2019 = frecuencias_2019),
by = "Term", all = TRUE)
#Reemplazar NA´s por 0
comparacion_frecuencias[is.na(comparacion_frecuencias)] <- 0
#Orden para una mejor visualizacion
comparacion_frecuencias <- comparacion_frecuencias[order(-comparacion_frecuencias$Aladdin_1992),]
print(comparacion_frecuencias)
## Term Aladdin_1992 Aladdin_2019
## 2 aladdin 381 193
## 14 jafar 197 66
## 15 jasmine 194 74
## 1 abu 166 29
## 9 genie 164 133
## 32 sultan 110 43
## 13 iago 93 20
## 6 carpet 89 0
## 3 ali 0 45
## 4 can 0 43
## 5 cant 0 24
## 7 come 0 22
## 8 dont 0 60
## 10 get 0 39
## 11 got 0 30
## 12 hes 0 32
## 16 just 0 42
## 17 know 0 41
## 18 lamp 0 38
## 19 like 0 52
## 20 little 0 20
## 21 make 0 25
## 22 never 0 37
## 23 now 0 40
## 24 okay 0 32
## 25 one 0 47
## 26 people 0 24
## 27 prince 0 77
## 28 princess 0 29
## 29 right 0 43
## 30 say 0 25
## 31 see 0 31
## 33 take 0 25
## 34 thats 0 34
## 35 think 0 40
## 36 way 0 21
## 37 well 0 26
## 38 will 0 47
## 39 wish 0 45
## 40 yes 0 26
## 41 youre 0 34
paleta_de_colores <- colorRampPalette(c("#FFC0CB", "#800080"))
aladin_matrix <- as.matrix(TermDocumentMatrix(corpus_A))
#Calcular la frecuencia de las palabras
frecuencia_palabras <- sort(rowSums(aladin_matrix), decreasing = TRUE)
#Eliminar palabras que comienzan o terminan con comillas de la lista de frecuencia
frecuencia_palabras <- frecuencia_palabras[!grepl('^"|"$', names(frecuencia_palabras))]
#Nube de Palabras
wordcloud(names(frecuencia_palabras), frecuencia_palabras, max.words = 10, colors = paleta_de_colores(10))
#Convertir el corpus a texto plano
aladin_1992_texto<- sapply(corpusLimpio_Aladin_1992, as.character)
#Analisis de Sentimientos
dataframe_emociones_1992 <- get_nrc_sentiment(aladin_1992_texto)
# Cargar los datos de las emociones
S_emociones <- colSums(prop.table(dataframe_emociones_1992[, 1:10]))
# Definir los colores para cada emoción
colores_emociones <- c("anger" = "red",
"anticipation" = "orange",
"disgust" = "gray",
"fear" = "purple",
"joy" = "yellow",
"sadness" = "blue",
"surprise" = "cyan",
"trust" = "green",
"negative" = "darkred",
"positive" = "pink")
# Crear el gráfico de barras
barplot(S_emociones,
main = "Análisis de Sentimientos",
las = 2,
col = colores_emociones, # Asignar colores a cada emoción
legend.text = FALSE)
#Convertir el corpus a texto plano
aladin_2019_texto<- sapply(corpusLimpio_Aladin_2019, as.character)
#Analisis de Sentimientos
dataframe_emociones_2019 <- get_nrc_sentiment(aladin_2019_texto)
# Cargar los datos de las emociones
S_emociones2 <- colSums(prop.table(dataframe_emociones_2019[, 1:10]))
# Definir los colores para cada emoción
colores_emociones <- c("anger" = "red",
"anticipation" = "orange",
"disgust" = "gray",
"fear" = "purple",
"joy" = "yellow",
"sadness" = "blue",
"surprise" = "cyan",
"trust" = "green",
"negative" = "darkred",
"positive" = "pink")
# Crear el gráfico de barras
barplot(S_emociones2,
main = "Análisis de Sentimientos",
las = 2,
col = colores_emociones, # Asignar colores a cada emoción
legend.text = FALSE)
dataframe_emociones_C <- rbind(data.frame(Emociones = names(S_emociones), Proporcion = S_emociones, Version = "1992"),
data.frame(Emociones = names(S_emociones2), Proporcion = S_emociones2, Version = "2019"))
ggplot(dataframe_emociones_C, aes(x = Emociones, y = Proporcion, fill = Version)) +
geom_bar(stat = "identity", position = position_dodge(width = 0.8)) +
scale_fill_manual(values = c("1992" = "pink", "2019" = "purple")) +
labs(title = "Análisis Comparativo de Emociones Aladin 1992 vs 2019 ") +
theme_minimal()
Se esta realizando unanalisis del contenido de los guiones de Aladin en su version de 1992 y 2019, en el cual se incluyen los diálogos de los personajes, notas del guinista, las letras de las canciones, y cualquier otro texto que esté presente.
Se están aplicando procesos de transformación y limpieza de datos sobre los textos. Lo cual implica la eliminación de palabras vacías, la puntuación y la conversión de todas las palabras a minúsculas. Estos pasos ayudan a preparar el texto para un análisis más eficaz y preciso.”
La aplicación de procesos de transformación y limpieza de datos en el texto es crucial por varias razones:
Eliminación de palabras vacías: Las palabras vacías, como “y”, “o”, “en”, etc., no aportan un significado relevante al análisis y pueden introducir ruido innecesario. Al eliminar estas palabras, el análisis se centra en las palabras que realmente transmiten información importante.
Eliminación de puntuación: La eliminación de la puntuación garantiza que el análisis se base únicamente en las palabras significativas del texto.
Conversión a minúsculas: La conversión de todas las palabras a minúsculas ayuda a evitar la duplicación de palabras debido a diferencias de capitalización.
En resumen, estos pasos de limpieza y transformación preparan el texto para un análisis más efectivo y preciso al eliminar el ruido innecesario y garantizar la consistencia en el tratamiento de las palabras. Esto permite obtener resultados más confiables y significativos en el análisis de los datos textuales.
Personajes Principales: Con base al previo analisis realizado se llego a la conclusion de que estos son Aladdin y Jasmine, debido a que son mencionados con mayor frecuencia, lo que indica su papel principal en la historia. Cabe mencionar que su presencia destacada en ambas versiones.
Asociaciones de Personajes: La palabra “jasmine” esta asociada al genio, aladin, abu, jafar y el sultan.
Analisis de Sentimientos: