Il software per l'estrazione automatica di riferimenti legislativi e giurisprudenziali da testi in lingua italiana
Il software open-source IGSG Linkoln 3, sviluppato presso l'Istituto di Informatica Giuridica e Sistemi Giudiziari (IGSG) del Consiglio Nazionale delle Ricerche (CNR), consente l'identificazione automatica dei frammenti di testo che rappresentano citazioni ad atti giuridici all'interno di testi scritti in lingua italiana, sia piatti che precedentemente annotati.

public class Test {
public static void main(String[] args) {
System.out.println("\n" + Linkoln.getInfo() + "\n");
String text = "...ai sensi dell'articolo 17, comma 3, della legge 23 agosto 1988, n. 400, su proposta dei Ministri competenti...";
//Crea un oggetto LinkolnDocument a partire da una String
LinkolnDocument linkolnDocument = LinkolnDocumentFactory.createLinkolnDocument(text);
//Altri tipi di input (String o File, InputType ed encoding diversi):
//Carica una String, input piatto arricchito con annotazioni html/xml-like:
//LinkolnDocument linkolnDocument = LinkolnDocumentFactory.createLinkolnDocument(text, InputType.HYBRID_TEXT);
//Crea un oggetto LinkolnDocument a partire da un File, inputType documento HTML con encoding windows-1252:
//LinkolnDocument linkolnDocument = LinkolnDocumentFactory.createLinkolnDocumentFromFile("input.html", InputType.HTML_DOCUMENT, "windows-1252");
//Esegue l'analisi
if( !Linkoln.run(linkolnDocument)) {
System.out.println("Linkoln error - service " + linkolnDocument.getFailure() + " failed.");
} else {
//Se necessario, itera e analizza tutti i riferimenti estratti tramite gli oggetti LinkolnReference
int count = 0;
for(LinkolnReference reference : linkolnDocument.getReferences()) {
count++;
System.out.println("\n\t" + count + ") " + reference + " text=\"" + reference.getText() + "\"");
//Se necessario, itera sugli eventuali identificatori ed URL del riferimento
for(Identifier identifier : reference.getIdentifiers()) {
System.out.println("\t\t" + identifier.getType().toString() + ": " + identifier.getCode() + " URL: " + identifier.getUrl());
}
//Segna alcuni riferimenti come "da ignorare" nelle successive richieste di output, ad esempio:
//Ignora tutti i riferimenti giurisprudenziali...
if(reference.getRefType().equals("caselaw")) reference.skip();
//...eccetto quelli emanati dalla Corte Costituzionale
if(reference.getAuthority() != null && reference.getAuthority().equals("CORTE_COST")) reference.unskip();
//Ignora i riferimenti a Gazzetta Ufficiale
if(reference.getDocType() != null && reference.getDocType().equals("GU")) reference.skip();
}
//Richieste di output (LKN, HTML, JSON, CSV)
//Ignora le annotazioni relative alle segnalazioni (warnings)
//linkolnDocument.skipWarnings(true);
//Ignora i riferimenti per i quali non è stato possibile generare una URL
//linkolnDocument.skipRefsWithoutUrl(true);
//Genera l'output LKN
System.out.println("\n\n OUTPUT-LKN:\n\n" + linkolnDocument.getLinkolnAnnotatedText());
//Configura e genera l'output HTML (vedi HtmlConf.java)
Map htmlConf = new HashMap();
htmlConf.put(HtmlConf.ADD_HEADER, false);
htmlConf.put(HtmlConf.ADD_ARTIFICIAL_SPACES, false);
htmlConf.put(HtmlConf.ADD_BR_TAGS, false);
System.out.println("\n\n OUTPUT-HTML:\n\n" + linkolnDocument.getHtmlAnnotatedText(htmlConf));
//Genera l'output JSON e CSV
System.out.println("\n\n OUTPUT-JSON:\n\n" + linkolnDocument.getJson());
System.out.println("\n\n OUTPUT-CSV:\n\n" + linkolnDocument.getCsv());
System.out.println("\n\nDone.");
}
}
}