X09 - Ejercicios

François Rebaudo, IRD francois.rebaudo@ird.fr

Marzo 2019 ; PUCE-Quito-Ecuador http://myrbooksp.netlify.com/

CC BY-NC-ND 3.0

Importar datos

Uso de las palabras

Discursos de Lenín Moreno https://www.presidencia.gob.ec/discursos/

miTexto01 <- readLines("./myData/discurso20190109.txt")
miTexto02 <- readLines("./myData/discurso20190110.txt")
miTexto03 <- readLines("./myData/discurso20190111.txt")
miTexto04 <- readLines("./myData/discurso20190117.txt")

Objetivo: palabras mas frecuentes para cada discurso del Presidente.

Uso de las palabras

  1. Juntar el texto en un solo bloque
miTexto01 <- paste(
  readLines("./myData/discurso20190109.txt"), 
  collapse = " ")
miTexto02 <- paste(
  readLines("./myData/discurso20190110.txt"), 
  collapse = " ")
miTexto03 <- paste(
  readLines("./myData/discurso20190111.txt"), 
  collapse = " ")
miTexto04 <- paste(
  readLines("./myData/discurso20190117.txt"), 
  collapse = " ")

Uso de las palabras

  1. Hacer una funcion para poner el texto en minusculas y sin caracteres especiales

Uso de las palabras

sacarCarEsp <- function(mitexto_IN){
  
  return(mitexto_OUT)
}

Uso de las palabras

1.1. minusculas

sacarCarEsp <- function(mitexto_IN){
  mitexto_OUT <- tolower(mitexto_IN)
  return(mitexto_OUT)
}

Uso de las palabras

1.2. caracteres especiales

sacarCarEsp <- function(mitexto_IN){
  mitexto_OUT <- tolower(mitexto_IN)
  mitexto_OUT <- gsub("á", replacement = "a", mitexto_OUT)
  mitexto_OUT <- gsub("í", replacement = "i", mitexto_OUT)
  mitexto_OUT <- gsub("ñ", replacement = "n", mitexto_OUT)
  mitexto_OUT <- gsub("ó", replacement = "o", mitexto_OUT)
  mitexto_OUT <- gsub("ú", replacement = "u", mitexto_OUT)
  mitexto_OUT <- gsub("é", replacement = "e", mitexto_OUT)
  mitexto_OUT <- gsub("\\—|,|;|:|\\.|\\(|\\)|%|“|”|\\-|[0-9]|¡|!|–", 
    replacement = "", mitexto_OUT)
  return(mitexto_OUT)
}

Uso de las palabras

1.3. aplicar

miTexto01_trans <- sacarCarEsp(mitexto_IN = miTexto01)
miTexto02_trans <- sacarCarEsp(mitexto_IN = miTexto02)
miTexto03_trans <- sacarCarEsp(mitexto_IN = miTexto03)
miTexto04_trans <- sacarCarEsp(mitexto_IN = miTexto04)

Uso de las palabras

  1. Separar palabras y contar caracteres
misPalabras01 <- data.frame(
  palabra = strsplit(miTexto01_trans, split = " ")[[1]], 
  stringsAsFactors = FALSE)
head(misPalabras01)
##          palabra
## 1       seã±ores
## 2    embajadores
## 3              y
## 4    embajadoras
## 5 representantes
## 6             de

Uso de las palabras

  1. Separar palabras y contar caracteres
misPalabras01 <- data.frame(
  palabra = strsplit(miTexto01_trans, split = " ")[[1]], 
  stringsAsFactors = FALSE)
