Code Monkey home page Code Monkey logo

py-lexml-acervo's Introduction

py-lexml-acervo

py-lexml-acervo é um wrapper para a API de consulta do acervo do projeto LexML.

1. O que é o projeto LexML?

Trata-se de um portal especializado em informação jurídica e legislativa. Pretende-se reunir leis, decretos, acórdãos, súmulas, projetos de leis entre outros documentos das esferas federal, estadual e municipal dos Poderes Executivo, Legislativo e Judiciário de todo o Brasil: uma rede de informação legislativa e jurídica que pretende organizar, integrar e dar acesso às informações disponibilizadas nos diversos portais de órgãos do governo na Internet. @Fonte.

2. Acervo do Portal LexML

A API do LexML permite realizar pesquisas por meio de URLs e receber o resultado no formato XML. A API segue o padrão definido pelo Biblioteca do Congresso Norte-americano no projeto Search/Retrieval via URL (SRU).

3. Dataset

Entre os dias 12 a 13 de agosto de 2019 por meio da presente API foram coletados os metadados do acervo do LexML de publicações datadas entre os anos de 1556 a 2019. O referido dataset está disponível na plataforma Kaggle. Para acessá-lo basta clicar na imagem abaixo. O dataset possui aproximadamente 2GB compactado, e descompacto em torno de 10GB.

4. Metadados de Retorno da API

  • <tipoDocumento>
  • <facet-tipoDocumento>
  • <date>
  • <urn>
  • <localidade>
  • <facet-localidade>
  • <autoridade>
  • <facet-autoridade>
  • <title>
  • <description>
  • <subject>
  • <type>
  • <identifier>

4.1 Exemplo de retorna da API

<srw:recordData>
        <srw_dc:dc xsi:schemaLocation="info:srw/schema/1/dc-schema http://www.loc.gov/z3950/agency/zing/srw/dc-schema.xsd">
          <tipoDocumento>Lei</tipoDocumento>
          <facet-tipoDocumento>Legislação::Lei</facet-tipoDocumento>
          <dc:date>1983-12-05</dc:date>
          <urn>urn:lex:br;rondonia:estadual:lei:1983-12-05;12</urn>
          <localidade>Rondônia</localidade>
          <facet-localidade>Estados::Rondônia</facet-localidade>
          <autoridade>Estadual</autoridade>
          <facet-autoridade>Estadual</facet-autoridade>
          <dc:title>Lei ordinária nº 12,  de 05 de Dezembro de 1983</dc:title>
          <dc:description>ABRE CRÉDITO SUPLEMENTAR NO ORÇAMENTO VIGENTE.</dc:description>
          <dc:subject>CRÉDITO SUPLEMENTAR</dc:subject>
          <dc:type>html</dc:type>
          <dc:identifier>000349953</dc:identifier>
        </srw_dc:dc>
</srw:recordData>

5. Instalação da biblioteca py-lexml-acervo

5.1 Clona Repositório

git clone https://github.com/netoferraz/py-lexml-acervo.git

5.2 Acessa o repositório clonado

cd py-lexml-acervo

5.3 Cria um ambiente virtual

5.3.1 virtualenv

python -m venv .venv

5.4 Ativa o ambiente virtual

source ./.venv/bin/activate

5.5 Instala as dependências

pip install -r requirements.txt

6. Instruções de uso

As consultas à API se baseiam na classe LexmlAcervo localizada em ./apis/acervo. Para realizar uma consulta se deve instanciar a referida classe passando como parâmetro de inicialização uma query string no padrão CQL.

#exemplo de inicialização
consulta_acervo_2019 = LexmlAcervo("date=2019")

A efetiva consulta à API ocorre pela chamada de um dos métodos a seguir: query ou automatic_pagination. O primeiro é um chamado manual à API passando os parâmetros startRecord e maximumRecordsPerPage que são respectivamente: a posição de início no set de resultados retornado pela API gerado pela query_string, enquanto o segundo faz uso dos mesmos parâmetros realizando um esgotamento da resposta associada a query_string. Portanto, ao se utilizar o método automatic_pagination ele fará a paginação automática de todo o resultado associado à consulta.

6.1 Consulta Manual

#consulta qualquer urn que contenha a palavra decreto
#e que seja de um documento associado ao ano de 2018
urn_decreto_2018 = LexmlAcervo("urn any decreto and date any 2018")
#faz a chamada a API iniciando no primeiro resultado
#e solicita 100 resultados por paginação
tree, start_record_next_query, maximumRecordsPerPage = urn_decreto_2018.query(startRecord=1, maximumRecordsPerPage=100)

6.2 Paginação Automática

#consulta qualquer urn que contenha a palavra decreto
#e que seja de um documento associado ao ano de 2018
urn_decreto_2018 = LexmlAcervo("urn any decreto and date any 2018")
#O método automatic_pagination faz uma chamada recursiva
#atualizando o parâmetro startRecord até o esgotamento da resposta.
urn_decreto_2018.automatic_pagination(startRecord=1, maximumRecordsPerPage=100)

