Transformando leis em dados
Nesse artigo, quero mostrar como podemos importar e criar dataframes a partir de leis federais brasileiras em python utilizando a estrutura do texto legal.
Analisando leis
Leis são documentos jurídicos e técnicos que normatizam e orientam diferentes aspectos da vida cotidiana. Por diversas razões, estudiosos querem analisar e comparar o conteúdo de diferentes leis.
Uma maneira de faze-lo é por meio da leitura minuciosa da lei em questão, mas qualquer pessoa que já tenha trabalhado direta ou indiretamente com legislações sabe que nem tudo o que está escrito é relevante em todos os casos.
Por exemplo, digamos que você more em um condomínio e o síndico deseja proibir que moradores tenham animais de estimação. Para saber se o síndico pode ou não fazer isso, você deve consultar as leis 4.591/64 (Lei de Condomínios) e 10.406/2002 (Novo Código Civil). No entanto, essas duas leis são gigantescas e versam sobre diversas matérias, e o que você quer saber está em provavelmente um ou dois parágrafos dentro de artigos específicos.
Desta forma, muitas vezes não queremos estudar uma lei inteira, apenas uma parte da lei, de forma que, quando consideramos em transformar aquelas informações em dados, devemos saber a relevância que cada parte da estrutura legal possui.
Estrutura (e padrões) das leis:
Este texto do Guilhermo Glassman para o “Politize-se” explica de forma muito didática o que quer dizer cada parte da estrutura de uma lei. Em resumo:
- Entidade de origem: indica se a lei é federal, estadual ou municipal
- Referência da lei e data de criação
- Tipo de lei: ordinária, complementar, medida provisória, emenda constitucional, decret legislativo e resolucão
- Ementa: Resumo do que é tratado na lei
- Preâmbulo: Justificativa ou contexto no qual a lei foi criada
- Conteúdo:
- Título
- Capítulo
- Artigo:
* Caput: Cabeça do artigo, texto que vem logo depois de “Artigo 1°”, por exemplo, orienta o queas demais subdivisões vão falar
* Parágrafos ( § ): Destacam aspectos importantes do artigo que não estão expressos no caput
* Incisos (I, II, …): Descrevem hipóteses em que a regra é aplicada
* Alínea (a, b, …): Subdivisões dos incisos
Desta forma, sabemos que se procurarmos palavras-chave em leis, elas terão um peso e uma interpretação de acordo com a parte da estrutura em que ela foi mencionada.
No entanto, ao observar as leis brasileiras, vemos que nem todos os documentos seguem à risca a estrutura interna de um artigo. Em muitos casos, os artigos seguem do caput direto para os incisos, enumerando as situações em que se aplica o artigo. Um exemplo da lei 12.527/2011 (Lei de Acesso à Informação):
Art. 4º Para os efeitos desta Lei, considera-se:
I — informação: dados, processados ou não, que podem ser utilizados para produção e transmissão de conhecimento, contidos em qualquer meio, suporte ou formato;
II — documento: unidade de registro de informações, qualquer que seja o suporte ou formato;
Com isso, acho que criar um dataframe a partir de leis que considere apenas os caputs e artigos mais interessante, já que o processo de automatização para achar incisos e alíneas poderia levar a uma interpretação equivocada dos dados.
Importando e criando o DataFrame
Vou trabalhar aqui com a Lei de Acesso à Informacão (LAI), que consultei inúmeras vezes quando trabalhava na Transparência Brasil . A Lei 12.527/2011 está disponível nesse link.
Normalmente eu faria um scrap da página do governo com o `requests.get` , mas por alguma razão eu obtive diversas vezes um erro de conexão que persistiu mesmo com a instalação de pacotes de segurança. (Acredito que o problema seja do site do Palácio do Planalto, se alguém teve essa dificuldade e encontrou uma solução, entre em contato comigo)
Como eu pretendo trabalhar com poucas leis, pude me dar ao luxo de imprimir a página como pdf e importa-la no Python com o ``pdfminer``, que retorna uma grande string contendo toda a lei.
Em seguida, utilizei a própria estrutura do texto para fazer o split que cria o dataframe. Os artigos são precedidos de duas quebras de linha (‘\n\nArt.’) , assim como os parágrafos (\n\n§) , que permitiu a automatização. O resultado que eu buscava era o seguinte:
Ao aplicar esse código para outras leis, recomendo conferir o número de artigos e parágrados, verificando se artigo ou parágrafo deixou de ser considerado pois a estrutura não estava correta. Ao que tudo indica, as leis são publicadas a partir de um documento de texto que é editado manualmente, o que pode gerar erros (por exemplo, uma quebra de linha ao invés de duas).
Abaixo o código final comentado:
Encontrou algum erro ou gostaria de acrescentar comentários que possam melhorar esse texto? Escreva nos comentários ou envie um email para voigt.jessica@gmail.com .
*Esse texto é parte do produto de pesquisa sobre uso de dados abertos para combate à corrupção apoiado pela Alexander von Humboldt Foundation