misPalabras01$tamano <- nchar(misPalabras01[, 1])
head(misPalabras01, n = 50)
##            palabra tamano
## 1         seã±ores      8
## 2      embajadores     11
## 3                y      1
## 4      embajadoras     11
## 5   representantes     14
## 6               de      2
## 7            jefes      5
## 8               de      2
## 9           estado      6
## 10               y      1
## 11              de      2
## 12             los      3
## 13      organismos     10
## 14 internacionales     15
## 15             que      3
## 16             nos      3
## 17      acompaã±an     10
## 18         reciban      7
## 19              mi      2
## 20             mãs      3
## 21       afectuoso      9
## 22          saludo      6
## 23         gracias      7
## 24             por      3
## 25         aceptar      7
## 26            esta      4
## 27     invitaciã³n     11
## 28               a      1
## 29              la      2
## 30            casa      4
## 31             del      3
## 32        gobierno      8
## 33               y      1
## 34             del      3
## 35          pueblo      6
## 36     ecuatoriano     11
## 37             que      3
## 38        tambiã©n      8
## 39              es      2
## 40              su      2
## 41            casa      4
## 42                      0
## 43       aprovecho      9
## 44            esta      4
## 45        ocasiã³n      8
## 46            para      4
## 47          desear      6
## 48               a      1
## 49         ustedes      7
## 50               y      1

Uso de las palabras

  1. Separar palabras y contar caracteres
tenerPalabras <- function(miTexto){
  misPalabras <- data.frame(
    palabra = strsplit(miTexto, split = " ")[[1]], 
    stringsAsFactors = FALSE)
  misPalabras$tamano <- nchar(misPalabras[, 1])
  return(misPalabras)
}

Uso de las palabras

  1. Separar palabras y contar caracteres
misPalabras01 <- tenerPalabras(miTexto01_trans)
misPalabras02 <- tenerPalabras(miTexto02_trans)
misPalabras03 <- tenerPalabras(miTexto03_trans)
misPalabras04 <- tenerPalabras(miTexto04_trans)
head(misPalabras04, n = 50)
##          palabra tamano
## 1    muchã­simas     11
## 2        gracias      7
## 3              a      1
## 4        ustedes      7
## 5            por      3
## 6             su      2
## 7      presencia      9
## 8         quiero      6
## 9       decirles      8
## 10           que      3
## 11 absolutamente     13
## 12         todos      5
## 13           son      3
## 14   bienvenidos     11
## 15             a      1
## 16          este      4
## 17        evento      6
## 18           que      3
## 19         tiene      5
## 20         mucho      5
## 21            de      2
## 22   sentimiento     11
## 23         mucho      5
## 24            de      2
## 25   solidaridad     11
## 26            no      2
## 27           hay      3
## 28          nada      4
## 29           que      3
## 30      regocije      8
## 31           mãs      3
## 32            el      2
## 33      corazã³n      8
## 34            de      2
## 35            un      2
## 36     ciudadano      9
## 37           que      3
## 38         poder      5
## 39       atender      7
## 40             a      1
## 41      nuestros      8
## 42    viejecitos     10
## 43             a      1
## 44      nuestros      8
## 45     jubilados      9
## 46             a      1
## 47      nuestros      8
## 48        niã±os      6
## 49         poder      5
## 50       atender      7

Uso de las palabras

  1. Sacar palabras de menos de 4 caracteres
misPalabras01 <- misPalabras01$palabra[misPalabras01$tamano > 3]
misPalabras02 <- misPalabras02$palabra[misPalabras02$tamano > 3]
misPalabras03 <- misPalabras03$palabra[misPalabras03$tamano > 3]
misPalabras04 <- misPalabras04$palabra[misPalabras04$tamano > 3]
head(misPalabras04, n = 50)
##  [1] "muchã­simas"   "gracias"       "ustedes"       "presencia"    
##  [5] "quiero"        "decirles"      "absolutamente" "todos"        
##  [9] "bienvenidos"   "este"          "evento"        "tiene"        
## [13] "mucho"         "sentimiento"   "mucho"         "solidaridad"  
## [17] "nada"          "regocije"      "corazã³n"      "ciudadano"    
## [21] "poder"         "atender"       "nuestros"      "viejecitos"   
## [25] "nuestros"      "jubilados"     "nuestros"      "niã±os"       
## [29] "poder"         "atender"       "personas"      "excluidas"    
## [33] "ladeadas"      "aquellas"      "encuentran"    "estado"       
## [37] "indefensiã³n"  "puede"         "posible"       "despuã©s"     
## [41] "haber"         "dado"          "toda"          "vida"         
## [45] "servicio"      "jã³venes"      "niã±os"        "personas"     
## [49] "llegan"        "tercera"

