Elaborado por Luis Mendoza Ovando

La presente tarea tiene una sección teórica y una sección práctica.

La entrega se realizará a través de un documento de RMarkdown publicado en RPUbs (se entregará el enlace en un correo a mi con copia a la laboratorista).

En caso de algún error en el código de la tarea, publique el error en Piazza o contacte a su instructor para ver como proceder.

Aquellos que no han podido publicar sus tareas antes pueden entregar la tarea de la misma manera en que lo han estado haciendo antes.

Sección teórica.

1. ¿Para qué sirve la libreria stringr?

La librería stringr nos permite manipular cadenas de texto largas y es muy útil cuando hacemos análisis de expresiones de texto (tweets, discursos, guiones, etc. )

2. ¿Qué son y para qué sirven las expresiones regulares?

Son secuencias de patrones, es decir, composiciones generales, que nos permiten definir búsquedas dentro de un texto más largo. Cuando logramos buscar lo que queremos podemos tanto extraerlo como deshacernos de ello.

3. ¿Para qué sirve la librería rebus?

Es una librería que nos permite definir expresiones regulares y utilizarlas, pero de forna simplificada.

4. ¿Para qué sirve la función str_view() y str_view_all()? ¿Cuál es la diferencia entre ambas?

Estas funciones de la librería stringr nos permiten revisar si dentro de la cadena de texto que estamos manipulando estamos logrando encontrar las coincidencias que estamos definiendo con nuestro patrón de búsqueda. Cuando la utilizamos podemos ver en el Viewer de R Studio que resaltan los pedazos de cadena de texto que coinciden con lo que decimos buscar.
En cuanto a la diferencia entre str_view() y str_view_all(), el primero sólo nos muestra la primera coincidencia en la cadena de texto manipulada, mientras que la segunda te muestra todas las que empatan con el patrón definido.

5. ¿Para qué sirve la función str_detect() y str_detect_all()? ¿Cuál es la diferencia entre ambas?

str_detect nos ayuda a saber si el patrón que buscamos está o no dentro de la cadena de texto. Revisa por default toda la cadena y entrega un TRUE o un FALSE. No hay un str_detect_all

6. ¿Para qué sirve la función str_replace() y str_replace_all()? ¿Cuál es la diferencia entre ambas?

str_replace nos ayuda a encontrar un patrón de búsqueda en una cadena de texto y reemplazarlo por otro definido por nosotros. Parecido a Word cuando utilizamos la función buscar y reemplazar. La primera sólo aplica para la primera coincidencia y la segunda para todas dentro de la cadena de texto que estamos manipulando.

7. ¿Para qué sirve la función str_remove() y str_remove_all()? ¿Cuál es la diferencia entre ambas?

str_remove es como una función hermana de str_replace. La diferencia es que en automático modifica los patrones que tienen una coincidencia con "" un character vacío, en otras palabras, los quita. La primera funciona con la primera coincidencia y la segunda para todo el texto.

8. ¿Para qué sirve la función str_extract() y str_extract_all()? ¿Cuál es la diferencia entre ambas?

Esta función sirve para encontrar un patrón dentro del texto y retirarlo. Por ejemplo si buscáramos las vocales dentro de un texto no entregaría, en caso de que existan, un vector lleno de vocales. Esto puede ser útil para contar el número de veces que se repite una palabra en un discurso, un cuento o un guion. La primera función se detiene en la primera coincidencia y la segunda aplica a toda la cadena de texto manipulada.

Sección práctica.

0. Estas son las librerías que utilizaremos en la sección práctica. Cárgalas o instalalas en caso de que no las tengas instaladas en tu computadora.

# Librerias 
library(pdftools) # Si no tienes esta libreria, instálala.
library(tidyverse)
library(rebus)
library(htmltools)

1. Dados los siguientes numeros de telefono guardados en numeros, limpie los datos de tal forma que todos los numeros tengan el mismo formato. Para esto, utilice expresiones regulares y funciones de stringr.

(Sugerencia: El formato puede ser el que usted defina, pero el mas facil es que sean solo los numeros, sin símbolos raros).

numeros <- c("(595)107-3344",
             "(890)-123-4465",
             "999 107 5243",
             "999_989-0756")

# Aqui coloque su respuesta ----
pattern <-c("[-()_\\s]")
numeros <- str_remove_all(str_squish(numeros), pattern)
numeros <- gsub('(.{2})', '\\1 ', numeros) %>%  
           str_remove(or1(c(SPC%R%END)))

