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) MaphtmlConf = 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."); } } }