Uso de las palabras

  1. Sacar stop words
stopWords <- readLines("https://raw.githubusercontent.com/stopwords-iso/stopwords-es/master/raw/stop-words-spanish.txt")
stopWords_trans <- sacarCarEsp(mitexto_IN = stopWords)
head(stopWords_trans, n = 100)
##   [1] "algãºn"   "alguna"      "algunas"     "alguno"      "algunos"    
##   [6] "ambos"       "ampleamos"   "ante"        "antes"       "aquel"      
##  [11] "aquellas"    "aquellos"    "aqui"        "arriba"      "atras"      
##  [16] "bajo"        "bastante"    "bien"        "cada"        "cierta"     
##  [21] "ciertas"     "cierto"      "ciertos"     "como"        "con"        
##  [26] "conseguimos" "conseguir"   "consigo"     "consigue"    "consiguen"  
##  [31] "consigues"   "cual"        "cuando"      "dentro"      "desde"      
##  [36] "donde"       "dos"         "el"          "ellas"       "ellos"      
##  [41] "empleais"    "emplean"     "emplear"     "empleas"     "empleo"     
##  [46] "en"          "encima"      "entonces"    "entre"       "era"        
##  [51] "eramos"      "eran"        "eras"        "eres"        "es"         
##  [56] "esta"        "estaba"      "estado"      "estais"      "estamos"    
##  [61] "estan"       "estoy"       "fin"         "fue"         "fueron"     
##  [66] "fui"         "fuimos"      "gueno"       "ha"          "hace"       
##  [71] "haceis"      "hacemos"     "hacen"       "hacer"       "haces"      
##  [76] "hago"        "incluso"     "intenta"     "intentais"   "intentamos" 
##  [81] "intentan"    "intentar"    "intentas"    "intento"     "ir"         
##  [86] "la"          "largo"       "las"         "lo"          "los"        
##  [91] "mientras"    "mio"         "modo"        "muchos"      "muy"        
##  [96] "nos"         "nosotros"    "otro"        "para"        "pero"

Uso de las palabras

  1. Sacar stop words
misPalabras01 <- misPalabras01[!misPalabras01 %in% stopWords_trans]
misPalabras02 <- misPalabras02[!misPalabras02 %in% stopWords_trans]
misPalabras03 <- misPalabras03[!misPalabras03 %in% stopWords_trans]
misPalabras04 <- misPalabras04[!misPalabras04 %in% stopWords_trans]
head(misPalabras04, n = 50)
##  [1] "muchã­simas"   "gracias"       "ustedes"       "presencia"    
##  [5] "quiero"        "decirles"      "absolutamente" "todos"        
##  [9] "bienvenidos"   "este"          "evento"        "mucho"        
## [13] "sentimiento"   "mucho"         "solidaridad"   "nada"         
## [17] "regocije"      "corazã³n"      "ciudadano"     "atender"      
## [21] "nuestros"      "viejecitos"    "nuestros"      "jubilados"    
## [25] "nuestros"      "niã±os"        "atender"       "personas"     
## [29] "excluidas"     "ladeadas"      "encuentran"    "indefensiã³n" 
## [33] "posible"       "despuã©s"      "haber"         "dado"         
## [37] "toda"          "vida"          "servicio"      "jã³venes"     
## [41] "niã±os"        "personas"      "llegan"        "tercera"      
## [45] "edad"          "tengan"        "retiro"        "digno"        
## [49] "tengan"        "dinero"

Uso de las palabras

  1. Computar frecuencias
misPalabras01Tabla <- sort(table(misPalabras01), decreasing = TRUE)
misPalabras02Tabla <- sort(table(misPalabras02), decreasing = TRUE)
misPalabras03Tabla <- sort(table(misPalabras03), decreasing = TRUE)
misPalabras04Tabla <- sort(table(misPalabras04), decreasing = TRUE)
head(misPalabras01Tabla, n = 20)
## misPalabras01
##     mundo     todos   ustedes      este  nuestros   pueblos  soã±emos 
##         8         5         5         4         4         4         4 
##      casa   mayores  millones  naciones  nuestras   paã­ses  podremos 
##         3         3         3         3         3         3         3 
##   siempre      aã±o      âcon   afectan    amigos bienestar 
##         3         2         2         2         2         2

