Skip to content

Navigation Menu

Sign in
Sign up

Repository files navigation

normasbr

MIT licensed Python 3.12 Ruff CI PyPi Latest Release Downloads readthedocs Python

⚠️ ATENÇÃO ⚠️: Biblioteca ainda em estágio muito experimental, e sem garantias de retrocompatibilidade entre as versões.

normasbr é uma biblioteca Python que extrai, segmenta e estrutura normativas brasileiras (leis, decretos, portarias, instruções normativas, etc.) a partir de HTML, PDF, DOCX ou TXT, convertendo textos brutos em documentos estruturados (YML), com a hierarquia completa de dispositivos (norma > agrupadores > artigos > incisos > alíneas > itens).

O processamento é determinístico, usando heurísticas e expressões regulares baseadas em documentos normativos diversos. A normativa estruturada permite uso facilitado nas mais diversas análises, como classificação e agrupamento de dispositivos, uso em sistemas de busca e RAGs e análise textual de normas.

Pipeline

ingerir -> segmentar -> estruturar
  1. Ingestão: normaliza HTML/PDF/DOCX/TXT para um HTML canônico;
  2. Segmentação: extrai blocos de texto e classifica cada segmento (artigo, parágrafo, inciso, ementa, preâmbulo, bloco de alteração etc.);
  3. Estruturação: monta a árvore hierárquica da normativa a partir dos segmentos;

Exemplo de resultado da estruturação:

- classe: norma
 nome: LEI COMPLEMENTAR No 210, DE 25 DE NOVEMBRO DE 2024
 origem: data/novas/lei-complementar-210-2024.html
 ementa:
 - classe: ementa
 efetivo: true
 texto:
 Dispõe sobre a proposição e a execução de emendas parlamentares na lei
 orçamentária anual; e dá outras providências.
 preambulo:
 "O PRESIDENTE DA REPÚBLICA Faço saber que o Congresso Nacional decreta
 e eu sanciono a seguinte Lei Complementar:"
 filhos:
 - classe: agrupador
 tipo: capitulo
 id: CAPÍTULO I
 efetivo: true
 texto: DO OBJETO
 filhos:
 - classe: dispositivo
 tipo: artigo
 id: "1"
 efetivo: true
 texto:
 Art. 1o A proposição e a execução das emendas parlamentares à despesa,
 no âmbito da lei orçamentária anual da União, observarão o disposto nesta
 Lei Complementar, nos termos dos incisos I e III do § 9o do art. 165 da Constituição
 Federal.
 links:
 - texto: incisos I
 url: ../../Constituicao/Constituicao.htm#art165§9i
 - texto: III do § 9o do art. 165 da Constituição Federal.
 url: ../../Constituicao/Constituicao.htm#art165§9iii.0
 filhos:
 - classe: dispositivo
 tipo: paragrafo
 id: unico
 efetivo: true
 texto:
 Parágrafo único. O regramento disposto nesta Lei Complementar é imperativo
 para as leis orçamentárias previstas na Constituição Federal, bem como para
 a interpretação e a aplicação dos demais instrumentos normativos sobre a
 temática.

Instalação

A última versão pode ser instalada com o uv:

uv add normasbr # Usando como biblioteca
uv tool install normasbr # Usando como utilitário de linha de comando

Ou diretamente do repositório:

uv pip install git+https://github.com/ipea/normasbr

Exemplo de uso

Biblioteca:

import normasbr
for bruta in normasbr.despachar_ingestao("data/DEL5452.htm"):
 segmentos = normasbr.Segmentador().segmentar(normasbr.extrair_blocos(bruta))
 normas = normasbr.estruturar(segmentos, leniente=True)
print(normasbr.formatar_normativas_yml(normas))

CLI:

normasbr ingerir data/DEL5452.htm
normasbr segmentar data/docs
normasbr estruturar data/docs -o normas.yml
normasbr diff_seg snapshot.jsonl novo.jsonl
normasbr classificar_macrodim normas.yml saida.parquet

Ideias futuras

  • Documentação da biblioteca;
  • Simplificação de uso dos componentes da biblioteca;
  • Melhorias nos tratamentos de preâmbulo e ementa;
  • Melhorias no utilitário de classificação de normativas (ex: uso de cache e remoção da dependência do DuckDB);
  • Rearquitetura das heurísticas para maior legibilidade e mantenabilidade;
  • Reescrita dos trechos feitos por LLM;
  • Criação de uma heurística para identificar anomalias e pontual a qualidade da estruturação;
  • Melhorar identificação de normas sem efeito;
  • Extração de normas dentro de anexos;
  • Snapshot testing com um corpus diverso de normas;
  • Identificação de referências;
  • Ids/Hashes estruturais;

Desenvolvimento

make setup # cria o venv e instala as dependências
make check # lint (ruff) + testes (pytest)
make format # formata o código

Referências usadas na modelagem

Nota Ipea

normasbr é desenvolvido por uma equipe de pesquisadores do Instituto de Pesquisa Econômica Aplicada (Ipea).

About

Limpeza e estruturação de textos normativos brasileiros a partir de diversos formatos de arquivos

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

AltStyle によって変換されたページ (->オリジナル) /