library(tidyverse)
## Warning: package 'tibble' was built under R version 4.5.3
## Warning: package 'readr' was built under R version 4.5.3
## Warning: package 'purrr' was built under R version 4.5.3
## Warning: package 'dplyr' was built under R version 4.5.3
## Warning: package 'stringr' was built under R version 4.5.3
## Warning: package 'lubridate' was built under R version 4.5.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## āœ” dplyr     1.2.0     āœ” readr     2.2.0
## āœ” forcats   1.0.0     āœ” stringr   1.6.0
## āœ” ggplot2   3.5.2     āœ” tibble    3.3.1
## āœ” lubridate 1.9.5     āœ” tidyr     1.3.1
## āœ” 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(rvest)
## Warning: package 'rvest' was built under R version 4.5.3
## 
## Adjuntando el paquete: 'rvest'
## 
## The following object is masked from 'package:readr':
## 
##     guess_encoding
library(tidytext)
## Warning: package 'tidytext' was built under R version 4.5.3
library(stringr)
library(pdftools)
## Warning: package 'pdftools' was built under R version 4.5.3
## Using poppler version 26.01.0
library(readr)
getwd()
## [1] "C:/Users/rmall/Desktop/MAGA/base de datos r"
list.files()
##  [1] "avance-empĆ­rico.html"                 
##  [2] "avance-empĆ­rico.Rmd"                  
##  [3] "avance empĆ­rico.Rmd"                  
##  [4] "base de datos r.Rproj"                
##  [5] "corpus_maga_final.csv"                
##  [6] "corpus_maga_final_ampliado.csv"       
##  [7] "corpus_maga_final_con_obama.csv"      
##  [8] "corpus_trump_2015_2016.csv"           
##  [9] "correlaciones_importantes_trump.csv"  
## [10] "docs_trump_2015_2016_raw.csv"         
## [11] "gop.pdf"                              
## [12] "matriz_categorias_con_obama.csv"      
## [13] "resultados_categorias_con_obama.csv"  
## [14] "resultados_categorias_periodo.csv"    
## [15] "resultados_frases_clave.csv"          
## [16] "resultados_frases_clave_con_obama.csv"
## [17] "rsconnect"                            
## [18] "tabla_categorias_normalizadas.csv"
gop_paginas <- pdf_text("gop.pdf")

gop_texto <- paste(gop_paginas, collapse = "\n")

gop_texto <- str_replace_all(gop_texto, "\\s+", " ")

str_sub(gop_texto, 1, 500)
## [1] " Growth & Opportunity Project Growth & Opportunity Project 1 Growth & Opportunity Project Table of contents 1 Introduction 43 Friends and Allies (Third Party Groups) 1. Competitive Primaries 2. TV Spending Growth and Opportunity Project 3. Technology: Organize or Lose 2 By The Numbers 4. \aSilence Is Not Always Golden; Public Sharing of Information Is Good Messaging 5. Polling 3 1. \aSome People Say, ā€œRepublicans Don’t Careā€ 6. \aDivision of Labor and the Need for RNC Leadership 2. America Looks Di"
corpus_maga <- tibble(
  id = "gop_2013",
  periodo = "2008-2015",
  actor = "Republican National Committee",
  tipo_fuente = "documento_partidario",
  titulo = "Growth and Opportunity Project",
  texto = gop_texto
)

View(corpus_maga)
library(tidyverse)
library(rvest)
library(stringr)

base_url <- "https://www.presidency.ucsb.edu/advanced-search?field-keywords=&field-keywords2=&field-keywords3=&from%5Bdate%5D=01-01-2015&to%5Bdate%5D=01-01-2017&person2=200301&items_per_page=100"

# 1012 resultados / 100 por pagina = aprox. 11 paginas
paginas_busqueda <- paste0(base_url, "&page=", 0:10)

extraer_links <- function(url_pagina) {
  
  pagina <- read_html(url_pagina)
  
  nodos <- pagina %>%
    html_elements("a[href^='/documents/']")
  
  tibble(
    titulo_busqueda = html_text2(nodos),
    href = html_attr(nodos, "href")
  ) %>%
    filter(!is.na(href)) %>%
    mutate(
      url = paste0("https://www.presidency.ucsb.edu", href)
    ) %>%
    distinct(url, .keep_all = TRUE)
}

links_trump <- map_dfr(
  paginas_busqueda,
  extraer_links,
  .id = "pagina_resultados"
) %>%
  mutate(pagina_resultados = as.integer(pagina_resultados) - 1) %>%
  distinct(url, .keep_all = TRUE)

View(links_trump)

nrow(links_trump)
## [1] 1014
links_trump_limpios <- links_trump %>%
  filter(!str_detect(titulo_busqueda, "Guidebook|Category Attributes"))

View(links_trump_limpios)

nrow(links_trump_limpios)
## [1] 1012
leer_documento_app <- function(url_doc) {
  Sys.sleep(0.3)
  
  tryCatch({
    pagina <- read_html(url_doc)
    
    titulo_doc <- pagina %>%
      html_element("h1") %>%
      html_text2()
    
    texto_doc <- pagina %>%
      html_elements(".field-docs-content p") %>%
      html_text2()
    
    if (length(texto_doc) == 0) {
      texto_doc <- pagina %>%
        html_elements("p") %>%
        html_text2()
    }
    
    texto_doc <- paste(texto_doc, collapse = " ") %>%
      str_squish()
    
    tibble(
      url = url_doc,
      titulo_doc = titulo_doc,
      texto = texto_doc,
      error = NA_character_
    )
    
  }, error = function(e) {
    tibble(
      url = url_doc,
      titulo_doc = NA_character_,
      texto = NA_character_,
      error = as.character(e$message)
    )
  })
}
prueba_trump <- map_dfr(
  links_trump_limpios$url[1:5],
  leer_documento_app
)

View(prueba_trump)

prueba_trump %>%
  select(titulo_doc, texto) %>%
  head()