Uso de las palabras

m01 <- merge(misPalabras01Tabla, misPalabras02Tabla, 
  by.x = 1, by.y = 1, all = TRUE)
m01 <- merge(m01, misPalabras03Tabla, 
  by.x = 1, by.y = 1, all = TRUE)
m01 <- merge(m01, misPalabras04Tabla, 
  by.x = 1, by.y = 1, all = TRUE)
## Warning in merge.data.frame(m01, misPalabras04Tabla, by.x = 1, by.y = 1, :
## column names 'Freq.x', 'Freq.y' are duplicated in the result
colnames(m01) <- c("palabra", "d1", "d2", "d3", "d4")

Uso de las palabras

head(m01, n = 30)
##         palabra d1 d2 d3 d4
## 1         mundo  8  2  2 NA
## 2         todos  5 10  6  6
## 3       ustedes  5  4  3  9
## 4          este  4  5  4  7
## 5      nuestros  4  1  2  9
## 6       pueblos  4 NA NA NA
## 7      soã±emos  4 NA NA NA
## 8          casa  3 NA NA NA
## 9       mayores  3  1 NA NA
## 10     millones  3  9 NA NA
## 11     naciones  3 NA NA NA
## 12     nuestras  3 NA  1 NA
## 13      paã­ses  3 NA NA NA
## 14     podremos  3 NA NA NA
## 15      siempre  3  1  3  2
## 16         aã±o  2  4 NA  3
## 17         âcon  2  4 NA NA
## 18      afectan  2 NA NA NA
## 19       amigos  2  6  2 NA
## 20    bienestar  2  2  1 NA
## 21       comãºn  2 NA NA NA
## 22   compromiso  2  2 NA  1
## 23      comunes  2 NA NA NA
## 24      conocen  2 NA NA NA
## 25  deberã­amos  2 NA NA NA
## 26 distinguidos  2 NA NA NA
## 27  ecuatoriano  2  2 NA NA
## 28      estados  2 NA NA NA
## 29        estos  2 NA NA NA
## 30     familias  2  2 NA NA

Uso de las palabras

m01$dTot <- m01$d1 + m01$d2 + m01$d3 + m01$d4
m01 <- m01[order(m01$dTot, decreasing = TRUE),]
head(m01, n = 30)
##         palabra d1 d2 d3 d4 dTot
## 2         todos  5 10  6  6   27
## 195    gobierno  1 14  6  4   25
## 3       ustedes  5  4  3  9   21
## 4          este  4  5  4  7   20
## 32      gracias  2  4  5  6   17
## 5      nuestros  4  1  2  9   16
## 120      contra  1  6  4  1   12
## 175        estã  1  7  2  2   12
## 42     personas  2  1  4  3   10
## 49         vida  2  1  3  4   10
## 15      siempre  3  1  3  2    9
## 197        gran  1  1  5  1    8
## 132        debe  1  2  1  2    6
## 40        nuevo  2  1  1  1    5
## 125 corrupciã³n  1  2  1  1    5
## 234      manera  1  2  1  1    5
## 1         mundo  8  2  2 NA   NA
## 6       pueblos  4 NA NA NA   NA
## 7      soã±emos  4 NA NA NA   NA
## 8          casa  3 NA NA NA   NA
## 9       mayores  3  1 NA NA   NA
## 10     millones  3  9 NA NA   NA
## 11     naciones  3 NA NA NA   NA
## 12     nuestras  3 NA  1 NA   NA
## 13      paã­ses  3 NA NA NA   NA
## 14     podremos  3 NA NA NA   NA
## 16         aã±o  2  4 NA  3   NA
## 17         âcon  2  4 NA NA   NA
## 18      afectan  2 NA NA NA   NA
## 19       amigos  2  6  2 NA   NA

Uso de las palabras

Hay paquetes para automatizar tareas de tratamiento de texto como tm