knitr::opts_chunk$set(echo = TRUE, warning = FALSE, message = FALSE)
# Paquetes ----------------------------------------------------
library(pacman) # Package Manager
p_load(foreign, colourpicker, plotrix, PerformanceAnalytics,
ggplot2, gganimate, png, plotly, forcats,
RColorBrewer, maps, mapdata, lubridate, scales,
esquisse, cowplot, ggpubr, patchwork, ggthemes, tvthemes,
gghighlight, gifski, av, ggpie, lessR, tidyverse,
tidytext, tm, wordcloud, wordcloud2, waterfalls,
treemapify, waffle, dplyr, readr, stringr, data.table, hexbin,
ggdensity, tidyquant, pdftools, widyr,
leaflet, magrittr, stopwords, readxl, htmlwidgets, dplyr)
options(scipen = 999)
options(digits = 3)
El silencio de los inocentes (The Silence of the Lambs) es una novela de 1988 escrita por Thomas Harris, famosa por su adaptación cinematográfica en 1991. La historia sigue a Clarice Starling, una joven agente del FBI en formación, que busca la ayuda del brillante pero peligroso psiquiatra y asesino en serie Hannibal Lecter para atrapar a otro criminal, Buffalo Bill, que secuestra y asesina mujeres.
La obra explora temas como la psicología del crimen, el poder de la manipulación y la lucha entre el bien y el mal. La película ganó múltiples premios Oscar, incluido Mejor Película, y convirtió a Hannibal Lecter en un ícono cultural.
El flujo general del código comienza extrayendo el texto del archivo PDF “El silencio de los inocentes” de Thomas Harris. Esta extracción permite obtener todo el contenido del libro en formato de cadena de texto. Luego, realiza un proceso de limpieza para eliminar encabezados repetitivos, frases o citas innecesarias que aparecen al principio del texto. Esto ayuda a preparar el texto para un análisis más detallado y libre de elementos que no contribuyen al análisis.Después, guarda este texto limpio en un archivo de texto plano llamado cuento2.txt. Una vez guardado, se lee nuevamente el archivo para convertirlo en una lista de palabras (tokens). Para preparar los datos para el análisis, se cargan las stopwords (palabras muy comunes en el idioma que generalmente no aportan mucho al análisis), tanto desde una lista preexistente en el paquete stopwords como desde un archivo personalizado en Excel. Estas listas de stopwords se combinan y se eliminan las palabras que están presentes en ambas.El paso final consiste en eliminar estas palabras de parada del conjunto de datos de tokens, resultando en un conjunto de palabras más limpio y relevante. Este proceso prepara el texto de la novela “El silencio de los inocentes” para realizar análisis más profundos, como contar las frecuencias de palabras o realizar un análisis de sentimientos. La transformación final proporciona un marco para investigar las características, emociones y temas recurrentes en el texto original.
library(pdftools)
cuento<- pdf_text("El silencio de los inocentes - Thomas Harris.pdf")
cuento2<- cuento[-1]
# Buscando el encabezado de página
library(stringr)
cuento2 <- str_remove_all(cuento2, "A la memoria de mi padre")
cuento2 <- str_remove_all(cuento2, "Si sólo por motivos humanos luché con las fieras en")
cuento2 <- str_remove_all(cuento2, "Éfeso, ¿qué me aprovechó, si los muertos no")
cuento2 <- str_remove_all(cuento2, "resucitan?")
cuento2 <- str_remove_all(cuento2, "1. CORINTIOS")
cuento2 <- str_remove_all(cuento2, "¿Habré de contemplar una calavera en un anillo, yo")
cuento2 <- str_remove_all(cuento2,"que llevo una en el rostro?")
cuento2 <- str_remove_all(cuento2, "JOHN DONNE, Devociones")
cuento2 <- str_remove_all(cuento2, "-")
cuento2 <- str_remove_all(cuento2, "CAPÍTULO [:digit:]")
# Guardando como un archivo de texto plano
library(readr)
write_lines(cuento2, "cuento2.txt")
cuento2<- scan("cuento2.txt",
encoding = "UTF-8", what = "char", skip = 0,
sep = "\n")
cuento2 <- tibble(cuento2) %>% #conviente en una tabla donde cada palabra esta en una celda
unnest_tokens(Token, cuento2) %>% #token=palabras, unnes_tokens, desenpaqueta las palabras
mutate(Token = removeNumbers(Token))
#1LIMPIEZA DE DATOS-----------------------------------------------
library(stopwords)
stopwords_es <- stopwords::stopwords(language = "es",
source = "nltk")
stopwords_es_1 <- read_excel("CustomStopWords.xlsx")
names(stopwords_es_1) <- c("Token", "Fuente")
stopwords_es_2 <- tibble(Token = c(""), Fuente = "Mis StopWords")
stopwords_es <- rbind(stopwords_es_1, stopwords_es_2)
stopwords_es <- stopwords_es[!duplicated(stopwords_es$Token), ]
library(magrittr)
library(dplyr)
cuento3 <- cuento2 %>% anti_join(stopwords_es)
#para eliminar de cuento2 todas las filas
#que contienen tokens que están en stopwords_es.
cuento3_frecuencias <- cuento3 %>%
dplyr::count(Token, sort = TRUE)
En el gráfico podemos observar que la palabra más utilizada es “Starling”. Esto se debe a que en la novela se menciona frecuentemente a la señorita Catherine, cuyo apellido es Starling.De manera similar, el gráfico muestra que en el top 10 de palabras más utilizadas predominan nombres o apellidos como “Martin”, “Clarice” y “Crawford”.Dado que es una novela, está llena de personajes, por lo que las palabras más mencionadas suelen ser sus nombres, apellidos o algún tipo de apodo
library(ggplot2)
library(forcats)
grafico1 <- cuento3_frecuencias %>%
top_n(10) %>%
ggplot() + aes(x = fct_reorder(Token, n),
y = n, fill = Token) +
geom_col() +
labs(x = NULL, y = "Frecuencia",
title = "Top 10 de palabras mas utilizadas en la novela") +
theme_bw() +
theme(legend.position = "none") +
coord_flip()
grafico1
Una nube de palabras generada con wordcloud2 en R sirve para visualizar de manera gráfica las palabras más frecuentes en un conjunto de texto. En una nube de palabras, las palabras más frecuentes se muestran en tamaños más grandes, mientras que las menos frecuentes se representan con tamaños más pequeños. Esto permite identificar rápidamente las palabras clave o más relevantes de un texto.
library(wordcloud2)
set.seed(123)
wordcloud(words= cuento3_frecuencias$Token,
freq = cuento3_frecuencias$n,
max.words = 500,
random.order = FALSE,
min.freq = 1,# por lo menos 1 vez
colors=brewer.pal(8, "Accent"))
Una gráfica de análisis de sentimientos sirve para visualizar y entender las emociones, opiniones o actitudes predominantes en un conjunto de textos (como comentarios, reseñas, encuestas o publicaciones en redes sociales). A través del análisis de sentimientos, se clasifican los textos en categorías como positivos, negativos o neutrales, y las gráficas permiten mostrar estos resultados de manera visual.
library(readr)
# 1. Lectura de diccionario nrc en castellano
sentimientos <- read.delim("C:/Users/user/Desktop/PC3 MATERIAL/sentimientos_2.txt", fileEncoding = "latin1")
#Lectura a tibble
sentimientos <- as.tibble(sentimientos)
sentimientos <- sentimientos %>% filter(!row_number() %in% c(1:1))
sentimientos <- distinct(sentimientos)#quedate con los que sean distintos
# sentimientos <- sentimientos[!duplicated(sentimientos), ]
#library(ggplot2)
sentimientos %>%
group_by(sentimiento) %>%
count() %>%
arrange(desc(n)) %>% # Ordena por la frecuencia de mayor a menor
head(10) %>% # Muestra solo los primeros 10 sentimientos más frecuentes
ggplot() +
aes(x = fct_reorder(sentimiento, n), # Reordenar los sentimientos por frecuencia
y = n, # Frecuencia
fill = sentimiento) + # Color por sentimiento
geom_col(show.legend = FALSE) + # Columna sin leyenda
theme_bw() + scale_fill_brewer(palette = 'Set3') + # Tema blanco y negro
labs(title = "Top 10 sentimientos más frecuentes en la obra El silencion de los Inocentes", # Título
x = "Sentimiento", # Etiqueta del eje X
y = "Frecuencia") + # Etiqueta del eje Y
coord_flip()