4.6 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:
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
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()
.
4.6.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.
# lista de arquivos
files_cposg <- fs::dir_ls("data-raw/cposg")
# 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")
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 algo de errado pode acontecer no meio da execução.
Para obter a base de dados, basta ler e empilhar os arquivos parciais que foram gerados.
rds_files <- fs::dir_ls("data-raw/cposg_rds")
d_cposg <- purrr::map_dfr(rds_files, readr::read_rds)
dplyr::glimpse(d_cposg)
#> Observations: 89
#> Variables: 7
#> $ id <chr> "00000091520158260558", "00002046520118260420", "00003…
#> $ file <chr> "data-raw/cposg/00000091520158260558.html", "data-raw/…
#> $ hidden <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE…
#> $ data <list> [<tbl_df[13 x 2]>, <tbl_df[14 x 2]>, <tbl_df[13 x 2]>…
#> $ parts <list> [<tbl_df[3 x 4]>, <tbl_df[5 x 4]>, <tbl_df[3 x 4]>, <…
#> $ movs <list> [<tbl_df[23 x 2]>, <tbl_df[35 x 2]>, <tbl_df[22 x 2]>…
#> $ decisions <list> [<tbl_df[1 x 2]>, <tbl_df[1 x 2]>, <tbl_df[1 x 2]>, <…
4.6.2 Exercícios
- O que faz a função
purrr::map_dfr()
? - Estude o objeto
d_cposg
. O que temos na colunadata
? E na colunaparts
?
- OBS: Os objetos
data
,parts
,movs
edecisions
dod_cposg
são chamados de list columns.
- Qual é o outro parâmetro da função
esaj::run_parser()
, e o que ele faz?