2. Lea el siguiente pdf en R…

roma <- pdf_text("Roma-Screenplay-SPANISH.pdf")

…y quédese con la escena de la hoja 135:

roma_escena <- roma[135]
roma_escena
## [1] "               mm/dd/yy (White)                      133.\nCONTINUED: (6)\nLa Señora Sofía la abraza con fuerza -\n                        SEÑORA SOFÍA\n          Gracias… gracias… gracias, Cleo…\nPero Cleo no para de llorar -\n                        CLEO\n          No la quería… No la quería…\nLa Señora Sofía intenta calmarla -\n                        SEÑORA SOFÍA\n          Shh, shh, shh… Están bien… Los\n          niños están bien…\nPero Cleo insiste entre llanto y mocos -\n                        CLEO\n          No la quería… No quería que\n          naciera…\nY se quiebra aún más -\n                        CLEO (CONT’D)\n          … ¡Pobrecita!… ¡No quería que\n          naciera!… ¡No quería que naciera!…\nLa Señora Sofía la abraza más fuerte y también llora -\n                        SEÑORA SOFÍA\n          Todo va a estar bien, Cleo… Todo\n          va a estar bien…\nLas dos mujeres lloran abrazadas. Es un llanto\ncompartido, con sollozos como arcadas, y largos silencios\nque explotan en prolongadas vocales.\nLos niños se enlazan alrededor de las mujeres,\nabrazándolas. Sólo Toño los mira de pie.\nLos curiosos se disipan. El jinete jala la riendas y el\ncaballo sigue su camino por la playa.\nEl mar enfurecido con sus inquietas olas refleja los\núltimos destellos del día.\n28 de junio de 1971, lunes\n"

Ahora:

a) Genere una expresión regular que capture todos los quiebres de página (\n) en el objeto roma_escena.

pat = capture(one_or_more("\n"))
str_view_all(roma_escena, pat, match = TRUE)

b) Con la expresión de (a) y la función adecuada de stringr sustituya todos los quiebres de página de roma_escena por espacios en blanco.

roma_escena <- str_replace_all(roma_escena,pat," ")
roma_escena
## [1] "               mm/dd/yy (White)                      133. CONTINUED: (6) La Señora Sofía la abraza con fuerza -                         SEÑORA SOFÍA           Gracias… gracias… gracias, Cleo… Pero Cleo no para de llorar -                         CLEO           No la quería… No la quería… La Señora Sofía intenta calmarla -                         SEÑORA SOFÍA           Shh, shh, shh… Están bien… Los           niños están bien… Pero Cleo insiste entre llanto y mocos -                         CLEO           No la quería… No quería que           naciera… Y se quiebra aún más -                         CLEO (CONT’D)           … ¡Pobrecita!… ¡No quería que           naciera!… ¡No quería que naciera!… La Señora Sofía la abraza más fuerte y también llora -                         SEÑORA SOFÍA           Todo va a estar bien, Cleo… Todo           va a estar bien… Las dos mujeres lloran abrazadas. Es un llanto compartido, con sollozos como arcadas, y largos silencios que explotan en prolongadas vocales. Los niños se enlazan alrededor de las mujeres, abrazándolas. Sólo Toño los mira de pie. Los curiosos se disipan. El jinete jala la riendas y el caballo sigue su camino por la playa. El mar enfurecido con sus inquietas olas refleja los últimos destellos del día. 28 de junio de 1971, lunes "

c) El objeto roma_escena tiene espacios anormalmente grandes. Genere una expresión regular que capture todos los espacios más grandes de lo normal (mas de un espacio normal).

pat2 = capture(one_or_more(repeated(SPC)))
str_view_all(roma_escena, pat2, match = TRUE)

d) Con la expresión de (c) y la función adecuada de stringr, sustituya todos los espacios anormalmente grandes de roma_escena por espacios normales.