## # A tibble: 5 Ɨ 2
##   titulo_doc                                                               texto
##   <chr>                                                                    <chr>
## 1 "Tweets of June 15, 2015"                                                "Abo…
## 2 "Tweets of June 16, 2015"                                                "Abo…
## 3 "Trump Campaign Press Release - Donald Trump: Obama Is A Horrible Negot… "The…
## 4 "Trump Campaign Press Release - Trump on Hillary: I Was Watching Her Ta… "The…
## 5 "Trump Campaign Press Release - Donald J. Trump Declares Candidacy for … "(Ne…
docs_trump <- map_dfr(seq_along(links_trump_limpios$url), function(i) {
  message("Descargando documento ", i, " de ", length(links_trump_limpios$url))
  leer_documento_app(links_trump_limpios$url[i])
})
## Descargando documento 1 de 1012
## Descargando documento 2 de 1012
## Descargando documento 3 de 1012
## Descargando documento 4 de 1012
## Descargando documento 5 de 1012
## Descargando documento 6 de 1012
## Descargando documento 7 de 1012
## Descargando documento 8 de 1012
## Descargando documento 9 de 1012
## Descargando documento 10 de 1012
## Descargando documento 11 de 1012
## Descargando documento 12 de 1012
## Descargando documento 13 de 1012
## Descargando documento 14 de 1012
## Descargando documento 15 de 1012
## Descargando documento 16 de 1012
## Descargando documento 17 de 1012
## Descargando documento 18 de 1012
## Descargando documento 19 de 1012
## Descargando documento 20 de 1012
## Descargando documento 21 de 1012
## Descargando documento 22 de 1012
## Descargando documento 23 de 1012
## Descargando documento 24 de 1012
## Descargando documento 25 de 1012
## Descargando documento 26 de 1012
## Descargando documento 27 de 1012
## Descargando documento 28 de 1012
## Descargando documento 29 de 1012
## Descargando documento 30 de 1012
## Descargando documento 31 de 1012
## Descargando documento 32 de 1012
## Descargando documento 33 de 1012
## Descargando documento 34 de 1012
## Descargando documento 35 de 1012
## Descargando documento 36 de 1012
## Descargando documento 37 de 1012
## Descargando documento 38 de 1012
## Descargando documento 39 de 1012
## Descargando documento 40 de 1012
## Descargando documento 41 de 1012
## Descargando documento 42 de 1012
## Descargando documento 43 de 1012
## Descargando documento 44 de 1012
## Descargando documento 45 de 1012
## Descargando documento 46 de 1012
## Descargando documento 47 de 1012
## Descargando documento 48 de 1012
## Descargando documento 49 de 1012
## Descargando documento 50 de 1012
## Descargando documento 51 de 1012
## Descargando documento 52 de 1012
## Descargando documento 53 de 1012
## Descargando documento 54 de 1012
## Descargando documento 55 de 1012
## Descargando documento 56 de 1012
## Descargando documento 57 de 1012
## Descargando documento 58 de 1012
## Descargando documento 59 de 1012
## Descargando documento 60 de 1012
## Descargando documento 61 de 1012
## Descargando documento 62 de 1012
## Descargando documento 63 de 1012
## Descargando documento 64 de 1012
## Descargando documento 65 de 1012
## Descargando documento 66 de 1012
## Descargando documento 67 de 1012
## Descargando documento 68 de 1012
## Descargando documento 69 de 1012
## Descargando documento 70 de 1012
## Descargando documento 71 de 1012
## Descargando documento 72 de 1012
## Descargando documento 73 de 1012
## Descargando documento 74 de 1012
## Descargando documento 75 de 1012
## Descargando documento 76 de 1012
## Descargando documento 77 de 1012
## Descargando documento 78 de 1012
## Descargando documento 79 de 1012
## Descargando documento 80 de 1012
## Descargando documento 81 de 1012
## Descargando documento 82 de 1012
## Descargando documento 83 de 1012
## Descargando documento 84 de 1012
## Descargando documento 85 de 1012
## Descargando documento 86 de 1012
## Descargando documento 87 de 1012
## Descargando documento 88 de 1012
## Descargando documento 89 de 1012
## Descargando documento 90 de 1012
## Descargando documento 91 de 1012
## Descargando documento 92 de 1012
## Descargando documento 93 de 1012
## Descargando documento 94 de 1012
## Descargando documento 95 de 1012
## Descargando documento 96 de 1012
## Descargando documento 97 de 1012
## Descargando documento 98 de 1012
## Descargando documento 99 de 1012
## Descargando documento 100 de 1012
## Descargando documento 101 de 1012
## Descargando documento 102 de 1012
## Descargando documento 103 de 1012
## Descargando documento 104 de 1012
## Descargando documento 105 de 1012
## Descargando documento 106 de 1012
## Descargando documento 107 de 1012
## Descargando documento 108 de 1012
## Descargando documento 109 de 1012
## Descargando documento 110 de 1012
## Descargando documento 111 de 1012
## Descargando documento 112 de 1012
## Descargando documento 113 de 1012
## Descargando documento 114 de 1012
## Descargando documento 115 de 1012
## Descargando documento 116 de 1012
## Descargando documento 117 de 1012
## Descargando documento 118 de 1012
## Descargando documento 119 de 1012
## Descargando documento 120 de 1012
## Descargando documento 121 de 1012
## Descargando documento 122 de 1012
## Descargando documento 123 de 1012
## Descargando documento 124 de 1012
## Descargando documento 125 de 1012
## Descargando documento 126 de 1012
## Descargando documento 127 de 1012
## Descargando documento 128 de 1012
## Descargando documento 129 de 1012
## Descargando documento 130 de 1012
## Descargando documento 131 de 1012
## Descargando documento 132 de 1012
## Descargando documento 133 de 1012
## Descargando documento 134 de 1012
## Descargando documento 135 de 1012
## Descargando documento 136 de 1012
## Descargando documento 137 de 1012
## Descargando documento 138 de 1012
## Descargando documento 139 de 1012
## Descargando documento 140 de 1012
## Descargando documento 141 de 1012
## Descargando documento 142 de 1012
## Descargando documento 143 de 1012
## Descargando documento 144 de 1012
## Descargando documento 145 de 1012
## Descargando documento 146 de 1012
## Descargando documento 147 de 1012
## Descargando documento 148 de 1012
## Descargando documento 149 de 1012
## Descargando documento 150 de 1012
## Descargando documento 151 de 1012
## Descargando documento 152 de 1012
## Descargando documento 153 de 1012
## Descargando documento 154 de 1012
## Descargando documento 155 de 1012
## Descargando documento 156 de 1012
## Descargando documento 157 de 1012
## Descargando documento 158 de 1012
## Descargando documento 159 de 1012
## Descargando documento 160 de 1012
## Descargando documento 161 de 1012
## Descargando documento 162 de 1012
## Descargando documento 163 de 1012
## Descargando documento 164 de 1012
## Descargando documento 165 de 1012
## Descargando documento 166 de 1012
## Descargando documento 167 de 1012
## Descargando documento 168 de 1012
## Descargando documento 169 de 1012
## Descargando documento 170 de 1012
## Descargando documento 171 de 1012
## Descargando documento 172 de 1012
## Descargando documento 173 de 1012
## Descargando documento 174 de 1012
## Descargando documento 175 de 1012
## Descargando documento 176 de 1012
## Descargando documento 177 de 1012
## Descargando documento 178 de 1012
## Descargando documento 179 de 1012
## Descargando documento 180 de 1012
## Descargando documento 181 de 1012
## Descargando documento 182 de 1012
## Descargando documento 183 de 1012
## Descargando documento 184 de 1012
## Descargando documento 185 de 1012
## Descargando documento 186 de 1012
## Descargando documento 187 de 1012
## Descargando documento 188 de 1012
## Descargando documento 189 de 1012
## Descargando documento 190 de 1012
## Descargando documento 191 de 1012
## Descargando documento 192 de 1012
## Descargando documento 193 de 1012
## Descargando documento 194 de 1012
## Descargando documento 195 de 1012
## Descargando documento 196 de 1012
## Descargando documento 197 de 1012
## Descargando documento 198 de 1012
## Descargando documento 199 de 1012
## Descargando documento 200 de 1012
## Descargando documento 201 de 1012
## Descargando documento 202 de 1012
## Descargando documento 203 de 1012
## Descargando documento 204 de 1012
## Descargando documento 205 de 1012
## Descargando documento 206 de 1012
## Descargando documento 207 de 1012
## Descargando documento 208 de 1012
## Descargando documento 209 de 1012
## Descargando documento 210 de 1012
## Descargando documento 211 de 1012
## Descargando documento 212 de 1012
## Descargando documento 213 de 1012
## Descargando documento 214 de 1012
## Descargando documento 215 de 1012
## Descargando documento 216 de 1012
## Descargando documento 217 de 1012
## Descargando documento 218 de 1012
## Descargando documento 219 de 1012
## Descargando documento 220 de 1012
## Descargando documento 221 de 1012
## Descargando documento 222 de 1012
## Descargando documento 223 de 1012
## Descargando documento 224 de 1012
## Descargando documento 225 de 1012
## Descargando documento 226 de 1012
## Descargando documento 227 de 1012
## Descargando documento 228 de 1012
## Descargando documento 229 de 1012
## Descargando documento 230 de 1012
## Descargando documento 231 de 1012
## Descargando documento 232 de 1012
## Descargando documento 233 de 1012
## Descargando documento 234 de 1012
## Descargando documento 235 de 1012
## Descargando documento 236 de 1012
## Descargando documento 237 de 1012
## Descargando documento 238 de 1012
## Descargando documento 239 de 1012
## Descargando documento 240 de 1012
## Descargando documento 241 de 1012
## Descargando documento 242 de 1012
## Descargando documento 243 de 1012
## Descargando documento 244 de 1012
## Descargando documento 245 de 1012
## Descargando documento 246 de 1012
## Descargando documento 247 de 1012
## Descargando documento 248 de 1012
## Descargando documento 249 de 1012
## Descargando documento 250 de 1012
## Descargando documento 251 de 1012
## Descargando documento 252 de 1012
## Descargando documento 253 de 1012
## Descargando documento 254 de 1012
## Descargando documento 255 de 1012
## Descargando documento 256 de 1012
## Descargando documento 257 de 1012
## Descargando documento 258 de 1012
## Descargando documento 259 de 1012
## Descargando documento 260 de 1012
## Descargando documento 261 de 1012
## Descargando documento 262 de 1012
## Descargando documento 263 de 1012
## Descargando documento 264 de 1012
## Descargando documento 265 de 1012
## Descargando documento 266 de 1012
## Descargando documento 267 de 1012
## Descargando documento 268 de 1012
## Descargando documento 269 de 1012
## Descargando documento 270 de 1012
## Descargando documento 271 de 1012
## Descargando documento 272 de 1012
## Descargando documento 273 de 1012
## Descargando documento 274 de 1012
## Descargando documento 275 de 1012
## Descargando documento 276 de 1012
## Descargando documento 277 de 1012
## Descargando documento 278 de 1012
## Descargando documento 279 de 1012
## Descargando documento 280 de 1012
## Descargando documento 281 de 1012
## Descargando documento 282 de 1012
## Descargando documento 283 de 1012
## Descargando documento 284 de 1012
## Descargando documento 285 de 1012
## Descargando documento 286 de 1012
## Descargando documento 287 de 1012
## Descargando documento 288 de 1012
## Descargando documento 289 de 1012
## Descargando documento 290 de 1012
## Descargando documento 291 de 1012
## Descargando documento 292 de 1012
## Descargando documento 293 de 1012
## Descargando documento 294 de 1012
## Descargando documento 295 de 1012
## Descargando documento 296 de 1012
## Descargando documento 297 de 1012
## Descargando documento 298 de 1012
## Descargando documento 299 de 1012
## Descargando documento 300 de 1012
## Descargando documento 301 de 1012
## Descargando documento 302 de 1012
## Descargando documento 303 de 1012
## Descargando documento 304 de 1012
## Descargando documento 305 de 1012
## Descargando documento 306 de 1012
## Descargando documento 307 de 1012
## Descargando documento 308 de 1012
## Descargando documento 309 de 1012
## Descargando documento 310 de 1012
## Descargando documento 311 de 1012
## Descargando documento 312 de 1012
## Descargando documento 313 de 1012
## Descargando documento 314 de 1012
## Descargando documento 315 de 1012
## Descargando documento 316 de 1012
## Descargando documento 317 de 1012
## Descargando documento 318 de 1012
## Descargando documento 319 de 1012
## Descargando documento 320 de 1012
## Descargando documento 321 de 1012
## Descargando documento 322 de 1012
## Descargando documento 323 de 1012
## Descargando documento 324 de 1012
## Descargando documento 325 de 1012
## Descargando documento 326 de 1012
## Descargando documento 327 de 1012
## Descargando documento 328 de 1012
## Descargando documento 329 de 1012
## Descargando documento 330 de 1012
## Descargando documento 331 de 1012
## Descargando documento 332 de 1012
## Descargando documento 333 de 1012
## Descargando documento 334 de 1012
## Descargando documento 335 de 1012
## Descargando documento 336 de 1012
## Descargando documento 337 de 1012
## Descargando documento 338 de 1012
## Descargando documento 339 de 1012
## Descargando documento 340 de 1012
## Descargando documento 341 de 1012
## Descargando documento 342 de 1012
## Descargando documento 343 de 1012
## Descargando documento 344 de 1012
## Descargando documento 345 de 1012
## Descargando documento 346 de 1012
## Descargando documento 347 de 1012
## Descargando documento 348 de 1012
## Descargando documento 349 de 1012
## Descargando documento 350 de 1012
## Descargando documento 351 de 1012
## Descargando documento 352 de 1012
## Descargando documento 353 de 1012
## Descargando documento 354 de 1012
## Descargando documento 355 de 1012
## Descargando documento 356 de 1012
## Descargando documento 357 de 1012
## Descargando documento 358 de 1012
## Descargando documento 359 de 1012
## Descargando documento 360 de 1012
## Descargando documento 361 de 1012
## Descargando documento 362 de 1012
## Descargando documento 363 de 1012
## Descargando documento 364 de 1012
## Descargando documento 365 de 1012
## Descargando documento 366 de 1012
## Descargando documento 367 de 1012
## Descargando documento 368 de 1012
## Descargando documento 369 de 1012
## Descargando documento 370 de 1012
## Descargando documento 371 de 1012
## Descargando documento 372 de 1012
## Descargando documento 373 de 1012
## Descargando documento 374 de 1012
## Descargando documento 375 de 1012
## Descargando documento 376 de 1012
## Descargando documento 377 de 1012
## Descargando documento 378 de 1012
## Descargando documento 379 de 1012
## Descargando documento 380 de 1012
## Descargando documento 381 de 1012
## Descargando documento 382 de 1012
## Descargando documento 383 de 1012
## Descargando documento 384 de 1012
## Descargando documento 385 de 1012
## Descargando documento 386 de 1012
## Descargando documento 387 de 1012
## Descargando documento 388 de 1012
## Descargando documento 389 de 1012
## Descargando documento 390 de 1012
## Descargando documento 391 de 1012
## Descargando documento 392 de 1012
## Descargando documento 393 de 1012
## Descargando documento 394 de 1012
## Descargando documento 395 de 1012
## Descargando documento 396 de 1012
## Descargando documento 397 de 1012
## Descargando documento 398 de 1012
## Descargando documento 399 de 1012
## Descargando documento 400 de 1012
## Descargando documento 401 de 1012
## Descargando documento 402 de 1012
## Descargando documento 403 de 1012
## Descargando documento 404 de 1012
## Descargando documento 405 de 1012
## Descargando documento 406 de 1012
## Descargando documento 407 de 1012
## Descargando documento 408 de 1012
## Descargando documento 409 de 1012
## Descargando documento 410 de 1012
## Descargando documento 411 de 1012
## Descargando documento 412 de 1012
## Descargando documento 413 de 1012
## Descargando documento 414 de 1012
## Descargando documento 415 de 1012
## Descargando documento 416 de 1012
## Descargando documento 417 de 1012
## Descargando documento 418 de 1012
## Descargando documento 419 de 1012
## Descargando documento 420 de 1012
## Descargando documento 421 de 1012
## Descargando documento 422 de 1012
## Descargando documento 423 de 1012
## Descargando documento 424 de 1012
## Descargando documento 425 de 1012
## Descargando documento 426 de 1012
## Descargando documento 427 de 1012
## Descargando documento 428 de 1012
## Descargando documento 429 de 1012
## Descargando documento 430 de 1012
## Descargando documento 431 de 1012
## Descargando documento 432 de 1012
## Descargando documento 433 de 1012
## Descargando documento 434 de 1012
## Descargando documento 435 de 1012
## Descargando documento 436 de 1012
## Descargando documento 437 de 1012
## Descargando documento 438 de 1012
## Descargando documento 439 de 1012
## Descargando documento 440 de 1012
## Descargando documento 441 de 1012
## Descargando documento 442 de 1012
## Descargando documento 443 de 1012
## Descargando documento 444 de 1012
## Descargando documento 445 de 1012
## Descargando documento 446 de 1012
## Descargando documento 447 de 1012
## Descargando documento 448 de 1012
## Descargando documento 449 de 1012
## Descargando documento 450 de 1012
## Descargando documento 451 de 1012
## Descargando documento 452 de 1012
## Descargando documento 453 de 1012
## Descargando documento 454 de 1012
## Descargando documento 455 de 1012
## Descargando documento 456 de 1012
## Descargando documento 457 de 1012
## Descargando documento 458 de 1012
## Descargando documento 459 de 1012
## Descargando documento 460 de 1012
## Descargando documento 461 de 1012
## Descargando documento 462 de 1012
## Descargando documento 463 de 1012
## Descargando documento 464 de 1012
## Descargando documento 465 de 1012
## Descargando documento 466 de 1012
## Descargando documento 467 de 1012
## Descargando documento 468 de 1012
## Descargando documento 469 de 1012
## Descargando documento 470 de 1012
## Descargando documento 471 de 1012
## Descargando documento 472 de 1012
## Descargando documento 473 de 1012
## Descargando documento 474 de 1012
## Descargando documento 475 de 1012
## Descargando documento 476 de 1012
## Descargando documento 477 de 1012
## Descargando documento 478 de 1012
## Descargando documento 479 de 1012
## Descargando documento 480 de 1012
## Descargando documento 481 de 1012
## Descargando documento 482 de 1012
## Descargando documento 483 de 1012
## Descargando documento 484 de 1012
## Descargando documento 485 de 1012
## Descargando documento 486 de 1012
## Descargando documento 487 de 1012
## Descargando documento 488 de 1012
## Descargando documento 489 de 1012
## Descargando documento 490 de 1012
## Descargando documento 491 de 1012
## Descargando documento 492 de 1012
## Descargando documento 493 de 1012
## Descargando documento 494 de 1012
## Descargando documento 495 de 1012
## Descargando documento 496 de 1012
## Descargando documento 497 de 1012
## Descargando documento 498 de 1012
## Descargando documento 499 de 1012
## Descargando documento 500 de 1012
## Descargando documento 501 de 1012
## Descargando documento 502 de 1012
## Descargando documento 503 de 1012
## Descargando documento 504 de 1012
## Descargando documento 505 de 1012
## Descargando documento 506 de 1012
## Descargando documento 507 de 1012
## Descargando documento 508 de 1012
## Descargando documento 509 de 1012
## Descargando documento 510 de 1012
## Descargando documento 511 de 1012
## Descargando documento 512 de 1012
## Descargando documento 513 de 1012
## Descargando documento 514 de 1012
## Descargando documento 515 de 1012
## Descargando documento 516 de 1012
## Descargando documento 517 de 1012
## Descargando documento 518 de 1012
## Descargando documento 519 de 1012
## Descargando documento 520 de 1012
## Descargando documento 521 de 1012
## Descargando documento 522 de 1012
## Descargando documento 523 de 1012
## Descargando documento 524 de 1012
## Descargando documento 525 de 1012
## Descargando documento 526 de 1012
## Descargando documento 527 de 1012
## Descargando documento 528 de 1012
## Descargando documento 529 de 1012
## Descargando documento 530 de 1012
## Descargando documento 531 de 1012
## Descargando documento 532 de 1012
## Descargando documento 533 de 1012
## Descargando documento 534 de 1012
## Descargando documento 535 de 1012
## Descargando documento 536 de 1012
## Descargando documento 537 de 1012
## Descargando documento 538 de 1012
## Descargando documento 539 de 1012
## Descargando documento 540 de 1012
## Descargando documento 541 de 1012
## Descargando documento 542 de 1012
## Descargando documento 543 de 1012
## Descargando documento 544 de 1012
## Descargando documento 545 de 1012
## Descargando documento 546 de 1012
## Descargando documento 547 de 1012
## Descargando documento 548 de 1012
## Descargando documento 549 de 1012
## Descargando documento 550 de 1012
## Descargando documento 551 de 1012
## Descargando documento 552 de 1012
## Descargando documento 553 de 1012
## Descargando documento 554 de 1012
## Descargando documento 555 de 1012
## Descargando documento 556 de 1012
## Descargando documento 557 de 1012
## Descargando documento 558 de 1012
## Descargando documento 559 de 1012
## Descargando documento 560 de 1012
## Descargando documento 561 de 1012
## Descargando documento 562 de 1012
## Descargando documento 563 de 1012
## Descargando documento 564 de 1012
## Descargando documento 565 de 1012
## Descargando documento 566 de 1012
## Descargando documento 567 de 1012
## Descargando documento 568 de 1012
## Descargando documento 569 de 1012
## Descargando documento 570 de 1012
## Descargando documento 571 de 1012
## Descargando documento 572 de 1012
## Descargando documento 573 de 1012
## Descargando documento 574 de 1012
## Descargando documento 575 de 1012
## Descargando documento 576 de 1012
## Descargando documento 577 de 1012
## Descargando documento 578 de 1012
## Descargando documento 579 de 1012
## Descargando documento 580 de 1012
## Descargando documento 581 de 1012
## Descargando documento 582 de 1012
## Descargando documento 583 de 1012
## Descargando documento 584 de 1012
## Descargando documento 585 de 1012
## Descargando documento 586 de 1012
## Descargando documento 587 de 1012
## Descargando documento 588 de 1012
## Descargando documento 589 de 1012
## Descargando documento 590 de 1012
## Descargando documento 591 de 1012
## Descargando documento 592 de 1012
## Descargando documento 593 de 1012
## Descargando documento 594 de 1012
## Descargando documento 595 de 1012
## Descargando documento 596 de 1012
## Descargando documento 597 de 1012
## Descargando documento 598 de 1012
## Descargando documento 599 de 1012
## Descargando documento 600 de 1012
## Descargando documento 601 de 1012
## Descargando documento 602 de 1012
## Descargando documento 603 de 1012
## Descargando documento 604 de 1012
## Descargando documento 605 de 1012
## Descargando documento 606 de 1012
## Descargando documento 607 de 1012
## Descargando documento 608 de 1012
## Descargando documento 609 de 1012
## Descargando documento 610 de 1012
## Descargando documento 611 de 1012
## Descargando documento 612 de 1012
## Descargando documento 613 de 1012
## Descargando documento 614 de 1012
## Descargando documento 615 de 1012
## Descargando documento 616 de 1012
## Descargando documento 617 de 1012
## Descargando documento 618 de 1012
## Descargando documento 619 de 1012
## Descargando documento 620 de 1012
## Descargando documento 621 de 1012
## Descargando documento 622 de 1012
## Descargando documento 623 de 1012
## Descargando documento 624 de 1012
## Descargando documento 625 de 1012
## Descargando documento 626 de 1012
## Descargando documento 627 de 1012
## Descargando documento 628 de 1012
## Descargando documento 629 de 1012
## Descargando documento 630 de 1012
## Descargando documento 631 de 1012
## Descargando documento 632 de 1012
## Descargando documento 633 de 1012
## Descargando documento 634 de 1012
## Descargando documento 635 de 1012
## Descargando documento 636 de 1012
## Descargando documento 637 de 1012
## Descargando documento 638 de 1012
## Descargando documento 639 de 1012
## Descargando documento 640 de 1012
## Descargando documento 641 de 1012
## Descargando documento 642 de 1012
## Descargando documento 643 de 1012
## Descargando documento 644 de 1012
## Descargando documento 645 de 1012
## Descargando documento 646 de 1012
## Descargando documento 647 de 1012
## Descargando documento 648 de 1012
## Descargando documento 649 de 1012
## Descargando documento 650 de 1012
## Descargando documento 651 de 1012
## Descargando documento 652 de 1012
## Descargando documento 653 de 1012
## Descargando documento 654 de 1012
## Descargando documento 655 de 1012
## Descargando documento 656 de 1012
## Descargando documento 657 de 1012
## Descargando documento 658 de 1012
## Descargando documento 659 de 1012
## Descargando documento 660 de 1012
## Descargando documento 661 de 1012
## Descargando documento 662 de 1012
## Descargando documento 663 de 1012
## Descargando documento 664 de 1012
## Descargando documento 665 de 1012
## Descargando documento 666 de 1012
## Descargando documento 667 de 1012
## Descargando documento 668 de 1012
## Descargando documento 669 de 1012
## Descargando documento 670 de 1012
## Descargando documento 671 de 1012
## Descargando documento 672 de 1012
## Descargando documento 673 de 1012
## Descargando documento 674 de 1012
## Descargando documento 675 de 1012
## Descargando documento 676 de 1012
## Descargando documento 677 de 1012
## Descargando documento 678 de 1012
## Descargando documento 679 de 1012
## Descargando documento 680 de 1012
## Descargando documento 681 de 1012
## Descargando documento 682 de 1012
## Descargando documento 683 de 1012
## Descargando documento 684 de 1012
## Descargando documento 685 de 1012
## Descargando documento 686 de 1012
## Descargando documento 687 de 1012
## Descargando documento 688 de 1012
## Descargando documento 689 de 1012
## Descargando documento 690 de 1012
## Descargando documento 691 de 1012
## Descargando documento 692 de 1012
## Descargando documento 693 de 1012
## Descargando documento 694 de 1012
## Descargando documento 695 de 1012
## Descargando documento 696 de 1012
## Descargando documento 697 de 1012
## Descargando documento 698 de 1012
## Descargando documento 699 de 1012
## Descargando documento 700 de 1012
## Descargando documento 701 de 1012
## Descargando documento 702 de 1012
## Descargando documento 703 de 1012
## Descargando documento 704 de 1012
## Descargando documento 705 de 1012
## Descargando documento 706 de 1012
## Descargando documento 707 de 1012
## Descargando documento 708 de 1012
## Descargando documento 709 de 1012
## Descargando documento 710 de 1012
## Descargando documento 711 de 1012
## Descargando documento 712 de 1012
## Descargando documento 713 de 1012
## Descargando documento 714 de 1012
## Descargando documento 715 de 1012
## Descargando documento 716 de 1012
## Descargando documento 717 de 1012
## Descargando documento 718 de 1012
## Descargando documento 719 de 1012
## Descargando documento 720 de 1012
## Descargando documento 721 de 1012
## Descargando documento 722 de 1012
## Descargando documento 723 de 1012
## Descargando documento 724 de 1012
## Descargando documento 725 de 1012
## Descargando documento 726 de 1012
## Descargando documento 727 de 1012
## Descargando documento 728 de 1012
## Descargando documento 729 de 1012
## Descargando documento 730 de 1012
## Descargando documento 731 de 1012
## Descargando documento 732 de 1012
## Descargando documento 733 de 1012
## Descargando documento 734 de 1012
## Descargando documento 735 de 1012
## Descargando documento 736 de 1012
## Descargando documento 737 de 1012
## Descargando documento 738 de 1012
## Descargando documento 739 de 1012
## Descargando documento 740 de 1012
## Descargando documento 741 de 1012
## Descargando documento 742 de 1012
## Descargando documento 743 de 1012
## Descargando documento 744 de 1012
## Descargando documento 745 de 1012
## Descargando documento 746 de 1012
## Descargando documento 747 de 1012
## Descargando documento 748 de 1012
## Descargando documento 749 de 1012
## Descargando documento 750 de 1012
## Descargando documento 751 de 1012
## Descargando documento 752 de 1012
## Descargando documento 753 de 1012
## Descargando documento 754 de 1012
## Descargando documento 755 de 1012
## Descargando documento 756 de 1012
## Descargando documento 757 de 1012
## Descargando documento 758 de 1012
## Descargando documento 759 de 1012
## Descargando documento 760 de 1012
## Descargando documento 761 de 1012
## Descargando documento 762 de 1012
## Descargando documento 763 de 1012
## Descargando documento 764 de 1012
## Descargando documento 765 de 1012
## Descargando documento 766 de 1012
## Descargando documento 767 de 1012
## Descargando documento 768 de 1012
## Descargando documento 769 de 1012
## Descargando documento 770 de 1012
## Descargando documento 771 de 1012
## Descargando documento 772 de 1012
## Descargando documento 773 de 1012
## Descargando documento 774 de 1012
## Descargando documento 775 de 1012
## Descargando documento 776 de 1012
## Descargando documento 777 de 1012
## Descargando documento 778 de 1012
## Descargando documento 779 de 1012
## Descargando documento 780 de 1012
## Descargando documento 781 de 1012
## Descargando documento 782 de 1012
## Descargando documento 783 de 1012
## Descargando documento 784 de 1012
## Descargando documento 785 de 1012
## Descargando documento 786 de 1012
## Descargando documento 787 de 1012
## Descargando documento 788 de 1012
## Descargando documento 789 de 1012
## Descargando documento 790 de 1012
## Descargando documento 791 de 1012
## Descargando documento 792 de 1012
## Descargando documento 793 de 1012
## Descargando documento 794 de 1012
## Descargando documento 795 de 1012
## Descargando documento 796 de 1012
## Descargando documento 797 de 1012
## Descargando documento 798 de 1012
## Descargando documento 799 de 1012
## Descargando documento 800 de 1012
## Descargando documento 801 de 1012
## Descargando documento 802 de 1012
## Descargando documento 803 de 1012
## Descargando documento 804 de 1012
## Descargando documento 805 de 1012
## Descargando documento 806 de 1012
## Descargando documento 807 de 1012
## Descargando documento 808 de 1012
## Descargando documento 809 de 1012
## Descargando documento 810 de 1012
## Descargando documento 811 de 1012
## Descargando documento 812 de 1012
## Descargando documento 813 de 1012
## Descargando documento 814 de 1012
## Descargando documento 815 de 1012
## Descargando documento 816 de 1012
## Descargando documento 817 de 1012
## Descargando documento 818 de 1012
## Descargando documento 819 de 1012
## Descargando documento 820 de 1012
## Descargando documento 821 de 1012
## Descargando documento 822 de 1012
## Descargando documento 823 de 1012
## Descargando documento 824 de 1012
## Descargando documento 825 de 1012
## Descargando documento 826 de 1012
## Descargando documento 827 de 1012
## Descargando documento 828 de 1012
## Descargando documento 829 de 1012
## Descargando documento 830 de 1012
## Descargando documento 831 de 1012
## Descargando documento 832 de 1012
## Descargando documento 833 de 1012
## Descargando documento 834 de 1012
## Descargando documento 835 de 1012
## Descargando documento 836 de 1012
## Descargando documento 837 de 1012
## Descargando documento 838 de 1012
## Descargando documento 839 de 1012
## Descargando documento 840 de 1012
## Descargando documento 841 de 1012
## Descargando documento 842 de 1012
## Descargando documento 843 de 1012
## Descargando documento 844 de 1012
## Descargando documento 845 de 1012
## Descargando documento 846 de 1012
## Descargando documento 847 de 1012
## Descargando documento 848 de 1012
## Descargando documento 849 de 1012
## Descargando documento 850 de 1012
## Descargando documento 851 de 1012
## Descargando documento 852 de 1012
## Descargando documento 853 de 1012
## Descargando documento 854 de 1012
## Descargando documento 855 de 1012
## Descargando documento 856 de 1012
## Descargando documento 857 de 1012
## Descargando documento 858 de 1012
## Descargando documento 859 de 1012
## Descargando documento 860 de 1012
## Descargando documento 861 de 1012
## Descargando documento 862 de 1012
## Descargando documento 863 de 1012
## Descargando documento 864 de 1012
## Descargando documento 865 de 1012
## Descargando documento 866 de 1012
## Descargando documento 867 de 1012
## Descargando documento 868 de 1012
## Descargando documento 869 de 1012
## Descargando documento 870 de 1012
## Descargando documento 871 de 1012
## Descargando documento 872 de 1012
## Descargando documento 873 de 1012
## Descargando documento 874 de 1012
## Descargando documento 875 de 1012
## Descargando documento 876 de 1012
## Descargando documento 877 de 1012
## Descargando documento 878 de 1012
## Descargando documento 879 de 1012
## Descargando documento 880 de 1012
## Descargando documento 881 de 1012
## Descargando documento 882 de 1012
## Descargando documento 883 de 1012
## Descargando documento 884 de 1012
## Descargando documento 885 de 1012
## Descargando documento 886 de 1012
## Descargando documento 887 de 1012
## Descargando documento 888 de 1012
## Descargando documento 889 de 1012
## Descargando documento 890 de 1012
## Descargando documento 891 de 1012
## Descargando documento 892 de 1012
## Descargando documento 893 de 1012
## Descargando documento 894 de 1012
## Descargando documento 895 de 1012
## Descargando documento 896 de 1012
## Descargando documento 897 de 1012
## Descargando documento 898 de 1012
## Descargando documento 899 de 1012
## Descargando documento 900 de 1012
## Descargando documento 901 de 1012
## Descargando documento 902 de 1012
## Descargando documento 903 de 1012
## Descargando documento 904 de 1012
## Descargando documento 905 de 1012
## Descargando documento 906 de 1012
## Descargando documento 907 de 1012
## Descargando documento 908 de 1012
## Descargando documento 909 de 1012
## Descargando documento 910 de 1012
## Descargando documento 911 de 1012
## Descargando documento 912 de 1012
## Descargando documento 913 de 1012
## Descargando documento 914 de 1012
## Descargando documento 915 de 1012
## Descargando documento 916 de 1012
## Descargando documento 917 de 1012
## Descargando documento 918 de 1012
## Descargando documento 919 de 1012
## Descargando documento 920 de 1012
## Descargando documento 921 de 1012
## Descargando documento 922 de 1012
## Descargando documento 923 de 1012
## Descargando documento 924 de 1012
## Descargando documento 925 de 1012
## Descargando documento 926 de 1012
## Descargando documento 927 de 1012
## Descargando documento 928 de 1012
## Descargando documento 929 de 1012
## Descargando documento 930 de 1012
## Descargando documento 931 de 1012
## Descargando documento 932 de 1012
## Descargando documento 933 de 1012
## Descargando documento 934 de 1012
## Descargando documento 935 de 1012
## Descargando documento 936 de 1012
## Descargando documento 937 de 1012
## Descargando documento 938 de 1012
## Descargando documento 939 de 1012
## Descargando documento 940 de 1012
## Descargando documento 941 de 1012
## Descargando documento 942 de 1012
## Descargando documento 943 de 1012
## Descargando documento 944 de 1012
## Descargando documento 945 de 1012
## Descargando documento 946 de 1012
## Descargando documento 947 de 1012
## Descargando documento 948 de 1012
## Descargando documento 949 de 1012
## Descargando documento 950 de 1012
## Descargando documento 951 de 1012
## Descargando documento 952 de 1012
## Descargando documento 953 de 1012
## Descargando documento 954 de 1012
## Descargando documento 955 de 1012
## Descargando documento 956 de 1012
## Descargando documento 957 de 1012
## Descargando documento 958 de 1012
## Descargando documento 959 de 1012
## Descargando documento 960 de 1012
## Descargando documento 961 de 1012
## Descargando documento 962 de 1012
## Descargando documento 963 de 1012
## Descargando documento 964 de 1012
## Descargando documento 965 de 1012
## Descargando documento 966 de 1012
## Descargando documento 967 de 1012
## Descargando documento 968 de 1012
## Descargando documento 969 de 1012
## Descargando documento 970 de 1012
## Descargando documento 971 de 1012
## Descargando documento 972 de 1012
## Descargando documento 973 de 1012
## Descargando documento 974 de 1012
## Descargando documento 975 de 1012
## Descargando documento 976 de 1012
## Descargando documento 977 de 1012
## Descargando documento 978 de 1012
## Descargando documento 979 de 1012
## Descargando documento 980 de 1012
## Descargando documento 981 de 1012
## Descargando documento 982 de 1012
## Descargando documento 983 de 1012
## Descargando documento 984 de 1012
## Descargando documento 985 de 1012
## Descargando documento 986 de 1012
## Descargando documento 987 de 1012
## Descargando documento 988 de 1012
## Descargando documento 989 de 1012
## Descargando documento 990 de 1012
## Descargando documento 991 de 1012
## Descargando documento 992 de 1012
## Descargando documento 993 de 1012
## Descargando documento 994 de 1012
## Descargando documento 995 de 1012
## Descargando documento 996 de 1012
## Descargando documento 997 de 1012
## Descargando documento 998 de 1012
## Descargando documento 999 de 1012
## Descargando documento 1000 de 1012
## Descargando documento 1001 de 1012
## Descargando documento 1002 de 1012
## Descargando documento 1003 de 1012
## Descargando documento 1004 de 1012
## Descargando documento 1005 de 1012
## Descargando documento 1006 de 1012
## Descargando documento 1007 de 1012
## Descargando documento 1008 de 1012
## Descargando documento 1009 de 1012
## Descargando documento 1010 de 1012
## Descargando documento 1011 de 1012
## Descargando documento 1012 de 1012
View(docs_trump)

