Package 'diariosuy'

Title: Buscador y Analizador de Diarios de Sesión del Parlamento Uruguayo
Description: Busca sesiones parlamentarias por palabra clave en el sitio del Parlamento del Uruguay, descarga los diarios de sesión en PDF y analiza sus textos: frecuencia de términos, evolución en el tiempo y co-ocurrencias. La app se ejecuta en la máquina del usuario, condición necesaria para consultar el sitio oficial, que rechaza las conexiones desde fuera de Uruguay.
Authors: Emiliano González [aut, cre]
Maintainer: Emiliano González <[email protected]>
License: MIT + file LICENSE
Version: 0.1.0
Built: 2026-10-06 12:26:18 UTC
Source: https://github.com/EmilianoGonLas/diariosuy

Help Index


Cuenta cuántas menciones de patron1 tienen a patron2 dentro de ventana caracteres en el mismo texto (co-ocurrencia de proximidad).

Description

Cuenta cuántas menciones de patron1 tienen a patron2 dentro de ventana caracteres en el mismo texto (co-ocurrencia de proximidad).

Usage

.contar_proximos(texto, patron1, patron2, ventana = 500L)

Arguments

texto

Texto normalizado (minúsculas, espacios simples)

patron1

Regex del término principal

patron2

Regex del término de cruce

ventana

Máx. distancia en caracteres para considerar "cercano" (default 500)

Value

Entero: cuántas menciones de patron1 tienen a patron2 "cerca"


Extrae un fragmento de texto que empiece al inicio de una oración.

Description

Busca el último signo de puntuación en los max_pre caracteres anteriores al match y empieza allí. Si no hay ninguno, toma desde el límite. Cierra en el primer punto dentro de los max_total caracteres siguientes.

Usage

.extraer_fragmento(texto, s, e, max_pre = 90L, max_total = 230L)

Arguments

texto

Texto normalizado

s, e

Inicio y fin del match a destacar

max_pre

Máx. chars a buscar hacia atrás para inicio de oración (default 90)

max_total

Longitud máxima del fragmento (default 230)

Value

Lista con: ws (índice inicio), we (índice fin), text (el fragmento)


Extrae texto de un PDF respetando el orden de lectura en documentos a dos columnas.

Description

Usa pdftools::pdf_data() para obtener las coordenadas de cada palabra y reconstruir el texto leyendo primero la columna izquierda completa y luego la derecha, en lugar de ir línea a línea de izquierda a derecha. Si pdf_data() falla, cae en pdf_text() como fallback.

Usage

.extraer_texto_pdf(ruta)

Arguments

ruta

Ruta al archivo PDF

Value

Character vector con el texto de cada página (largo = n° de páginas)


Reconstruye el texto de una columna agrupando palabras en líneas.

Description

Ordena por (y, x), detecta saltos de línea por el Δy entre palabras consecutivas y une las palabras de cada línea con espacios.

Usage

.reconstruir_columna(datos)

Arguments

datos

data.frame con columnas x, y, width, height, text (de pdf_data())

Value

String con el texto de la columna en orden de lectura correcto


Abrir la app de diarios del Parlamento

Description

Levanta la aplicación Shiny y la abre en el navegador. Todas las consultas salen desde la máquina donde se ejecuta, que es lo que permite llegar al sitio del Parlamento: parlamento.gub.uy responde 403 a las IP de fuera de Uruguay, así que la app necesita correr desde una conexión uruguaya.

Usage

abrir_app(puerto = NULL, navegador = TRUE)

Arguments

puerto

Puerto donde levantar la app. Por defecto Shiny elige uno libre.

navegador

Si es TRUE (por defecto) abre el navegador automáticamente.

Value

Se invoca por su efecto: corre la app hasta que se la interrumpe.

Examples

if (interactive()) {
  abrir_app()
}

Analiza PDFs buscando un término principal y co-ocurrencias opcionales

Description

Analiza PDFs buscando un término principal y co-ocurrencias opcionales

Usage

analizar_pdfs(
  directorio,
  termino_principal,
  terminos_cruce = list(),
  progreso_fn = NULL
)

Arguments

directorio

Carpeta con los PDFs a analizar. También acepta la ruta de un archivo .zip: en ese caso se extrae a una carpeta temporal y se analiza su contenido, así el ZIP que arma el Buscador se puede usar tal cual. La búsqueda de PDFs es recursiva, de modo que no importa si quedaron dentro de subcarpetas.

termino_principal

Expresión regular del término principal

terminos_cruce