roma_escena<- str_replace_all(roma_escena,pat2," ")
roma_escena
## [1] " mm/dd/yy (White) 133. CONTINUED: (6) La Señora Sofía la abraza con fuerza - SEÑORA SOFÍA Gracias… gracias… gracias, Cleo… Pero Cleo no para de llorar - CLEO No la quería… No la quería… La Señora Sofía intenta calmarla - SEÑORA SOFÍA Shh, shh, shh… Están bien… Los niños están bien… Pero Cleo insiste entre llanto y mocos - CLEO No la quería… No quería que naciera… Y se quiebra aún más - CLEO (CONT’D) … ¡Pobrecita!… ¡No quería que naciera!… ¡No quería que naciera!… La Señora Sofía la abraza más fuerte y también llora - SEÑORA SOFÍA Todo va a estar bien, Cleo… Todo va a estar bien… Las dos mujeres lloran abrazadas. Es un llanto compartido, con sollozos como arcadas, y largos silencios que explotan en prolongadas vocales. Los niños se enlazan alrededor de las mujeres, abrazándolas. Sólo Toño los mira de pie. Los curiosos se disipan. El jinete jala la riendas y el caballo sigue su camino por la playa. El mar enfurecido con sus inquietas olas refleja los últimos destellos del día. 28 de junio de 1971, lunes "

e) Utilizando stringr y la expresión regular adecuada, elimine las siguientes frases:

* "mm/dd/yy (White) 133. CONTINUED: (6) " y…

frase1 <- capture("mm/dd/yy" %R% SPC %R% ANY_CHAR %R% UPPER %R% "hite" %R% ANY_CHAR %R% SPC %R% "133." %R% SPC %R% UPPER %R% UPPER %R% UPPER %R% UPPER %R% UPPER %R% UPPER %R% UPPER %R% UPPER %R% UPPER %R% ANY_CHAR %R% SPC %R% ANY_CHAR %R% "6" %R% ANY_CHAR %R% SPC)
str_view_all(roma_escena,frase1,TRUE)
roma_escena <- str_remove_all(roma_escena, frase1)
roma_escena
## [1] " La Señora Sofía la abraza con fuerza - SEÑORA SOFÍA Gracias… gracias… gracias, Cleo… Pero Cleo no para de llorar - CLEO No la quería… No la quería… La Señora Sofía intenta calmarla - SEÑORA SOFÍA Shh, shh, shh… Están bien… Los niños están bien… Pero Cleo insiste entre llanto y mocos - CLEO No la quería… No quería que naciera… Y se quiebra aún más - CLEO (CONT’D) … ¡Pobrecita!… ¡No quería que naciera!… ¡No quería que naciera!… La Señora Sofía la abraza más fuerte y también llora - SEÑORA SOFÍA Todo va a estar bien, Cleo… Todo va a estar bien… Las dos mujeres lloran abrazadas. Es un llanto compartido, con sollozos como arcadas, y largos silencios que explotan en prolongadas vocales. Los niños se enlazan alrededor de las mujeres, abrazándolas. Sólo Toño los mira de pie. Los curiosos se disipan. El jinete jala la riendas y el caballo sigue su camino por la playa. El mar enfurecido con sus inquietas olas refleja los últimos destellos del día. 28 de junio de 1971, lunes "

* "28 de junio de 1971, lunes"

frase2 <- capture("28" %R% SPC %R% "de" %R% SPC %R% "junio" %R% SPC %R% "de" %R% SPC %R% "1971" %R% ANY_CHAR %R% SPC %R% "lunes")
str_view_all(roma_escena,frase2,TRUE)
roma_escena <- str_remove_all(roma_escena, frase2)
roma_escena
## [1] " La Señora Sofía la abraza con fuerza - SEÑORA SOFÍA Gracias… gracias… gracias, Cleo… Pero Cleo no para de llorar - CLEO No la quería… No la quería… La Señora Sofía intenta calmarla - SEÑORA SOFÍA Shh, shh, shh… Están bien… Los niños están bien… Pero Cleo insiste entre llanto y mocos - CLEO No la quería… No quería que naciera… Y se quiebra aún más - CLEO (CONT’D) … ¡Pobrecita!… ¡No quería que naciera!… ¡No quería que naciera!… La Señora Sofía la abraza más fuerte y también llora - SEÑORA SOFÍA Todo va a estar bien, Cleo… Todo va a estar bien… Las dos mujeres lloran abrazadas. Es un llanto compartido, con sollozos como arcadas, y largos silencios que explotan en prolongadas vocales. Los niños se enlazan alrededor de las mujeres, abrazándolas. Sólo Toño los mira de pie. Los curiosos se disipan. El jinete jala la riendas y el caballo sigue su camino por la playa. El mar enfurecido con sus inquietas olas refleja los últimos destellos del día.  "

f) Genere una expresión regular que capture solamente las palabras que estan completamente en mayúsculas.

mayus <- (one_or_more(UPPER) %R% one_or_more(UPPER))
str_view_all(roma_escena,mayus,TRUE)