⚠️ 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.
ingerir -> segmentar -> estruturar
- Ingestão: normaliza HTML/PDF/DOCX/TXT para um HTML canônico;
- Segmentação: extrai blocos de texto e classifica cada segmento (artigo, parágrafo, inciso, ementa, preâmbulo, bloco de alteração etc.);
- Estruturação: monta a árvore hierárquica da normativa a partir dos segmentos;
Exemplo de resultado da estruturação:
- classe: norma
nome: LEI COMPLEMENTAR Nº 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. 1º 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 § 9º do art. 165 da Constituição
Federal.
links:
- texto: incisos I
url: ../../Constituicao/Constituicao.htm#art165§9i
- texto: III do § 9º 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.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 comandoOu diretamente do repositório:
uv pip install git+https://github.com/ipea/normasbrimport 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))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- 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;
make setup # cria o venv e instala as dependências
make check # lint (ruff) + testes (pytest)
make format # formata o códigonormasbr é desenvolvido por uma equipe de pesquisadores do Instituto de Pesquisa Econômica Aplicada (Ipea).
