Il software per la strutturazione automatica degli atti normativi in lingua italiana
Descrizione
Il software open-source IGSG Marker, sviluppato presso l'Istituto di Informatica Giuridica e Sistemi Giudiziari (IGSG)
del Consiglio Nazionale delle Ricerche (CNR), consente l'analisi strutturale automatica di testi legislativi in lingua italiana non precedentemente annotati. L'output di IGSG Marker consiste in un documento XML composto dal testo originale arricchito con le annotazioni riguardanti la struttura del testo ed alcuni metadati. Lo schema XML utilizzato non segue un vero e proprio standard (nuovo o esistente), ma è orientato all'uso applicativo, di immediata comprensione e allo stesso tempo in grado di catturare tutta l'informazione possibile legata alla struttura presente nel testo originale, compresi alcuni elementi di formattazione, e facilmente trasformabile in altri formati selezionando solo ciò che necessario in funzione dell'applicazione.
Applicazioni
Alcuni esempi di possibili applicazioni ed utilizzi dei documenti XML prodotti con IGSG Marker:
- trasformazione in formato HTML per presentare graficamente il testo normativo evidenziandone la struttura e le partizioni, in maniera più informativa e chiara rispetto al testo originale piatto;
- trasformazione in un altro formato o standard per documenti giuridici per integrazione con altre filiere applicative;
- migrazione di una banca dati di testi legislativi piatti o solo superficialmente strutturati in una di documenti massimamente strutturati;
- qualificazione dei riferimenti legislativi attraverso informazioni di contesto (ad esempio, se sono estratti nel preambolo, nella rubrica di una partizione, se rappresentano citazioni ad atti che vengono modificati dall'atto citante, etc.);
- sfruttamento dell'identificazione di ogni singola porzione di testo in ambiti di Information Retrieval, sia per il recupero degli stessi frammenti di testo sia per pesare diversamente il testo in funzione della sua posizione nel documento in fase di Indexing;
- integrazione in generici ambienti redazionali o in applicazioni per l'acquisizione di testi normativi;
- in generale, rappresenta la base per applicazioni che intendono estrarre ulteriore semantica dai testi normativi o che intendono fare analisi e ragionamenti su di essi (ad es.: applicare automaticamente le modifiche, eseguire il diff strutturale di due versioni dello stesso testo normativo, fare statistiche sulle partizioni, evidenziare errori redazionali come errori nella sequenza delle partizioni o citazioni a partizioni inesistenti, facilitare il calcolo di similarità testuale e concettuale tra singole partizioni di atti normativi diversi, etc.).
Esempi e immagini rilevanti
1. Testo piatto
2. XML-Marker
3. HTML
4. Modifiche
5. Riferimenti
6. Punti di battuta
7. Contesto strutturale
8. XML-Marker + LKN-Ref
9. Tabelle ASCII
10. Tabelle HTML
11. Metadati
Caratteristiche
IGSG Marker:
- può essere utilizzato come strumento di acquisizione di singoli atti legislativi nazionali dal sito di Gazzetta Ufficiale e di atti comunitari dal portale Eur-Lex;
- esegue un pre-processing ad-hoc per i testi di Gazzetta Ufficiale volto a ridurre il rumore e a facilitare il compito dell'analisi, nonchè a sistemare alcuni problemi noti (super partizioni prima dell'intestazione dell'atto, apostrofi al posto degli accenti, etc.);
- riconosce e gestisce la seguente gerarchia di partizioni all'interno dell'articolato: libro, parte, titolo, capo, sezione, articolo, comma;
- riconosce e gestisce le seguenti tipologie di liste, anche nidificate: letterali, numeriche, sotto-numeriche (1.1 1.2 1.3...) e con numeri latini (i ii iii iv...);
- supporta inoltre la partizione paragrafo non numerato, che può risiedere all'interno di un comma, in modo da identificarne i paragrafi, oppure direttamente all'interno di un articolo, per gestire gli atti con articoli con commi non numerati;
- riconosce e gestisce le modifiche strutturali (o virgolette), analizzando anche il loro contenuto;
- riconosce le modifiche di parole, annotando in particolare ciò che viene soppresso, sostituito, inserito ed i punti di battuta (dopo le parole);
- identifica univocamente ogni partizione del testo legislativo (vedi attributo id);
- segmenta il testo originale in documento principale ed allegati;
- analizza eventuali allegati che contengano al loro interno un articolato;
- esegue la trasformazione di eventuali tabelle ASCII in vere e proprie HTML tables;
- oltre al corpo, in cui risiede l'articolato, identifica ed analizza la testa (intestazione e preambolo) e la conclusione del documento legislativo, annotando eventuali elementi caratteristici al loro interno (ad es.: titolo, data e numero del documento, etc.);
- produce un output arricchito da un sistema di segnalazioni (warnings) con riferimenti precisi al testo per la risoluzione di eventuali situazioni ambigue o errori presenti nell'input testuale;
- in caso di errori, permette l'eventuale annotazione manuale di porzioni del testo originale affinchè su queste venga evitata l'analisi;
- include uno schema XSD usato per la validazione del documento XML-Marker prodotto come ulteriore strumento di verifica e segnalazione di problemi;
- include un XSLT ed un CSS per la trasformazione del documento XML-Marker in formato HTML, utile sia come prova della versatilità dell'output sia come ulteriore strumento di debug attraverso la supervisione dei risultati.
Inoltre:
- il documento XML-Marker è compatibile con IGSG Linkoln al fine di integrare il documento stesso con le annotazioni dei riferimenti legislativi in formato lkn:ref o per la presentazione dei riferimenti come hyperlinks HTML;
- IGSG Marker implementa al suo interno numerosi scanner lessicali compilati con JFlex che contribuiscono a mantenere alta l'efficienza dell'analisi, permettendo l'utilizzo del software anche in servizi on-the-fly.
Repository, Web Demo & Download
- Download della libreria Java:
Contatti
Esempio di utilizzo della libreria
public class Test {
public static void main(String[] args) throws IOException {
System.out.println("\n" + Marker.getInfo() + "\n");
String fileName = "2020-76-DL.txt";
MarkerDocument markerDocument = MarkerDocumentFactory.createMarkerDocumentFromFile(fileName,
InputType.PLAIN_GAZZETTA_UFFICIALE);
//Input atto comunitario fonte Eur-Lex con encoding win:
//MarkerDocument markerDocument = MarkerDocumentFactory.createMarkerDocumentFromFile(fileName,
// InputType.PLAIN_EUR_LEX, "windows-1252");
Marker.run(markerDocument);
String xml = markerDocument.getXml();
if(xml != null) Files.write(Paths.get(fileName + ".xml"), xml.getBytes());
String html = markerDocument.getHtml();
if(html != null) Files.write(Paths.get(fileName + ".html"), html.getBytes());
for(String msg : markerDocument.getMessages()) System.out.println("\t - Info: " + msg);
for(String error : markerDocument.getWarnings()) System.out.println("\t - Warning: " + error);
for(String error : markerDocument.getErrors()) System.out.println("\t - Error: " + error);
if( !markerDocument.getValidationError().equals("")) System.out.println("\t - Validation error: "
+ markerDocument.getValidationError());
if( !markerDocument.getNotWellFormattedError().equals(""))
System.out.println("\t - Not well-formatted error: " + markerDocument.getNotWellFormattedError());
}
}