6.3 Salvar resultados em XML

Cada página do set de resultados da query string será armazenado em um arquivo XML distinto. Para realizar a persistência dos resultados deve-se invocar o método saveResults da instância da classe LexmlAcervo. O referido método possui dois parâmetros obrigatórios: path e filename. O primeiro é o diretório onde se deseja salvar os arquivos e o segundo é o nome base dos arquivos.

urn_decreto_2018.saveResults("./data/xml/decreto/2018", "2018")

6.4 Conversão de arquivos XML em JSON

A classe XmlToJson oferece uma interface para converter os arquivos XML em JSON.

year = 2018
#listar os arquivos XML
xmlpath = Path(f"./data/xml/decreto/{year}").glob("*.xml")
#transforma os arquivos XML em JSON
jsonFiles = [XmlToJson(xmlfile).parseToJson() for xmlfile in xmlpath]
#persiste os arquivos em disco.
XmlToJson.saveResults(jsonFiles, f"./data/json/{year}", f"{year}")

py-lexml-acervo's People

Contributors

netoferraz avatar

Stargazers

Jardel Cunha avatar  avatar  avatar Glauber Barcelos avatar Peter Slater avatar Caíque Alexandre avatar Waldeyr Mendes Cordeiro da Silva avatar Ênio Saraiva Leão avatar Ivan avatar Junio Magela avatar Humberto Pereira avatar Telmo Brugnara avatar Vitória de Carvalho Brito  avatar Franz Maikäfer avatar Andre Kutianski avatar  avatar  avatar Francisco Cavalcanti avatar João Ernane Barbosa avatar Luciano Santa Brígida avatar Alexandre Gomes avatar Sérgio Souza Costa avatar Cécil Malone avatar Pedro Vitor Quinta de Castro avatar Reinaldo Chaves avatar Pedro Almeida avatar Augusto Herrmann avatar Ana Paula Gomes avatar Lauro César avatar  avatar Halian Vilela avatar Gabriel Macedo avatar

Watchers

James Cloos avatar Bruno Cabral avatar Valdecir Neumann avatar Halian Vilela avatar Andre Kutianski avatar  avatar Junio Magela avatar Francisco Cavalcanti avatar  avatar

py-lexml-acervo's Issues

Filtrar por URNs legislativas e baixar todos os anos, é possível?

Olá, fiz alguns rápidos experimentos navegando pela sua instância de kaggle. Gostaria de entender melhor os objetivos do py-lexml-acervo, ou talvez entender melhor como fazer "query de download" para aquilo que desejo recuperar.

Baixando por exemplo 1500-1799 obtive um zip com dezenas de zips dentro dele, depois dezenas de pastas.. para no final encontrar um JSON com apenas um item, e que não era de documento legislativo.

[
{"tipoDocumento": "Livro", 
 "facet-tipoDocumento": "Doutrina::Livro", 
 "data": "1556", 
 "urn": "urn:lex:br:rede.virtual.bibliotecas:livro:1556;000104886", 
 "url": "https://www.lexml.gov.br/urn/urn:lex:br:rede.virtual.bibliotecas:livro:1556;000104886",
 "localidade": null, "facet-localidade": null, "autoridade": null, "facet-autoridade": null, 
 "title": "Orationi di m.t. Cicerone di latine fatte italiane", 
 "description": "Sumário:v. 2. Oratione per T. Annio Milone.", 
 "type": "html", 
 "identifier": "008040208"
}
]

Estou supondo que haja como filtrar as URN LEX relativas a documentos legislativos, ou seja, para recuperar metadados de normas (leis, decretos, etc.). Baixando por exemplo 2019 veio um grande JSON e dentro dele pareciam haver normas, mas também haviam projetos de lei.

"Baixar tudo" para mim é interessante pois alimentaria o PostgreSQL, que entende de JSON e me permite redistribuir conforme o modelo de dados desejado (por exemplo uma URN LEX por registro ou agrupando por jurisdição/autoridade).

Que tal solicitarmos o dado original?

Olá, otima iniciava José!

Lembrete e sugestão. A equipe do LeXML parece aberta a nos fornecer todas as suas URNs LEX, até havia antes um endpoint para isso... também podemos solicitar talvez por blocos o JSON de cada "ficha catalográfica" de norma(ilustração abaixo), tendo em vista que já oferecem isso no site, em forma de JSON-LD. Ver maiores detalhes nesta noticia.