write_csv(docs_trump, "docs_trump_2015_2016_raw.csv") 
corpus_trump <- docs_trump %>%
  left_join(
    links_trump_limpios %>% select(url, titulo_busqueda, pagina_resultados),
    by = "url"
  ) %>%
  mutate(
    id = paste0("trump_", row_number()),
    periodo = "2015-2016",
    actor = "Donald Trump",
    tipo_fuente = "American Presidency Project",
    titulo = if_else(
      is.na(titulo_doc) | titulo_doc == "",
      titulo_busqueda,
      titulo_doc
    )
  ) %>%
  select(id, periodo, actor, tipo_fuente, titulo, texto, url, error)

View(corpus_trump)

write_csv(corpus_trump, "corpus_trump_2015_2016.csv")
corpus_gop <- tibble(
  id = "gop_2013",
  periodo = "2008-2015",
  actor = "Republican National Committee",
  tipo_fuente = "documento_partidario",
  titulo = "Growth and Opportunity Project",
  texto = gop_texto,
  url = "gop.pdf",
  error = NA_character_
)

corpus_maga <- bind_rows(corpus_gop, corpus_trump)

View(corpus_maga)

write_csv(corpus_maga, "corpus_maga_final.csv")
corpus_maga %>%
  count(periodo, actor)
