3.9 Processando documentos

Finalmente, processar documentos significa carregar dados acessíveis em disco e transformar os dados brutos uma base tidy. Usualmente separamos a estruturação em duas etapas: i) transformar arquivos não-estruturados em um arquivos semi-estruturados (e.g. um arquivo HTML em uma tabela mais um conjunto de textos livres) e ii) transformar arquivos semi-estruturados em uma base analítica (estruturada). A tarefa de processar as páginas HTML será realizada pelas funções esaj::parse_cjsg() e esaj::run_parser().

3.9.1 Parse CPOSG

O parser da consulta de processos foi escrito de um jeito especial. Uma página de resultados tem vários blocos de informações, entre eles i) dados básicos, ii) partes, iii) movimentações e iv) decisões. Em algumas pesquisas, temos interesse em apenas uma parte desses blocos. O parser foi construído para modular essa captura de informações.

Outra diferença importante é que, nesse caso, salvamos individualmente os resultados do parse em arquivos .rds. Isso é feito para evitar retrabalho, já que esse processo é computacionalmente intensivo e o algoritmo pode travar no meio da execução.

# lista de arquivos
files_cposg <- dir("data-raw/cposg", full.names = TRUE)

# objeto de parse
parser <- esaj::make_parser() %>% 
  esaj::parse_data() %>% 
  esaj::parse_parts() %>% 
  esaj::parse_movs() %>% 
  esaj::parse_decisions()

# rodar parse
d_cposg <- esaj::run_parser(file = files_cposg, 
                            parser = parser, 
                            path = "data-raw/cposg_rds")

Para obter a base de dados, basta ler e empilhar os arquivos parciais que foram gerados.

rds_files <- dir("data-raw/cposg_rds", full.names = TRUE)
d_cposg <- purrr::map_dfr(rds_files, readRDS)

glimpse(d_cposg)
#> Observations: 41
#> Variables: 7
#> $ id        <chr> "00000091520158260558", "00003442220148260347", "000...
#> $ file      <chr> "data-raw/cposg/00000091520158260558.html", "data-ra...
#> $ hidden    <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FAL...
#> $ data      <list> [<# A tibble: 13 x 2,    data              value   ...
#> $ parts     <list> [<# A tibble: 3 x 4,      id name                  ...
#> $ movs      <list> [<# A tibble: 23 x 2,    movement   description    ...
#> $ decisions <list> [<# A tibble: 1 x 2,   date       decision         ...

3.9.2 Exercícios

  1. Estude o objeto d_cposg. O que temos na coluna data? E na coluna parts?
  2. Qual é o outro parâmetro da função esaj::run_parser(), e o que ele faz?

OBS: Os objetos data, parts, movs e decisions do d_cposg são chamados de list columns.