{"legislationPassedBy":{
  "@type":"GovernmentOrganization",
  "name":"Congresso Nacional",
  "@id":"https://pt.wikipedia.org/wiki/Congresso_Nacional_do_Brasil"},
  "keywords":"CRIAÇÃO, NORMAS, COMBATE, PREVENÇÃO, VIOLENCIA, AGRESSÃO, MULHER, DETERMINAÇÃO, CRIAÇÃO, JUIZADO ESPECIAL CIVEL, JUIZADO ESPECIAL CRIMINAL, ATENDIMENTO, PROCESSO, JULGAMENTO, EXECUÇÃO JUDICIAL, DEFESA, MULHER, ALTERAÇÃO, DISPOSITIVOS, CODIGO DE PROCESSO PENAL, CORRELAÇÃO, DECRETAÇÃO, PRISÃO PREVENTIVA, GARANTIA, PROTEÇÃO, URGENCIA, DEFESA, MULHER, ALTERAÇÃO, DISPOSITIVOS, CODIGO PENAL, LEI DE EXECUÇÃO PENAL, CORRELAÇÃO, DEFINIÇÃO, PENALIDADE, HIPOTESE, LESÃO CORPORAL, VIOLENCIA, MULHER",
  "@type":"Legislation",
  "legislationIdentifier":"urn:lex:br:federal:lei:2006-08-07;11340",
  "about":[{"@type":"Thing","name":"POLITICA SOCIAL"},{"@type":"Thing","name":"DEFESA"},{"@type":"Thing","name":"MULHER"}],"inLanguage":"pt-BR","description":"CRIA MECANISMOS PARA COIBIR A VIOLENCIA DOMESTICA E FAMILIAR CONTRA A MULHER, NOS TERMOS DO PARAGRAFO 8 DO ARTIGO 226 DA CONSTITUIÇÃO FEDERAL, DA CONVENÇÃO SOBRE ELIMINAÇÃO DE TODAS AS FORMAS DE DISCRIMINAÇÃO CONTRA AS MULHERES E DA CONVENÇÃO INTERAMERICANA PARA PREVENIR, PUNIR E ERRADICAR A VIOLENCIA CONTRA A MULHER, DISPÕE SOBRE A CRIAÇÃO DOS JUIZADOS DE VIOLENCIA DOMESTICA E FAMILIAR CONTRA A MULHER, ALTERA O CODIGO DE PROCESSO PENAL, O CODIGO PENAL E A LEI DE EXECUÇÃO PENAL; E DA OUTRAS PROVIDENCIAS.","legislationChanges":[{"@type":"Legislation","description":"Decreto-Lei nº 2.848 de 07/12/1940 (alteração permanente)","@id":"http://www.lexml.gov.br/urn/urn:lex:br:federal:decreto.lei:1940-12-07;2848"},{"@type":"Legislation","description":"Decreto-Lei nº 3.689 de 03/10/1941 (alteração permanente)","@id":"http://www.lexml.gov.br/urn/urn:lex:br:federal:decreto.lei:1941-10-03;3689"},{"@type":"Legislation","description":"Lei nº 7.210 de 11/07/1984 (alteração permanente)","@id":"http://www.lexml.gov.br/urn/urn:lex:br:federal:lei:1984-07-11;7210"}],"alternateName":["LEI-11340-2006-08-07","LEI MARIA DA PENHA"],"spatialCoverage":{"address":{"addressCountry":"BR","@type":"PostalAddress"},"@type":"Country","name":"Brasil","@id":"https://pt.wikipedia.org/wiki/Brasil"},"encoding":[{"contentUrl":"http://legis.senado.leg.br/legislacao/ListaTextoSigen.action?norma=572125&amp;id=14360229&amp;idBinario=15732035&amp;mime=application/rtf","@type":"LegislationObject","name":"Publicação Original [Lei nº 11.340 de 07/08/2006]  [Diário Oficial da União  de 08/08/2006] (p. 1, col. 1)","legislationLegalValue":"UnofficialLegalValue","@id":"http://legis.senado.leg.br/legislacao/ListaTextoSigen.action?norma=572125&amp;id=14360229&amp;idBinario=15732035&amp;mime=application/rtf","fileFormat":"http://www.iana.org/assignments/media-types/text/html"}],"sdDatePublished":"2020-04-07","sdLicense":"http://creativecommons.org/licenses/by/4.0/","@context":"http://schema.org/","legislationJurisdiction":{"address":{"addressCountry":"BR","@type":"PostalAddress"},"@type":"Country","name":"Brasil","@id":"https://pt.wikipedia.org/wiki/Brasil"},"sdPublisher":{"@type":"GovernmentOrganization","name":"Rede de Informação Legislativa e Jurídica Brasileira","@id":"https://www.lexml.gov.br/"},"datePublished":"2006-08-08","license":"http://creativecommons.org/licenses/by/4.0/","dateCreated":"2006-08-07","legislationDate":"2006-08-07","name":"Lei nº 11.340 de 07/08/2006","legislationType":"https://en.wikipedia.org/wiki/Ordinary_law","@id":"http://www.lexml.gov.br/urn/urn:lex:br:federal:lei:2006-08-07;11340"}

Ordenar registros buscados

Olá, tudo certo? Estou implementando um sistema para buscar os documentos jurídicos do LexML, mas gostaria de poder ordenar os resultados por data. Saberia me dizer como funciona? Tentei procurar na documentação do CQL e do SRU, mas não encontrei algo que funcionasse.

PS.: ótimo projeto este seu!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.