## # A tibble: 2 Ɨ 3
##   periodo   actor                             n
##   <chr>     <chr>                         <int>
## 1 2008-2015 Republican National Committee     1
## 2 2015-2016 Donald Trump                   1012
urls_previas <- tribble(
  ~id, ~periodo, ~actor, ~tipo_fuente, ~url,
  
  "mccain_2008_aceptacion",
  "2008-2015",
  "John McCain",
  "discurso_convencion",
  "https://www.presidency.ucsb.edu/documents/address-accepting-the-presidential-nomination-the-republican-national-convention-saint",
  
  "romney_2012_aceptacion",
  "2008-2015",
  "Mitt Romney",
  "discurso_convencion",
  "https://www.presidency.ucsb.edu/documents/address-accepting-the-presidential-nomination-the-republican-national-convention-tampa",
  
  "gop_platform_2008",
  "2008-2015",
  "Republican Party",
  "plataforma_partidaria",
  "https://www.presidency.ucsb.edu/documents/2008-republican-party-platform",
  
  "gop_platform_2012",
  "2008-2015",
  "Republican Party",
  "plataforma_partidaria",
  "https://www.presidency.ucsb.edu/documents/2012-republican-party-platform"
)
leer_documento_app <- function(url_doc) {
  Sys.sleep(0.3)
  
  tryCatch({
    pagina <- read_html(url_doc)
    
    titulo_doc <- pagina %>%
      html_element("h1") %>%
      html_text2()
    
    texto_doc <- pagina %>%
      html_elements(".field-docs-content p") %>%
      html_text2()
    
    if (length(texto_doc) == 0) {
      texto_doc <- pagina %>%
        html_elements("p") %>%
        html_text2()
    }
    
    texto_doc <- paste(texto_doc, collapse = " ") %>%
      str_squish()
    
    tibble(
      url = url_doc,
      titulo_doc = titulo_doc,
      texto = texto_doc,
      error = NA_character_
    )
    
  }, error = function(e) {
    tibble(
      url = url_doc,
      titulo_doc = NA_character_,
      texto = NA_character_,
      error = as.character(e$message)
    )
  })
}
urls_previas <- tribble(
  ~id, ~periodo, ~actor, ~tipo_fuente, ~url,
  
  "mccain_2008_aceptacion",
  "2008-2015",
  "John McCain",
  "discurso_convencion",
  "https://www.presidency.ucsb.edu/documents/address-accepting-the-presidential-nomination-the-republican-national-convention-saint",
  
  "romney_2012_aceptacion",
  "2008-2015",
  "Mitt Romney",
  "discurso_convencion",
  "https://www.presidency.ucsb.edu/documents/address-accepting-the-presidential-nomination-the-republican-national-convention-tampa",
  
  "gop_platform_2008",
  "2008-2015",
  "Republican Party",
  "plataforma_partidaria",
  "https://www.presidency.ucsb.edu/documents/2008-republican-party-platform",
  
  "gop_platform_2012",
  "2008-2015",
  "Republican Party",
  "plataforma_partidaria",
  "https://www.presidency.ucsb.edu/documents/2012-republican-party-platform"
)
docs_previos <- map_dfr(
  urls_previas$url,
  leer_documento_app
)

corpus_previos <- urls_previas %>%
  left_join(docs_previos, by = "url") %>%
  mutate(
    titulo = if_else(
      is.na(titulo_doc) | titulo_doc == "",
      id,
      titulo_doc
    )
  ) %>%
  select(id, periodo, actor, tipo_fuente, titulo, texto, url, error)

View(corpus_previos)
corpus_previos %>%
  mutate(cantidad_caracteres = str_length(texto)) %>%
  select(id, actor, titulo, cantidad_caracteres, error)
## # A tibble: 4 Ɨ 5
##   id                     actor            titulo       cantidad_caracteres error
##   <chr>                  <chr>            <chr>                      <int> <chr>
## 1 mccain_2008_aceptacion John McCain      Address Acc…               25296 <NA> 
## 2 romney_2012_aceptacion Mitt Romney      Address Acc…               22519 <NA> 
## 3 gop_platform_2008      Republican Party 2008 Republ…              153265 <NA> 
## 4 gop_platform_2012      Republican Party 2012 Republ…              199648 <NA>
corpus_maga <- corpus_maga %>%
  filter(!id %in% corpus_previos$id) %>%
  bind_rows(corpus_previos)

