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
- Estude o objeto
d_cposg
. O que temos na colunadata
? E na colunaparts
? - 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.