Lista nombrada: list(turismo = "turist|extranjer")

progreso_fn

function(valor, mensaje) para reportar progreso

Value

tibble con columnas: archivo, ruta, legislatura, fecha, id_doc, paginas_con_termino, cruce_[nombre], total_cruces, puntuacion, fragmentos_texto, estado


Busca sesiones parlamentarias que mencionan un término dado

Description

Busca sesiones parlamentarias que mencionan un término dado

Usage

buscar_sesiones(texto, camara = "All", lgl_ids = c(49, 50), progreso_fn = NULL)

Arguments

texto

Término a buscar (ej: "CANNABIS", "VIVIENDA SOCIAL")

camara

Cámara: "All" (ambas), "S" (Senado), "R" (Representantes)

lgl_ids

Vector de IDs de legislatura a buscar (ver LEGISLATURAS en global.R)

progreso_fn

Función opcional para reportar progreso: function(valor, mensaje)

Value

tibble con columnas: legislatura, lgl_id, cuerpo, fecha, id_doc, url_intermedia. Lleva siempre el atributo "errores": vector de mensajes con los fallos de red/HTTP que hubo. Un tibble vacío CON errores significa "no se pudo consultar el sitio"; vacío SIN errores, "el sitio no devolvió nada".


Empaqueta todos los PDFs de una carpeta en un archivo ZIP

Description

Usa nombres de archivo relativos para garantizar que el ZIP se pueda abrir correctamente en cualquier sistema operativo.

Usage

crear_zip(directorio, destino)

Arguments

directorio

Carpeta con los PDFs a empaquetar

destino

Ruta del archivo ZIP de salida

Value

TRUE si el ZIP se creó correctamente, FALSE si no había PDFs


Descarga PDFs de sesiones seleccionadas a un directorio local

Description

Cada PDF se nombra con el patrón: ⁠Lgl_[LEGISLATURA]_[FECHA]_ID_[ID].pdf⁠ Si el archivo ya existe, lo omite sin re-descargarlo.

Usage

descargar_sesiones(sesiones, directorio, progreso_fn = NULL)

Arguments

sesiones

tibble con columnas: legislatura, fecha, id_doc, url_intermedia

directorio

Carpeta destino (se crea si no existe)

progreso_fn

Función opcional: function(valor, mensaje) para reportar progreso

Value

tibble con columnas: archivo, estado (resultado por cada PDF)


Convierte score_raw a estrellas visuales (★★★☆☆)

Description

Convierte score_raw a estrellas visuales (★★★☆☆)

Usage

estrellas_html(score_raw, max_stars = 5L)

Arguments

score_raw

Vector numérico de scores crudos

max_stars

Número máximo de estrellas (default 5)

Value

Vector de strings HTML con estrellas


Gráfico de co-ocurrencias entre el término principal y términos secundarios

Description

Gráfico de co-ocurrencias entre el término principal y términos secundarios

Usage

grafico_coocurrencias(datos, terminos_cruce)

Arguments

datos

tibble resultado de analizar_pdfs()

terminos_cruce

lista nombrada usada en el análisis

Value

objeto plotly o NULL si no hay términos de cruce


Gráfico interactivo de menciones a lo largo del tiempo

Description

Gráfico interactivo de menciones a lo largo del tiempo

Usage

grafico_timeline(datos, titulo = "Menciones del término en el tiempo")

Arguments

datos

tibble resultado de analizar_pdfs()

titulo

Título del gráfico

Value

objeto plotly


Legislaturas disponibles en el buscador del Parlamento

Description

Tabla con las legislaturas que se pueden consultar, con el rango de fechas que el buscador oficial espera para cada una.

Usage

LEGISLATURAS

Format

Un tibble con una fila por legislatura y las columnas etiqueta, lgl_id, fecha_desde y fecha_hasta.

Details

Los diarios de sesión están disponibles en línea a partir del 15/02/1985 (inicio de la XLII, restauración democrática). Las legislaturas XL y XLI son previas al golpe de Estado de 1973: pueden tener documentos limitados o ninguno según el cuerpo que se busque.


Obtiene la URL directa del PDF desde la página intermedia del parlamento

Description

Usa httr con User-Agent de navegador real. Prueba tres selectores CSS en cascada para cubrir tanto la estructura actual del sitio como páginas antiguas de legislaturas anteriores (que usan HTML diferente).

Usage

obtener_url_pdf(url_intermedia)

Arguments

url_intermedia

URL del visor de documentos del parlamento

Value

URL del PDF como string, o NA si no se encuentra