corpus_maga %>%
  count(periodo, actor)
## # A tibble: 5 Ɨ 3
##   periodo   actor                             n
##   <chr>     <chr>                         <int>
## 1 2008-2015 John McCain                       1
## 2 2008-2015 Mitt Romney                       1
## 3 2008-2015 Republican National Committee     1
## 4 2008-2015 Republican Party                  2
## 5 2015-2016 Donald Trump                   1012
write_csv(corpus_maga, "corpus_maga_final_ampliado.csv")
corpus_maga <- corpus_maga %>%
  filter(!id %in% corpus_previos$id) %>%
  bind_rows(corpus_previos)
data("stop_words")

stop_extra <- tibble(
  word = c(
    "donald", "trump", "republican", "republicans", "party",
    "campaign", "press", "release", "president", "presidential",
    "said", "says", "today", "mr", "watch", "download", "pdf",
    "fox", "news", "cnn", "abc", "nbc", "cbs"
  )
)

tokens <- corpus_maga %>%
  mutate(texto = str_to_lower(texto)) %>%
  unnest_tokens(word, texto) %>%
  anti_join(stop_words, by = "word") %>%
  anti_join(stop_extra, by = "word") %>%
  filter(!str_detect(word, "^[0-9]+$")) %>%
  filter(str_length(word) > 2)

tokens %>%
  count(periodo, word, sort = TRUE) %>%
  group_by(periodo) %>%
  slice_max(n, n = 20)
## # A tibble: 40 Ɨ 3
## # Groups:   periodo [2]
##    periodo   word           n
##    <chr>     <chr>      <int>
##  1 2008-2015 rnc          395
##  2 2008-2015 american     262
##  3 2008-2015 federal      248
##  4 2008-2015 government   243
##  5 2008-2015 support      235
##  6 2008-2015 parties      234
##  7 2008-2015 people       224
##  8 2008-2015 americans    196
##  9 2008-2015 national     194
## 10 2008-2015 data         193
## # ℹ 30 more rows
diccionario <- tribble(
  ~categoria, ~word,
  
  "moderacion_institucional", "inclusive",
  "moderacion_institucional", "welcoming",
  "moderacion_institucional", "diversity",
  "moderacion_institucional", "minorities",
  "moderacion_institucional", "hispanic",
  "moderacion_institucional", "latino",
  "moderacion_institucional", "outreach",
  "moderacion_institucional", "respect",
  "moderacion_institucional", "opportunity",
  "moderacion_institucional", "tolerance",
  "moderacion_institucional", "inclusion",
  
  "decadencia_nacional", "weak",
  "decadencia_nacional", "lost",
  "decadencia_nacional", "disaster",
  "decadencia_nacional", "broken",
  "decadencia_nacional", "failing",
  "decadencia_nacional", "decline",
  "decadencia_nacional", "crisis",
  "decadencia_nacional", "problem",
  "decadencia_nacional", "threat",
  
  "restauracion_nacional", "great",
  "restauracion_nacional", "again",
  "restauracion_nacional", "restore",
  "restauracion_nacional", "rebuild",
  "restauracion_nacional", "back",
  "restauracion_nacional", "win",
  "restauracion_nacional", "winning",
  "restauracion_nacional", "strong",
  "restauracion_nacional", "strength",
  
  "amenaza_migratoria", "immigration",
  "amenaza_migratoria", "immigrants",
  "amenaza_migratoria", "illegal",
  "amenaza_migratoria", "border",
  "amenaza_migratoria", "wall",
  "amenaza_migratoria", "mexico",
  "amenaza_migratoria", "mexican",
  "amenaza_migratoria", "criminals",
  "amenaza_migratoria", "drugs",
  "amenaza_migratoria", "crime",
  "amenaza_migratoria", "deport",
  
  "pueblo_vs_elite", "people",
  "pueblo_vs_elite", "politicians",
  "pueblo_vs_elite", "washington",
  "pueblo_vs_elite", "establishment",
  "pueblo_vs_elite", "elite",
  "pueblo_vs_elite", "elites",
  "pueblo_vs_elite", "media",
  "pueblo_vs_elite", "donors",
  "pueblo_vs_elite", "corrupt",
  "pueblo_vs_elite", "lobbyists",
  
  "descontento_economico", "jobs",
  "descontento_economico", "workers",
  "descontento_economico", "trade",
  "descontento_economico", "china",
  "descontento_economico", "factories",
  "descontento_economico", "economy",
  "descontento_economico", "wages",
  "descontento_economico", "manufacturing"
)
conteo_categorias <- tokens %>%
  inner_join(diccionario, by = "word") %>%
  count(periodo, categoria, sort = TRUE)

total_palabras <- tokens %>%
  count(periodo, name = "total_palabras")

conteo_normalizado <- conteo_categorias %>%
  left_join(total_palabras, by = "periodo") %>%
  mutate(frecuencia_por_1000 = n / total_palabras * 1000)

conteo_normalizado
## # A tibble: 12 Ɨ 5
##    periodo   categoria                    n total_palabras frecuencia_por_1000
##    <chr>     <chr>                    <int>          <int>               <dbl>
##  1 2015-2016 pueblo_vs_elite           2812         158805               17.7 
##  2 2015-2016 descontento_economico     2625         158805               16.5 
##  3 2015-2016 amenaza_migratoria        1685         158805               10.6 
##  4 2015-2016 restauracion_nacional      866         158805                5.45
##  5 2015-2016 decadencia_nacional        550         158805                3.46
##  6 2008-2015 pueblo_vs_elite            445          47360                9.40
##  7 2008-2015 moderacion_institucional   402          47360                8.49
##  8 2015-2016 moderacion_institucional   342         158805                2.15
##  9 2008-2015 descontento_economico      298          47360                6.29
## 10 2008-2015 amenaza_migratoria         137          47360                2.89
## 11 2008-2015 restauracion_nacional      133          47360                2.81
## 12 2008-2015 decadencia_nacional         74          47360                1.56
ggplot(conteo_normalizado, aes(x = categoria, y = frecuencia_por_1000, fill = periodo)) +
  geom_col(position = "dodge") +
  coord_flip() +
  labs(
    title = "Comparación de categorías discursivas por periodo",
    subtitle = "Frecuencia por cada 1000 palabras",
    x = "CategorĆ­a",
    y = "Frecuencia por 1000 palabras"
  )

frases_clave <- corpus_maga %>%
  mutate(
    texto_min = str_to_lower(texto),
    make_america_great_again = str_count(texto_min, "make america great again"),
    maga = str_count(texto_min, "\\bmaga\\b"),
    america_first = str_count(texto_min, "america first"),
    build_the_wall = str_count(texto_min, "build the wall")
  ) %>%
  group_by(periodo) %>%
  summarise(
    make_america_great_again = sum(make_america_great_again, na.rm = TRUE),
    maga = sum(maga, na.rm = TRUE),
    america_first = sum(america_first, na.rm = TRUE),
    build_the_wall = sum(build_the_wall, na.rm = TRUE)
  )

frases_clave
## # A tibble: 2 Ɨ 5
##   periodo   make_america_great_again  maga america_first build_the_wall
##   <chr>                        <int> <int>         <int>          <int>
## 1 2008-2015                        0     0             0              0
## 2 2015-2016                      202     0            98             13
write_csv(conteo_normalizado, "resultados_categorias_periodo.csv")
write_csv(frases_clave, "resultados_frases_clave.csv")
conteo_normalizado %>%
  arrange(categoria, periodo)
## # A tibble: 12 Ɨ 5
##    periodo   categoria                    n total_palabras frecuencia_por_1000
##    <chr>     <chr>                    <int>          <int>               <dbl>
##  1 2008-2015 amenaza_migratoria         137          47360                2.89
##  2 2015-2016 amenaza_migratoria        1685         158805               10.6 
##  3 2008-2015 decadencia_nacional         74          47360                1.56
##  4 2015-2016 decadencia_nacional        550         158805                3.46
##  5 2008-2015 descontento_economico      298          47360                6.29
##  6 2015-2016 descontento_economico     2625         158805               16.5 
##  7 2008-2015 moderacion_institucional   402          47360                8.49
##  8 2015-2016 moderacion_institucional   342         158805                2.15
##  9 2008-2015 pueblo_vs_elite            445          47360                9.40
## 10 2015-2016 pueblo_vs_elite           2812         158805               17.7 
## 11 2008-2015 restauracion_nacional      133          47360                2.81
## 12 2015-2016 restauracion_nacional      866         158805                5.45
write_csv(conteo_normalizado, "tabla_categorias_normalizadas.csv")
frases_clave <- corpus_maga %>%
  mutate(
    texto_min = str_to_lower(texto),
    make_america_great_again = str_count(texto_min, "make america great again"),
    maga = str_count(texto_min, "\\bmaga\\b"),
    america_first = str_count(texto_min, "america first"),
    build_the_wall = str_count(texto_min, "build the wall")
  ) %>%
  group_by(periodo) %>%
  summarise(
    make_america_great_again = sum(make_america_great_again, na.rm = TRUE),
    maga = sum(maga, na.rm = TRUE),
    america_first = sum(america_first, na.rm = TRUE),
    build_the_wall = sum(build_the_wall, na.rm = TRUE)
  )

frases_clave
## # A tibble: 2 Ɨ 5
##   periodo   make_america_great_again  maga america_first build_the_wall
##   <chr>                        <int> <int>         <int>          <int>
## 1 2008-2015                        0     0             0              0
## 2 2015-2016                      202     0            98             13
corpus_maga %>%
  filter(periodo == "2015-2016") %>%
  filter(str_detect(str_to_lower(texto), "immigration|border|wall|mexico|illegal")) %>%
  select(titulo, texto) %>%
  head(10)
## # A tibble: 10 Ɨ 2
##    titulo                                                                  texto
##    <chr>                                                                   <chr>
##  1 Trump Campaign Press Release - Donald Trump: I Would Build a Great, Gr… "The…
##  2 Remarks Announcing Candidacy for President in New York City             "Tru…
##  3 Trump Campaign Press Release - Donald Trump Speaks at Manchester Rally  "WMU…
##  4 Trump Campaign Press Release - Trump on Mexico Comments: 'I Can't Apol… "Bre…
##  5 Trump Campaign Press Release - O'Reilly: Obama Admin 'Complicit' in Mu… "Fox…
##  6 Trump Campaign Press Release - Coulter: Trump 'Speaking for Working Cl… "Bre…
##  7 Trump Campaign Press Release - Trump Discusses Business and Politics w… "Fox…
##  8 Trump Campaign Press Release - Arizona Event - July 11, 2015 - Locatio… "Dow…
##  9 Statement by Donald J. Trump in Response to Hillary Clinton             "Dow…
## 10 Trump Campaign Press Release - The Silent Majority Has Awakened!        "Hav…
corpus_maga %>%
  filter(periodo == "2008-2015") %>%
  filter(str_detect(str_to_lower(texto), "inclusive|welcoming|hispanic|minorities|outreach|respect")) %>%
  select(actor, titulo, texto)
## # A tibble: 5 Ɨ 3
##   actor                         titulo                                     texto
##   <chr>                         <chr>                                      <chr>
## 1 Republican National Committee Growth and Opportunity Project             " Gr…
## 2 John McCain                   Address Accepting the Presidential Nomina… "Tha…
## 3 Mitt Romney                   Address Accepting the Presidential Nomina… "Mr.…
## 4 Republican Party              2008 Republican Party Platform             "Thi…
## 5 Republican Party              2012 Republican Party Platform             "Thi…
conteo_doc_categoria <- tokens %>%
  inner_join(diccionario, by = "word") %>%
  count(periodo, id, actor, titulo, categoria, name = "n_categoria")

total_doc <- tokens %>%
  count(periodo, id, actor, titulo, name = "total_palabras_doc")

dispersion_categorias <- conteo_doc_categoria %>%
  left_join(total_doc, by = c("periodo", "id", "actor", "titulo")) %>%
  mutate(frecuencia_por_1000 = n_categoria / total_palabras_doc * 1000)

