El siguiente documento difiere del código semilla visto en clase. Al ser una gran cantidad de información y a pesar de intentar en 3 diferentes computadoras de miembros del equipo, el código no logró correr en ninguna de las computadoras. Para la elaboración de este código se tomaron en cuenta los conceptos vistos en clase (procesamiento de datos no estructurados, text mining, análisis de sentimiento y visualizaciones como el wordcloud).
Se mantuvieron la mayoría de las librerías originales. EL principal cambio de enfoque debido al reto de la capacidad de procesamiento de las computadoras con las que estabamos trabajando fue: tabular la información en dos columnas (pagina y texto), permitiendo al código por chunks un poco más naturales que todo el texto de una. Se eliminaron los stopwords por medio de un antijoin y se filtraron los caracteres sueltos como parte del preprocesamiento de los datos junto a la tokenización. Finalmente, las visualizaciones son similares a las vistas en clase.
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.2.0 ✔ readr 2.1.6
## ✔ forcats 1.0.1 ✔ stringr 1.6.0
## ✔ ggplot2 4.0.2 ✔ tibble 3.3.1
## ✔ lubridate 1.9.5 ✔ tidyr 1.3.2
## ✔ purrr 1.2.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(pdftools)
## Using poppler version 25.10.0
library(tidytext)
library(syuzhet)
library(wordcloud)
## Cargando paquete requerido: RColorBrewer
library(RColorBrewer)
library(tm)
## Cargando paquete requerido: NLP
##
## Adjuntando el paquete: 'NLP'
##
## The following object is masked from 'package:ggplot2':
##
## annotate
pdf_text_raw <- pdf_text("C:/Users/qs_di/Documents/Proyecto R/CONCENTRACION/movie_reviews.csv_compressed (1).pdf")
df_pages <- tibble(
page = seq_along(pdf_text_raw),
text = pdf_text_raw
)
data(stop_words)
tokens <- df_pages %>%
unnest_tokens(word, text) %>%
filter(str_detect(word, "^[a-z]+$")) %>%
anti_join(stop_words, by = "word")
texto <- df_pages$text
emociones <- get_nrc_sentiment(texto, language = "english")
# Emociones principales
emociones_resumen <- colSums(emociones[,1:8])
barplot(
emociones_resumen,
col = brewer.pal(8, "Set2"),
main = "Distribución de Emociones (NRC)",
las = 2
)
word_freq <- tokens %>%
count(word, sort = TRUE)
set.seed(123)
wordcloud(
words = word_freq$word,
freq = word_freq$n,
min.freq = 20,
max.words = 150,
random.order = FALSE,
colors = brewer.pal(8, "Dark2")
)