Skip to content

dataciviclab/italia-corpus

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

231 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Italia Corpus — DataCivicLab

Fork Lab di ahmeabd/italia-corpus. Corpus della legislazione italiana in Markdown da Normattiva, con tooling per estrazione metadati e ricerca full-text via MCP.

Collezioni

Il fork Lab mantiene solo le collezioni di attualità normativa (~25.000 file, ~1.2 GB):

DL e leggi di conversione · Decreti Legislativi · Leggi di ratifica · Regolamenti ministeriali · Regolamenti governativi · DPCM · Atti di recepimento direttive UE · Atti di attuazione Regolamenti UE · DL decaduti · DL proroghe · Decreti legislativi luogotenenziali · Leggi delega e relativi provvedimenti delegati · Leggi costituzionali · Leggi finanziarie e di bilancio · Leggi contenenti deleghe · Regolamenti di delegificazione · Regi decreti legislativi · Testi Unici · Codici

(Il full corpus upstream ha 288.000+ file, il 90% dei quali è legislazione storica: atti abrogati, regi decreti, DPR.)

Tooling Lab

MCP server (lab_tools/mcp_server.py)

Tre tool per agenti AI:

  • italia-corpus_legal_search(query, limit=10, offset=0, collezione="") — cerca nel corpus e restituisce lista strutturata di risultati (list[dict] con title, collection, filename, path, snippet, match_count).

    • Query multi-parola fa AND documentale tra i termini (es. "ambiente energia" trova atti che contengono entrambi).
    • Usa virgolette "decreto legislativo" per frase esatta.
    • offset per paginazione, limit fino a 100.
    • collezione opzionale per limitare a una directory.
  • italia-corpus_legal_get_document(collezione, filename, max_chars=5000) — recupera il testo completo di un atto. Protegge da path traversal (solo basename .md, verifica risoluzione path).

  • italia-corpus_list_collections() — elenca le 20 collezioni disponibili.

Estrattore metadati (lab_tools/extract.py)

Parsa tutti i file Markdown delle 20 collezioni ed estrae: tipo atto, data, numero, oggetto, URN, codice redazionale, vigente, CELEX (costruito dal riferimento UE nell'oggetto), anno direttiva e ritardo di recepimento.

Output: data/derived/normativa.parquet (20.708 atti, 755 con CELEX).

pip install -e ".[dev]"
python -m lab_tools.extract

Grafo riferimenti (lab_tools/grafo_riferimenti.py)

Costruisce il grafo orientato dei riferimenti normativi: estrae tutti i link ../ dai body degli atti e produce archi "fonte → bersaglio" con metadati (anno, collezione, tipo). Richiede normativa.parquet per l'arricchimento.

Output: data/derived/riferimenti.parquet (108.490 archi, 10 colonne).

Metrica Valore
Archi totali 108.490
Risolvibili (file nel fork) 70.589 (65,1%)
Atti citati unici 9.095
Più citato Codice Penale (7.815x)
python -m lab_tools.grafo_riferimenti

CI / Workflow

Workflow Trigger Cosa fa
test.yml push / PR pytest tests/ -v
build-dataset.yml workflow_dispatch test → extract + grafo riferimenti → commit parquet
sync-upstream.yml daily 7:00 + manuale sparse clone upstream → rsync collezioni → commit → trigger build-dataset

Schema dataset

Colonna Tipo Descrizione
collezione str Collezione d'origine (separatore ; se multi-collezione)
filename str Nome file .md
tipo str DECRETO LEGISLATIVO, LEGGE, DECRETO-LEGGE, DPR, DPCM, ecc.
data str Data atto (ISO)
numero str Numero atto
oggetto str Oggetto / titolo
celex str CELEX costruito dal riferimento UE nell'oggetto (es. 32019L0944)
anno_atto int Anno di pubblicazione
anno_dir int Anno della direttiva/regolamento/decisione UE collegato (0 se assente)
ritardo float Gap anni tra atto e atto UE (solo se anno_dir > 0)
vigente bool True se l'atto risulta vigente secondo Normattiva
urn str URN Normattiva (es. urn:nir:stato:decreto.legislativo:2021-11-08;207)
codice_redazionale str Codice redazionale Normattiva (es. 21G00230)
lunghezza_caratteri int Numero di caratteri del body (dopo frontmatter YAML)
lunghezza_parole int Numero di parole del body
riferimenti_interni int Conteggio link ../ ad altri atti del corpus (proxy di connessione)

Schema riferimenti.parquet

Colonna Tipo Descrizione
fonte_filename str Path relativo atto citante
fonte_collezione str Collezione atto citante
fonte_anno int Anno atto citante
fonte_tipo str Tipo atto citante (es. DECRETO LEGISLATIVO)
bersaglio_filename str Nome file atto citato
bersaglio_path str Path relativo atto citato (vuoto se non risolvibile)
risolto bool True se il bersaglio esiste nel corpus
bersaglio_collezione str Collezione atto citato
bersaglio_anno int Anno atto citato
bersaglio_tipo str Tipo atto citato
peso int Numero occorrenze dello stesso link nel body

Manutenzione

  • Il sync upstream è automatico ogni giorno alle 7:00. Clona upstream con --depth 1 --filter=blob:none e solo le 20 collezioni vive (sparse checkout), poi rsync --delete per specchiare le directory. Zero merge, zero conflitti.
  • Dopo ogni sync, build-dataset rigenera automaticamente il parquet (solo se ci sono modifiche).
  • Il dataset è committato su main (data/derived/normativa.parquet).

Fork info

About

Fork Lab di ahmeabd/italia-corpus. Corpus della legislazione italiana in Markdown da Normattiva, con tooling per estrazione metadati e ricerca full-text via MCP.

Resources

License

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Jupyter Notebook 57.4%
  • Python 42.5%
  • Makefile 0.1%