dispersion_categorias
## # A tibble: 1,076 Ɨ 8
##    periodo   id            actor titulo categoria n_categoria total_palabras_doc
##    <chr>     <chr>         <chr> <chr>  <chr>           <int>              <int>
##  1 2008-2015 gop_2013      Repu… Growt… amenaza_…          18              17493
##  2 2008-2015 gop_2013      Repu… Growt… decadenc…          12              17493
##  3 2008-2015 gop_2013      Repu… Growt… desconte…          13              17493
##  4 2008-2015 gop_2013      Repu… Growt… moderaci…         303              17493
##  5 2008-2015 gop_2013      Repu… Growt… pueblo_v…         240              17493
##  6 2008-2015 gop_2013      Repu… Growt… restaura…          62              17493
##  7 2008-2015 gop_platform… Repu… 2008 … amenaza_…          63              11715
##  8 2008-2015 gop_platform… Repu… 2008 … decadenc…          15              11715
##  9 2008-2015 gop_platform… Repu… 2008 … desconte…          96              11715
## 10 2008-2015 gop_platform… Repu… 2008 … moderaci…          43              11715
## # ℹ 1,066 more rows
## # ℹ 1 more variable: frecuencia_por_1000 <dbl>
ggplot(dispersion_categorias, aes(x = periodo, y = frecuencia_por_1000)) +
  geom_boxplot() +
  facet_wrap(~categoria, scales = "free_y") +
  labs(
    title = "Dispersión de categorías discursivas por documento",
    subtitle = "Frecuencia por cada 1000 palabras",
    x = "Periodo",
    y = "Frecuencia por 1000 palabras"
  )

frases_clave <- corpus_maga %>%
  mutate(
    texto_min = str_to_lower(texto),
    make_america_great_again = str_count(texto_min, "make america great again"),
    maga = str_count(texto_min, "\\bmaga\\b"),
    america_first = str_count(texto_min, "america first"),
    build_the_wall = str_count(texto_min, "build the wall")
  ) %>%
  group_by(periodo) %>%
  summarise(
    make_america_great_again = sum(make_america_great_again, na.rm = TRUE),
    maga = sum(maga, na.rm = TRUE),
    america_first = sum(america_first, na.rm = TRUE),
    build_the_wall = sum(build_the_wall, na.rm = TRUE)
  )

frases_clave
## # A tibble: 2 Ɨ 5
##   periodo   make_america_great_again  maga america_first build_the_wall
##   <chr>                        <int> <int>         <int>          <int>
## 1 2008-2015                        0     0             0              0
## 2 2015-2016                      202     0            98             13
frases_clave_largo <- frases_clave %>%
  pivot_longer(
    cols = -periodo,
    names_to = "frase",
    values_to = "frecuencia"
  )

ggplot(frases_clave_largo, aes(x = frase, y = frecuencia, fill = periodo)) +
  geom_col(position = "dodge") +
  coord_flip() +
  labs(
    title = "Frecuencia de frases clave asociadas al marco MAGA",
    x = "Frase",
    y = "Frecuencia"
  )

tfidf_periodo <- tokens %>%
  count(periodo, word, sort = TRUE) %>%
  bind_tf_idf(word, periodo, n) %>%
  arrange(desc(tf_idf))

top_tfidf <- tfidf_periodo %>%
  group_by(periodo) %>%
  slice_max(tf_idf, n = 20) %>%
  ungroup()

top_tfidf
## # A tibble: 40 Ɨ 6
##    periodo   word            n       tf   idf   tf_idf
##    <chr>     <chr>       <int>    <dbl> <dbl>    <dbl>
##  1 2008-2015 vendors        40 0.000845 0.693 0.000585
##  2 2008-2015 affirm         34 0.000718 0.693 0.000498
##  3 2008-2015 party’s        29 0.000612 0.693 0.000424
##  4 2008-2015 flexibility    21 0.000443 0.693 0.000307
##  5 2008-2015 apa            20 0.000422 0.693 0.000293
##  6 2008-2015 rslc           19 0.000401 0.693 0.000278
##  7 2008-2015 pension        17 0.000359 0.693 0.000249
##  8 2008-2015 recruitment    14 0.000296 0.693 0.000205
##  9 2008-2015 targeting      14 0.000296 0.693 0.000205
## 10 2008-2015 rnc’s          13 0.000274 0.693 0.000190
## # ℹ 30 more rows
ggplot(top_tfidf, aes(x = reorder(word, tf_idf), y = tf_idf, fill = periodo)) +
  geom_col(show.legend = FALSE) +
  facet_wrap(~periodo, scales = "free") +
  coord_flip() +
  labs(
    title = "Palabras mƔs distintivas por periodo",
    x = "Palabra",
    y = "TF-IDF"
  )

library(tidyverse)
library(tidytext)
library(stringr)

oraciones <- corpus_maga %>%
  unnest_tokens(oracion, texto, token = "sentences") %>%
  mutate(oracion_min = str_to_lower(oracion))

buscar_oraciones <- function(patron, periodo_filtro = NULL) {
  resultado <- oraciones %>%
    filter(str_detect(oracion_min, patron))
  
  if (!is.null(periodo_filtro)) {
    resultado <- resultado %>%
      filter(periodo == periodo_filtro)
  }
  
  resultado %>%
    select(periodo, actor, titulo, oracion) %>%
    head(20)
}
buscar_oraciones("immigration|illegal|border|wall|mexico", "2015-2016")
## # A tibble: 20 Ɨ 4
##    periodo   actor        titulo                                         oracion
##    <chr>     <chr>        <chr>                                          <chr>  
##  1 2015-2016 Donald Trump Trump Campaign Press Release - Donald Trump: … "\"i w…
##  2 2015-2016 Donald Trump Trump Campaign Press Release - Donald Trump: … "and n…
##  3 2015-2016 Donald Trump Trump Campaign Press Release - Donald Trump: … "i wil…
##  4 2015-2016 Donald Trump Remarks Announcing Candidacy for President in… "when …
##  5 2015-2016 Donald Trump Remarks Announcing Candidacy for President in… "when …
##  6 2015-2016 Donald Trump Remarks Announcing Candidacy for President in… "but i…
##  7 2015-2016 Donald Trump Remarks Announcing Candidacy for President in… "it's …
##  8 2015-2016 Donald Trump Remarks Announcing Candidacy for President in… "they …
##  9 2015-2016 Donald Trump Remarks Announcing Candidacy for President in… "i tel…
## 10 2015-2016 Donald Trump Remarks Announcing Candidacy for President in… "and, …
## 11 2015-2016 Donald Trump Remarks Announcing Candidacy for President in… "so me…
## 12 2015-2016 Donald Trump Remarks Announcing Candidacy for President in… "repor…
## 13 2015-2016 Donald Trump Remarks Announcing Candidacy for President in… "they'…
## 14 2015-2016 Donald Trump Remarks Announcing Candidacy for President in… "now, …
## 15 2015-2016 Donald Trump Remarks Announcing Candidacy for President in… "i und…
## 16 2015-2016 Donald Trump Remarks Announcing Candidacy for President in… "every…
## 17 2015-2016 Donald Trump Remarks Announcing Candidacy for President in… "they'…
## 18 2015-2016 Donald Trump Remarks Announcing Candidacy for President in… "presi…
## 19 2015-2016 Donald Trump Remarks Announcing Candidacy for President in… "and b…
## 20 2015-2016 Donald Trump Remarks Announcing Candidacy for President in… "but l…
buscar_oraciones("great again|make america great again|america first", "2015-2016")
## # A tibble: 20 Ɨ 4
##    periodo   actor        titulo                                         oracion
##    <chr>     <chr>        <chr>                                          <chr>  
##  1 2015-2016 Donald Trump "Trump Campaign Press Release - Donald Trump:… "the g…
##  2 2015-2016 Donald Trump "Trump Campaign Press Release - Donald J. Tru… "toget…
##  3 2015-2016 Donald Trump "Trump Campaign Press Release - Donald Trump:… "the d…
##  4 2015-2016 Donald Trump "Remarks Announcing Candidacy for President i… "they …
##  5 2015-2016 Donald Trump "Remarks Announcing Candidacy for President i… "we ne…
##  6 2015-2016 Donald Trump "Remarks Announcing Candidacy for President i… "it's …
##  7 2015-2016 Donald Trump "Remarks Announcing Candidacy for President i… "and y…
##  8 2015-2016 Donald Trump "Remarks Announcing Candidacy for President i… "so la…
##  9 2015-2016 Donald Trump "Remarks Announcing Candidacy for President i… "how a…
## 10 2015-2016 Donald Trump "Remarks Announcing Candidacy for President i… "there…
## 11 2015-2016 Donald Trump "Remarks Announcing Candidacy for President i… "trump…
## 12 2015-2016 Donald Trump "Trump Campaign Press Release - Donald Trump'… "fox n…
## 13 2015-2016 Donald Trump "Trump Campaign Press Release - Donald J. Tru… "toget…
## 14 2015-2016 Donald Trump "Trump Campaign Press Release - Trump Discuss… "\"i w…
## 15 2015-2016 Donald Trump "Trump Campaign Press Release - Trump Discuss… "\"we …
## 16 2015-2016 Donald Trump "Statement by Donald J. Trump on the Iran Agr… "we ha…
## 17 2015-2016 Donald Trump "Trump Campaign Press Release - Donald J. Tru… "now i…
## 18 2015-2016 Donald Trump "Trump Campaign Press Release - Donald J. Tru… "as i …
## 19 2015-2016 Donald Trump "Trump Campaign Press Release - Donald J. Tru… "trump…
## 20 2015-2016 Donald Trump "Trump Campaign Press Release - The Silent Ma… "we wi…
buscar_oraciones("inclusive|welcoming|hispanic|minorities|outreach|respect", "2008-2015")
## # A tibble: 20 Ɨ 4
##    periodo   actor                         titulo                        oracion
##    <chr>     <chr>                         <chr>                         <chr>  
##  1 2008-2015 Republican National Committee Growth and Opportunity Proje… hispan…
##  2 2008-2015 Republican National Committee Growth and Opportunity Proje… we con…
##  3 2008-2015 Republican National Committee Growth and Opportunity Proje… onward…
##  4 2008-2015 Republican National Committee Growth and Opportunity Proje… young …
##  5 2008-2015 Republican National Committee Growth and Opportunity Proje… we hav…
##  6 2008-2015 Republican National Committee Growth and Opportunity Proje… our st…
##  7 2008-2015 Republican National Committee Growth and Opportunity Proje… we nee…
##  8 2008-2015 Republican National Committee Growth and Opportunity Proje… we hav…
##  9 2008-2015 Republican National Committee Growth and Opportunity Proje… we nee…
## 10 2008-2015 Republican National Committee Growth and Opportunity Proje… hispan…
## 11 2008-2015 Republican National Committee Growth and Opportunity Proje… accord…
## 12 2008-2015 Republican National Committee Growth and Opportunity Proje… when h…
## 13 2008-2015 Republican National Committee Growth and Opportunity Proje… becaus…
## 14 2008-2015 Republican National Committee Growth and Opportunity Proje… presid…
## 15 2008-2015 Republican National Committee Growth and Opportunity Proje… 7 grow…
## 16 2008-2015 Republican National Committee Growth and Opportunity Proje… it doe…
## 17 2008-2015 Republican National Committee Growth and Opportunity Proje… in the…
## 18 2008-2015 Republican National Committee Growth and Opportunity Proje… other …
## 19 2008-2015 Republican National Committee Growth and Opportunity Proje… we’ve …
## 20 2008-2015 Republican National Committee Growth and Opportunity Proje… we are…
buscar_oraciones("washington|politicians|establishment|elite|corrupt", "2015-2016")
## # A tibble: 20 Ɨ 4
##    periodo   actor        titulo                                         oracion
##    <chr>     <chr>        <chr>                                          <chr>  
##  1 2015-2016 Donald Trump Trump Campaign Press Release - Donald J. Trum… "trump…
##  2 2015-2016 Donald Trump Remarks Announcing Candidacy for President in… "trump…
##  3 2015-2016 Donald Trump Remarks Announcing Candidacy for President in… "trump…
##  4 2015-2016 Donald Trump Remarks Announcing Candidacy for President in… "how s…
##  5 2015-2016 Donald Trump Remarks Announcing Candidacy for President in… "they …
##  6 2015-2016 Donald Trump Remarks Announcing Candidacy for President in… "if it…
##  7 2015-2016 Donald Trump Remarks Announcing Candidacy for President in… "you k…
##  8 2015-2016 Donald Trump Remarks Announcing Candidacy for President in… "i'm r…
##  9 2015-2016 Donald Trump Remarks Announcing Candidacy for President in… "we ha…
## 10 2015-2016 Donald Trump Remarks Announcing Candidacy for President in… "it's …
## 11 2015-2016 Donald Trump Remarks Announcing Candidacy for President in… "we go…
## 12 2015-2016 Donald Trump Trump Campaign Press Release - Donald Trump S… "he sa…
## 13 2015-2016 Donald Trump Trump Campaign Press Release - Donald J. Trum… "trump…
## 14 2015-2016 Donald Trump Trump Campaign Press Release - Donald J. Trum… "lewan…
## 15 2015-2016 Donald Trump Trump Campaign Press Release - Donald J. Trum… "this …
## 16 2015-2016 Donald Trump Trump Campaign Press Release - Donald Trump's… "when …
## 17 2015-2016 Donald Trump Trump Campaign Press Release - Coulter: Trump… "they …
## 18 2015-2016 Donald Trump Trump Campaign Press Release - Coulter: Trump… "marco…
## 19 2015-2016 Donald Trump Trump Campaign Press Release - USA Today-Suff… "trump…
## 20 2015-2016 Donald Trump Trump Campaign Press Release - The Silent Maj… "many …
oraciones <- corpus_maga %>%
  unnest_tokens(oracion, texto, token = "sentences") %>%
  mutate(oracion_min = str_to_lower(oracion))

buscar_oraciones <- function(patron, periodo_filtro = NULL) {
  resultado <- oraciones %>%
    filter(str_detect(oracion_min, patron))
  
  if (!is.null(periodo_filtro)) {
    resultado <- resultado %>%
      filter(periodo == periodo_filtro)
  }
  
  resultado %>%
    select(periodo, actor, titulo, oracion) %>%
    head(20)
}
categorias_por_doc <- tokens %>%
  inner_join(diccionario, by = "word") %>%
  count(id, periodo, actor, titulo, categoria, name = "n_categoria")

total_por_doc <- tokens %>%
  count(id, periodo, actor, titulo, name = "total_palabras_doc")

categorias_por_doc <- categorias_por_doc %>%
  left_join(total_por_doc, by = c("id", "periodo", "actor", "titulo")) %>%
  mutate(frecuencia_por_1000 = n_categoria / total_palabras_doc * 1000)

categorias_por_doc
## # A tibble: 1,076 Ɨ 8
##    id              periodo actor titulo categoria n_categoria total_palabras_doc
##    <chr>           <chr>   <chr> <chr>  <chr>           <int>              <int>
##  1 gop_2013        2008-2… Repu… Growt… amenaza_…          18              17493
##  2 gop_2013        2008-2… Repu… Growt… decadenc…          12              17493
##  3 gop_2013        2008-2… Repu… Growt… desconte…          13              17493
##  4 gop_2013        2008-2… Repu… Growt… moderaci…         303              17493
##  5 gop_2013        2008-2… Repu… Growt… pueblo_v…         240              17493
##  6 gop_2013        2008-2… Repu… Growt… restaura…          62              17493
##  7 gop_platform_2… 2008-2… Repu… 2008 … amenaza_…          63              11715
##  8 gop_platform_2… 2008-2… Repu… 2008 … decadenc…          15              11715
##  9 gop_platform_2… 2008-2… Repu… 2008 … desconte…          96              11715
## 10 gop_platform_2… 2008-2… Repu… 2008 … moderaci…          43              11715
## # ℹ 1,066 more rows
## # ℹ 1 more variable: frecuencia_por_1000 <dbl>
matriz_categorias <- categorias_por_doc %>%
  select(id, periodo, categoria, frecuencia_por_1000) %>%
  pivot_wider(
    names_from = categoria,
    values_from = frecuencia_por_1000,
    values_fill = 0
  )

View(matriz_categorias)
matriz_trump <- matriz_categorias %>%
  filter(periodo == "2015-2016") %>%
  select(-id, -periodo)

correlacion_trump <- cor(
  matriz_trump,
  method = "spearman",
  use = "pairwise.complete.obs"
)

correlacion_trump
##                          amenaza_migratoria decadencia_nacional
## amenaza_migratoria               1.00000000           0.3792647
## decadencia_nacional              0.37926467           1.0000000
## descontento_economico            0.47096577           0.3881054
## moderacion_institucional         0.13225940           0.1723067
## pueblo_vs_elite                  0.22405102           0.1381223
## restauracion_nacional            0.08063423           0.1822031
##                          descontento_economico moderacion_institucional
## amenaza_migratoria                   0.4709658               0.13225940
## decadencia_nacional                  0.3881054               0.17230673
## descontento_economico                1.0000000               0.25828862
## moderacion_institucional             0.2582886               1.00000000
## pueblo_vs_elite                      0.1250086              -0.06304633
## restauracion_nacional                0.1940046               0.15751235
##                          pueblo_vs_elite restauracion_nacional
## amenaza_migratoria            0.22405102            0.08063423
## decadencia_nacional           0.13812225            0.18220308
## descontento_economico         0.12500856            0.19400465
## moderacion_institucional     -0.06304633            0.15751235
## pueblo_vs_elite               1.00000000            0.04792520
## restauracion_nacional         0.04792520            1.00000000
correlacion_larga <- as.data.frame(correlacion_trump) %>%
  rownames_to_column("categoria_1") %>%
  pivot_longer(
    cols = -categoria_1,
    names_to = "categoria_2",
    values_to = "correlacion"
  )

ggplot(correlacion_larga, aes(x = categoria_1, y = categoria_2, fill = correlacion)) +
  geom_tile() +
  geom_text(aes(label = round(correlacion, 2)), size = 3) +
  labs(
    title = "Correlación entre categorías discursivas en el corpus Trump 2015-2016",
    subtitle = "Correlación de Spearman por documento",
    x = "CategorĆ­a",
    y = "CategorĆ­a",
    fill = "Correlación"
  ) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

correlaciones_importantes <- correlacion_larga %>%
  filter(categoria_1 != categoria_2) %>%
  mutate(
    par = map2_chr(categoria_1, categoria_2, ~ paste(sort(c(.x, .y)), collapse = " + "))
  ) %>%
  distinct(par, .keep_all = TRUE) %>%
  arrange(desc(correlacion))

correlaciones_importantes
## # A tibble: 15 Ɨ 4
##    categoria_1              categoria_2              correlacion par            
##    <chr>                    <chr>                          <dbl> <chr>          
##  1 amenaza_migratoria       descontento_economico         0.471  amenaza_migrat…
##  2 decadencia_nacional      descontento_economico         0.388  decadencia_nac…
##  3 amenaza_migratoria       decadencia_nacional           0.379  amenaza_migrat…
##  4 descontento_economico    moderacion_institucional      0.258  descontento_ec…
##  5 amenaza_migratoria       pueblo_vs_elite               0.224  amenaza_migrat…
##  6 descontento_economico    restauracion_nacional         0.194  descontento_ec…
##  7 decadencia_nacional      restauracion_nacional         0.182  decadencia_nac…
##  8 decadencia_nacional      moderacion_institucional      0.172  decadencia_nac…
##  9 moderacion_institucional restauracion_nacional         0.158  moderacion_ins…
## 10 decadencia_nacional      pueblo_vs_elite               0.138  decadencia_nac…
## 11 amenaza_migratoria       moderacion_institucional      0.132  amenaza_migrat…
## 12 descontento_economico    pueblo_vs_elite               0.125  descontento_ec…
## 13 amenaza_migratoria       restauracion_nacional         0.0806 amenaza_migrat…
## 14 pueblo_vs_elite          restauracion_nacional         0.0479 pueblo_vs_elit…
## 15 moderacion_institucional pueblo_vs_elite              -0.0630 moderacion_ins…
write_csv(correlaciones_importantes, "correlaciones_importantes_trump.csv")
library(tidyverse)
library(rvest)
library(stringr)

base_url_obama <- "https://www.presidency.ucsb.edu/advanced-search?field-keywords=&field-keywords2=&field-keywords3=&from%5Bdate%5D=01-01-2008&to%5Bdate%5D=01-01-2015&person2=200300&category2%5B%5D=8&category2%5B%5D=46&category2%5B%5D=51&category2%5B%5D=45&category2%5B%5D=63&category2%5B%5D=65&category2%5B%5D=49&items_per_page=100"

paginas_obama <- paste0(base_url_obama, "&page=", 0:50)

extraer_links <- function(url_pagina) {
  pagina <- read_html(url_pagina)
  
  nodos <- pagina %>%
    html_elements("a[href^='/documents/']")
  
  tibble(
    titulo_busqueda = html_text2(nodos),
    href = html_attr(nodos, "href")
  ) %>%
    filter(!is.na(href)) %>%
    mutate(
      url = paste0("https://www.presidency.ucsb.edu", href)
    ) %>%
    distinct(url, .keep_all = TRUE)
}

links_obama <- map_dfr(
  paginas_obama,
  extraer_links,
  .id = "pagina_resultados"
) %>%
  mutate(pagina_resultados = as.integer(pagina_resultados) - 1) %>%
  distinct(url, .keep_all = TRUE)

View(links_obama)

nrow(links_obama)
## [1] 3486
links_obama_limpios <- links_obama %>%
  filter(!str_detect(titulo_busqueda, "Guidebook|Category Attributes"))

View(links_obama_limpios)

nrow(links_obama_limpios)
## [1] 3484
exists("links_obama")
## [1] TRUE
links_obama_limpios <- links_obama %>%
  filter(!str_detect(titulo_busqueda, "Guidebook|Category Attributes"))

View(links_obama_limpios)

nrow(links_obama_limpios)
## [1] 3484
links_obama_utiles <- links_obama_limpios %>%
  filter(str_detect(
    str_to_lower(titulo_busqueda),
    "immigration|economy|jobs|american dream|unity|inaugural|state of the union|acceptance|convention"
  ))

View(links_obama_utiles)

nrow(links_obama_utiles)
## [1] 125
links_obama_muestra <- links_obama_utiles %>%
  slice_head(n = 125)

View(links_obama_muestra)
docs_obama <- map_dfr(
  links_obama_muestra$url,
  leer_documento_app
)

corpus_obama <- links_obama_muestra %>%
  left_join(docs_obama, by = "url") %>%
  mutate(
    id = paste0("obama_", row_number()),
    periodo = "2008-2015",
    actor = "Barack Obama",
    tipo_fuente = "American Presidency Project",
    titulo = if_else(
      is.na(titulo_doc) | titulo_doc == "",
      titulo_busqueda,
      titulo_doc
    )
  ) %>%
  select(id, periodo, actor, tipo_fuente, titulo, texto, url, error)

View(corpus_obama)
corpus_obama %>%
  mutate(cantidad_caracteres = str_length(texto)) %>%
  select(id, actor, titulo, cantidad_caracteres, error)
## # A tibble: 125 Ɨ 5
##    id       actor        titulo                        cantidad_caracteres error
##    <chr>    <chr>        <chr>                                       <int> <chr>
##  1 obama_1  Barack Obama "Obama Campaign Press Releas…                3102 <NA> 
##  2 obama_2  Barack Obama "Obama Campaign Press Releas…                3914 <NA> 
##  3 obama_3  Barack Obama "Remarks on the Economy in G…               10398 <NA> 
##  4 obama_4  Barack Obama "Remarks in Washington, DC i…                4510 <NA> 
##  5 obama_5  Barack Obama "Remarks in El Dorado, Kansa…               15263 <NA> 
##  6 obama_6  Barack Obama "Obama Statement On New Jobs…                 973 <NA> 
##  7 obama_7  Barack Obama "Obama Campaign Press Releas…                3804 <NA> 
##  8 obama_8  Barack Obama "Obama Campaign Press Releas…                5006 <NA> 
##  9 obama_9  Barack Obama "Obama Campaign Press Releas…                3028 <NA> 
## 10 obama_10 Barack Obama "Obama Statement on the Stat…                3397 <NA> 
## # ℹ 115 more rows
corpus_maga <- corpus_maga %>%
  filter(!id %in% corpus_obama$id) %>%
  bind_rows(corpus_obama)

corpus_maga %>%
  count(periodo, actor)
## # A tibble: 6 Ɨ 3
##   periodo   actor                             n
##   <chr>     <chr>                         <int>
## 1 2008-2015 Barack Obama                    125
## 2 2008-2015 John McCain                       1
## 3 2008-2015 Mitt Romney                       1
## 4 2008-2015 Republican National Committee     1
## 5 2008-2015 Republican Party                  2
## 6 2015-2016 Donald Trump                   1012
write_csv(corpus_maga, "corpus_maga_final_con_obama.csv")
stop_extra <- tibble(
  word = c(
    "donald", "trump", "barack", "obama",
    "republican", "republicans", "democratic", "democrats", "party",
    "campaign", "press", "release", "president", "presidential",
    "said", "says", "today", "mr", "watch", "download", "pdf",
    "fox", "news", "cnn", "abc", "nbc", "cbs",
    "www", "https", "presidency", "ucsb", "edu"
  )
)

tokens <- corpus_maga %>%
  mutate(texto = str_to_lower(texto)) %>%
  unnest_tokens(word, texto) %>%
  anti_join(tidytext::stop_words, by = "word") %>%
  anti_join(stop_extra, by = "word") %>%
  filter(!str_detect(word, "^[0-9]+$")) %>%
  filter(str_length(word) > 2)
corpus_maga %>%
  count(periodo, actor)
## # A tibble: 6 Ɨ 3
##   periodo   actor                             n
##   <chr>     <chr>                         <int>
## 1 2008-2015 Barack Obama                    125
## 2 2008-2015 John McCain                       1
## 3 2008-2015 Mitt Romney                       1
## 4 2008-2015 Republican National Committee     1
## 5 2008-2015 Republican Party                  2
## 6 2015-2016 Donald Trump                   1012
conteo_categorias <- tokens %>%
  inner_join(diccionario, by = "word") %>%
  count(periodo, categoria, sort = TRUE)

total_palabras <- tokens %>%
  count(periodo, name = "total_palabras")

conteo_normalizado <- conteo_categorias %>%
  left_join(total_palabras, by = "periodo") %>%
  mutate(frecuencia_por_1000 = n / total_palabras * 1000)

conteo_normalizado
## # A tibble: 12 Ɨ 5
##    periodo   categoria                    n total_palabras frecuencia_por_1000
##    <chr>     <chr>                    <int>          <int>               <dbl>
##  1 2015-2016 pueblo_vs_elite           2812         156008               18.0 
##  2 2015-2016 descontento_economico     2625         156008               16.8 
##  3 2008-2015 descontento_economico     2607         154246               16.9 
##  4 2008-2015 pueblo_vs_elite           1820         154246               11.8 
##  5 2015-2016 amenaza_migratoria        1685         156008               10.8 
##  6 2015-2016 restauracion_nacional      866         156008                5.55
##  7 2008-2015 moderacion_institucional   710         154246                4.60
##  8 2008-2015 decadencia_nacional        554         154246                3.59
##  9 2015-2016 decadencia_nacional        550         156008                3.53
## 10 2008-2015 amenaza_migratoria         500         154246                3.24
## 11 2008-2015 restauracion_nacional      453         154246                2.94
## 12 2015-2016 moderacion_institucional   342         156008                2.19
ggplot(conteo_normalizado, aes(x = categoria, y = frecuencia_por_1000, fill = periodo)) +
  geom_col(position = "dodge") +
  coord_flip() +
  labs(
    title = "Comparación de categorías discursivas por periodo",
    subtitle = "Frecuencia por cada 1000 palabras",
    x = "CategorĆ­a",
    y = "Frecuencia por 1000 palabras"
  )

frases_clave <- corpus_maga %>%
  mutate(
    texto_min = str_to_lower(texto),
    make_america_great_again = str_count(texto_min, "make america great again"),
    maga = str_count(texto_min, "\\bmaga\\b"),
    america_first = str_count(texto_min, "america first"),
    build_the_wall = str_count(texto_min, "build the wall")
  ) %>%
  group_by(periodo) %>%
  summarise(
    make_america_great_again = sum(make_america_great_again, na.rm = TRUE),
    maga = sum(maga, na.rm = TRUE),
    america_first = sum(america_first, na.rm = TRUE),
    build_the_wall = sum(build_the_wall, na.rm = TRUE)
  )

frases_clave
## # A tibble: 2 Ɨ 5
##   periodo   make_america_great_again  maga america_first build_the_wall
##   <chr>                        <int> <int>         <int>          <int>
## 1 2008-2015                        0     0             0              0
## 2 2015-2016                      202     0            98             13
categorias_por_doc <- tokens %>%
  inner_join(diccionario, by = "word") %>%
  count(id, periodo, actor, titulo, categoria, name = "n_categoria")

total_por_doc <- tokens %>%
  count(id, periodo, actor, titulo, name = "total_palabras_doc")

categorias_por_doc <- categorias_por_doc %>%
  left_join(total_por_doc, by = c("id", "periodo", "actor", "titulo")) %>%
  mutate(frecuencia_por_1000 = n_categoria / total_palabras_doc * 1000)

matriz_categorias <- categorias_por_doc %>%
  select(id, periodo, actor, titulo, categoria, frecuencia_por_1000) %>%
  pivot_wider(
    names_from = categoria,
    values_from = frecuencia_por_1000,
    values_fill = 0
  )

View(matriz_categorias)
matriz_todo <- matriz_categorias %>%
  select(
    amenaza_migratoria,
    decadencia_nacional,
    descontento_economico,
    moderacion_institucional,
    pueblo_vs_elite,
    restauracion_nacional
  )

correlacion_todo <- cor(
  matriz_todo,
  method = "spearman",
  use = "pairwise.complete.obs"
)

correlacion_todo
##                          amenaza_migratoria decadencia_nacional
## amenaza_migratoria                1.0000000          0.32479425
## decadencia_nacional               0.3247942          1.00000000
## descontento_economico             0.3442818          0.42592788
## moderacion_institucional          0.1158832          0.13220310
## pueblo_vs_elite                   0.2314826          0.08440606
## restauracion_nacional             0.1097421          0.14144818
##                          descontento_economico moderacion_institucional
## amenaza_migratoria                  0.34428177               0.11588320
## decadencia_nacional                 0.42592788               0.13220310
## descontento_economico               1.00000000               0.20489592
## moderacion_institucional            0.20489592               1.00000000
## pueblo_vs_elite                     0.08054657              -0.05583785
## restauracion_nacional               0.16989831               0.12482463
##                          pueblo_vs_elite restauracion_nacional
## amenaza_migratoria            0.23148256            0.10974214
## decadencia_nacional           0.08440606            0.14144818
## descontento_economico         0.08054657            0.16989831
## moderacion_institucional     -0.05583785            0.12482463
## pueblo_vs_elite               1.00000000            0.04171078
## restauracion_nacional         0.04171078            1.00000000
correlacion_todo_larga <- as.data.frame(correlacion_todo) %>%
  rownames_to_column("categoria_1") %>%
  pivot_longer(
    cols = -categoria_1,
    names_to = "categoria_2",
    values_to = "correlacion"
  )

ggplot(correlacion_todo_larga, aes(x = categoria_1, y = categoria_2, fill = correlacion)) +
  geom_tile() +
  geom_text(aes(label = round(correlacion, 2)), size = 3) +
  labs(
    title = "Correlación entre categorías discursivas en el corpus completo",
    subtitle = "Correlación de Spearman por documento",
    x = "CategorĆ­a",
    y = "CategorĆ­a",
    fill = "Correlación"
  ) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

matriz_2008_2015 <- matriz_categorias %>%
  filter(periodo == "2008-2015") %>%
  select(
    amenaza_migratoria,
    decadencia_nacional,
    descontento_economico,
    moderacion_institucional,
    pueblo_vs_elite,
    restauracion_nacional
  )

correlacion_2008_2015 <- cor(
  matriz_2008_2015,
  method = "spearman",
  use = "pairwise.complete.obs"
)

correlacion_2008_2015
##                          amenaza_migratoria decadencia_nacional
## amenaza_migratoria               1.00000000          0.16120630
## decadencia_nacional              0.16120630          1.00000000
## descontento_economico           -0.05617670          0.24654622
## moderacion_institucional         0.05727986         -0.23816798
## pueblo_vs_elite                  0.12858582         -0.12258792
## restauracion_nacional            0.12433784          0.05769597
##                          descontento_economico moderacion_institucional
## amenaza_migratoria                 -0.05617670              0.057279862
## decadencia_nacional                 0.24654622             -0.238167978
## descontento_economico               1.00000000             -0.260982727
## moderacion_institucional           -0.26098273              1.000000000
## pueblo_vs_elite                    -0.05726844              0.086758243
## restauracion_nacional               0.20192392              0.007468898
##                          pueblo_vs_elite restauracion_nacional
## amenaza_migratoria            0.12858582           0.124337840
## decadencia_nacional          -0.12258792           0.057695972
## descontento_economico        -0.05726844           0.201923920
## moderacion_institucional      0.08675824           0.007468898
## pueblo_vs_elite               1.00000000          -0.054201988
## restauracion_nacional        -0.05420199           1.000000000
matriz_trump <- matriz_categorias %>%
  filter(actor == "Donald Trump") %>%
  select(
    amenaza_migratoria,
    decadencia_nacional,
    descontento_economico,
    moderacion_institucional,
    pueblo_vs_elite,
    restauracion_nacional
  )

correlacion_trump <- cor(
  matriz_trump,
  method = "spearman",
  use = "pairwise.complete.obs"
)

correlacion_trump
##                          amenaza_migratoria decadencia_nacional
## amenaza_migratoria               1.00000000           0.3792931
## decadencia_nacional              0.37929306           1.0000000
## descontento_economico            0.47146623           0.3888327
## moderacion_institucional         0.13274801           0.1724684
## pueblo_vs_elite                  0.22428689           0.1388230
## restauracion_nacional            0.08106253           0.1828377
##                          descontento_economico moderacion_institucional
## amenaza_migratoria                   0.4714662               0.13274801
## decadencia_nacional                  0.3888327               0.17246842
## descontento_economico                1.0000000               0.25869508
## moderacion_institucional             0.2586951               1.00000000
## pueblo_vs_elite                      0.1256261              -0.06253457
## restauracion_nacional                0.1943964               0.15818904
##                          pueblo_vs_elite restauracion_nacional
## amenaza_migratoria            0.22428689            0.08106253
## decadencia_nacional           0.13882303            0.18283770
## descontento_economico         0.12562614            0.19439637
## moderacion_institucional     -0.06253457            0.15818904
## pueblo_vs_elite               1.00000000            0.04928479
## restauracion_nacional         0.04928479            1.00000000
datos_regresion <- matriz_categorias %>%
  mutate(
    periodo_trump = if_else(periodo == "2015-2016", 1, 0)
  )

modelo_logit <- glm(
  periodo_trump ~ amenaza_migratoria +
    decadencia_nacional +
    descontento_economico +
    moderacion_institucional +
    pueblo_vs_elite +
    restauracion_nacional,
  data = datos_regresion,
  family = binomial()
)

summary(modelo_logit)
## 
## Call:
## glm(formula = periodo_trump ~ amenaza_migratoria + decadencia_nacional + 
##     descontento_economico + moderacion_institucional + pueblo_vs_elite + 
##     restauracion_nacional, family = binomial(), data = datos_regresion)
## 
## Coefficients:
##                            Estimate Std. Error z value Pr(>|z|)    
## (Intercept)               0.6654269  0.2188933   3.040  0.00237 ** 
## amenaza_migratoria        0.0331911  0.0104708   3.170  0.00153 ** 
## decadencia_nacional      -0.0266543  0.0196929  -1.353  0.17590    
## descontento_economico    -0.0234530  0.0052630  -4.456 8.34e-06 ***
## moderacion_institucional  0.0008132  0.0175414   0.046  0.96303    
## pueblo_vs_elite           0.0190347  0.0084783   2.245  0.02476 *  
## restauracion_nacional     0.0708341  0.0219474   3.227  0.00125 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 551.71  on 471  degrees of freedom
## Residual deviance: 484.01  on 465  degrees of freedom
## AIC: 498.01
## 
## Number of Fisher Scoring iterations: 5
write_csv(conteo_normalizado, "resultados_categorias_con_obama.csv")
write_csv(frases_clave, "resultados_frases_clave_con_obama.csv")
write_csv(matriz_categorias, "matriz_categorias_con_obama.csv")