Sinistra <- Samba 3 come PDC di una rete Windows - Indice Generale - Copertina - Software libero e scacchi -> Destra

PLUTO Ware


Indice analitico della Costituzione italiana effettuato con gli strumenti dell'informatica libera

Indice analitico della Costituzione italiana effettuato con gli strumenti dell'informatica libera

di Alberto Cammozzo 1

L'articolo...

Il sistema GNU/Linux, come il suo predecessore Unix, è ricchissimo di programmi destinati all'elaborazione di testi. Questi, data la vocazione tecnica di Unix/Linux, vengono usati soprattutto per la manipolazione di quella particolare categoria di testi che è il codice informatico, cioè i sorgenti di programmi. Tra codice informatico e codice legale vi sono forti affinità, per scopi, metodi, possibilità di errori e altro. Perciò gli strumenti che vanno bene per l'uno possono andare bene per l'altro. La Costituzione italiana può essere definita il nucleo, il kernel, degli altri codici che regolano (“fanno girare”, più o meno bene) la nostra convivenza civile, e quello in cui più profondi sono i riferimenti alla libertà e ai diritti che tanto cari sono alla comunità del software libero. Va anche detto che il testo della Costituzione è libero da obblighi derivanti dal copyright.
Su questo testo si sono usati gli strumenti in dotazione standard di un sistema GNU/Linux per generarne l'indice analitico (permuted index), prendendo in esame in crescente dettaglio i passi compiuti e i programmi impiegati.



L'indice analitico 2

L'indice analitico riporta il contesto in cui si trova ogni singola parola significativa della Costituzione, ordinato alfabeticamente secondo la parola chiave. Le quasi 2000 parole chiave generano un indice di più di 5700 righe. Il programma per generare l'indice si chiama “ptx” (permuted index) e fa parte delle utility di base di un sistema GNU/Linux.

L'output di ptx è costituito da due colonne:

  1. il numero dell'articolo della costituzione in cui compare il testo (oppure il testo DTF per le disposizioni transitorie).
  2. il testo, limitato alle parole più prossime alla parola chiave, con al centro la parola indicizzata, preceduta da tre spazi. Eventuali troncature della frase verranno rappresentate dal segno “/”.
    Nel caso la parola indicizzata sia all'inizio della frase, questa proseguirà nel lato sinistro, come è visibile nell'esempio qui appresso negli articoli 13 e 15. Analogamente potrà iniziare sul lato destro come ad esempio negli artt. 10, 68 e 111.

Nell'indice analitico della Costituzione alla parola “libertà” si troveranno queste voci:


Art.3.         /, limitando di fatto la   libertà e l' eguaglianza dei/
Art.10.       effettivo esercizio delle   libertà democratiche/      /l'
Art.11.       /strumento di offesa alla   libertà degli altri popoli e/
Art.13.     inviolabile. Non è/      La   libertà personale è
Art.13.        /altra restrizione della   libertà personale, se non/
Art.13.               /a restrizioni di   libertà.  La legge/
Art.14.            /per la tutela della   libertà personale.  Gli/
Art.15.     della/                   La   libertà e la segretezza
Art.33.       /assicurare ad esse piena   libertà e ai loro alunni un/
Art.35.      /del lavoro.  Riconosce la   libertà di emigrazione,/
Art.41.           /alla sicurezza, alla   libertà, alla dignità umana./
Art.68.        altrimenti privato della   libertà personale, o/       /o
Art.111.          i provvedimenti sulla   libertà personale,/    /contro

Di seguito i testi degli artt. 11 e 10:

Art.10. L' ordinamento giuridico italiano si conforma alle norme del diritto internazionale generalmente riconosciute. La condizione giuridica dello straniero è regolata dalla legge in conformità delle norme e dei trattati internazionali. Lo straniero, al quale sia impedito nel suo paese l' effettivo esercizio delle libertà democratiche garantite dalla Costituzione italiana, ha diritto d'asilo nel territorio della Repubblica secondo le condizioni stabilite dalla legge. Non è ammessa l'estradizione dello straniero per reati politici.

Art.11.

L' Italia ripudia la guerra come strumento di offesa alla libertà degli altri popoli e come mezzo di risoluzione delle controversie internazionali; consente, in condizioni di parità con gli altri Stati, alle limitazioni di sovranità necessarie ad un ordinamento che assicuri la pace e la giustizia fra le Nazioni; promuove e favorisce le organizzazioni internazionali rivolte a tale scopo.

Le fasi principali dell'elaborazione

Il testo della Costituzione, così come qualsiasi altro testo adatto alla lettura, va adattato all'elaborazione automatica. Inoltre non tutte le parole sono significative per un indice analitico: lasciando nell'indice parole come “del”, “è”, “che”, il numero delle righe dell'indice raddoppierebbe introducendo più di 5000 righe completamente inutili.

Queste sono le fasi dell'elaborazione del testo originale:

  1. salvataggio in formato testo della Costituzione, prelevata tramite un browser dal sito del Quirinale3.

  2. adattamento manuale del testo: rimozione delle intestazioni, firme, titoli delle parti e simili.

  3. separazione dei singoli articoli delle disposizioni transitorie e finali con il prefisso DTF. Questa operazione è stata compiuta con un editor di testi, quali “EMACS” o “vi”.

  4. Riformattazione automatica del testo in modo che ogni articolo cada su una sola linea di testo, correzione di alcuni errori nella trasposizione dell'apostrofo, separazione delle parole dall'apostrofo che le precede. Queste operazioni sono state effettuate tramite un solo comando composto da 9 elementi, che verranno descritti in dettaglio più avanti.

  5. Estrazione automatica dal testo originale dell'elenco delle parole che lo costituiscono, ed esclusione automatica di quelle costituite da una sola o due lettere. L'operazione va monitorata per reintrodurre eventuali parole importanti che venissero escluse.

  6. Manipolazione manuale dell'elenco appena creato per togliere altre parole indesiderate (dall, dallo, dalle, dello, con, dei, degli, nelle, nei, non, che, ecc.) e per reintrodurre le parole eliminate nella fase precedente che invece si vogliono tenere (ad es. la parola “re”).

  7. Creazione automatica dell'indice analitico basato sull'elenco di parole chiave identificate.

Le elaborazioni automatiche in dettaglio

L'elaborazione è avvenuta su un sistema GNU/Linux Debian. I programmi usati sono stati:

  1. cat4: apre un file e ne propone il contenuto per elaborazioni successive.

  2. l'elemento “|”, detto pipe, ovvero “tubazione”, che raccorda l'output del programma alla propria sinistra con l'input del programma alla propria destra, esattamente come farebbe un pezzo di tubazione idraulica. E' l'elemento che rende possibile la concatenazione di comandi semplici per la costituzione di comandi complessi, detti appunto pipe.

  3. sed5: apporta delle modifiche al proprio input in modo automatico, in particolare consente di effettuare delle sostituzioni di stringhe. Ad esempio può trasformare le stringhe “Costituzione” in “Cost.” Per ottenere questo si scriverà: “sed s/Costituzione/Cost/”. Le due stringhe sono separate dal carattere “/” e il carattere “s” sta per sostituisci.

  4. tr6: traduce un carattere, o un gruppo di caratteri, in altri caratteri. Ad esempio permette di trasformare tutte le minuscole in maiuscole, e viceversa.

  5. grep: estrae dalla pipe le parole che combaciano con un certo schema o pattern. Ad esempio il comando “grep libertà costituzione.txt” estrarrà dal file costituzione.txt tutte le righe che contengono la parola “libertà”.

  6. sort7: ordina in modo alfabetico o numerico il proprio input.

  7. uniq8: elimina le righe duplicate presenti nel proprio input.

  8. ptx9: il vero e proprio programma che crea l'indice permutato, dato un testo in input ed un indice (opzionale) di parole.

Verranno di seguito sommariamente descritti i comandi e la funzione svolta dalle loro parti, rimandando alle pagine di manuale online le descrizioni dettagliate del funzionamento dei comandi10

Il punto 3 della sequenza prevede la riformattazione del testo in modo che:

  1. ogni articolo stia su una sola linea di testo.

  2. vengano corretti alcuni errori nella trasposizione dell'apostrofo.

  3. vengano separate le parole dall'apostrofo che eventualmente le precede.

Il comando per ottenere questo effetto è il seguente11:


	cat costituzione.txt | tr "\n" " "| sed s/Art/@Art/g   \
	| tr "@" "\n" | sed s/^Art.\ /Art./g | tr \? \'        \
	| sed "s/l'/l' /g" | sed "s/L'/L' /g"> costituzione-prep

I vari elementi sono separati tra loro dalla “|”, che li raccorda tra loro. Separando ogni elemento della pipe ed analizzandone la funzione otteniamo:


tr "\n" " " |

Trasforma i caratteri di fine riga (per convenzione \n ) in spazi. In questo modo tutto il testo della costituzione sarà su una sola riga.

sed s/Art/@Art/g |

Trasforma la stringa “Art” in “@Art”. Questa stringa è presente all'inizio di ogni articolo, e si vuole che sia l'inizio di ogni riga.

tr "@" "\n" |

Trasforma il carattere @ nel carattere fine riga, cosicché ogni riga inizi con “Art”.

sed s/^Art.\ /Art./g |

Toglie lo spazio tra “Art.” e il numero dell'articolo, in modo che l'indice porti il riferimento completo dell'articolo.

tr \? \' |

Sostituisce alcuni punti interrogativi che rappresentavano alcuni apostrofi per errore.

sed "s/l'/l' /g" |

Introduce uno spazio tra la stringa e la parola, per consentire che parole come “l'uguaglianza” siano indicizzate come “uguaglianza”

sed "s/L'/L' /g"

Idem per le "elle" maiuscole,

> costituzione-prep

Salva il risultato di tutta l'elaborazione nel file costituzione-prep.

Si veda come da una sequenza di comandi elementari semplici si ottiene una sequenza complessa, grazie all'elemento di raccordo “|”.

Il successivo comando complesso, quello esposto al punto 4, è


	cat costituzione-prep |   tr "[ ']" "\n"  | \
	sed s/[.,:\;]//g |   sort |   uniq |   grep -v "^.$" |     \
	grep -v "^..$" > parole

che, scomposto nei suoi elementi componenti:

  1. immette nel flusso il file costituzione.prep, risultato della precedente operazione.

  2. traduce ogni spazio e ogni apice (“[ ']”) in un fine riga (“\n”).

  3. cancella ogni punteggiatura (i caratteri “.,:;” diventano “”, cioè una stringa vuota).

  4. ordina il risultato ottenuto.

  5. elimina i duplicati.

  6. riversa l'esito della sequenza nel file “parole”.

L'ultimo comando, “ptx”, serve per creare l'indice vero e proprio. Non si basa su pipe e usa il file “parole” nel quale trova l'elenco delle parole-chiave. L'output viene riversato nel file “indice”.


	ptx -fr -o parole costituzione-prep > indice

L'opzione -f serve a elencare di seguito parole che iniziano con la stessa lettera, sia essa maiuscola o minuscola. L'opzione -r serve a creare il riferimento al numero dell'articolo della costituzione, che viene preso dalla prima parola di ogni riga del file costituzione-prep.

Conclusioni

Chiunque necessiti di effettuare un qualche trattamento dei testi (che è cosa ben diversa dalla scrittura dei testi) può avvantaggiarsi con profitto degli strumenti approntati da programmatori di calcolatori, abituati a trattare una forma particolare di testo, il codice sorgente, e a dover (spesso a malincuore) scrivere la documentazione per i loro programmi.

GNU/Linux eredita da Unix la flessibilità di strumenti elementari molto potenti, che possono essere applicati con successo ad ambiti ben diversi da quelli della programmazione, al costo di un modesto sforzo nell'interazione con la tastiera.

Bibliografia

  1. B. Kernighan and R. Pike. The Unix programming environment. Prentice-Hall, 1984

  2. Chiara Paci, Software libero per umanisti, edizioni del Dipartimento di Informatica per Non Informatici dell'Università “Immanuel Kant” della Gianozia Orientale (http://www.gianoziaorientale.it/unikant/dini/sl_umanisti.pdf):

Note

1 Si ringrazia il Dipartimento di Informatica per Non Informatici dell'Università “Immanuel Kant” della Gianozia Orientale (http://www.gianoziaorientale.it) per il fondamentale contributo nella segnalazione delle potenzialità del programma “ptx” in occasione del Linux Day 2005, e per l'innovativa luce gettata sul trattamento dei testi.

2 L'indice analitico completo della Costituzione italiana può essere consultato a questo indirizzo: http://homes.stat.unipd.it/mmzz/Costituzione/IndiceCostituzione.html

3 http://www.quirinale.it/costituzione/costituzione.htm

4 Scritto da Torbjorn Granlund and Richard M. Stallman per la Free Software Foundation, comando originariamente presente anche su Unix.

5 Free Software Foundation, comando originariamente presente anche su Unix.

6 Scritto da Jim Meyering per la Free Software Foundation, comando originariamente presente anche su Unix.

7 Scritto da Mike Haertel and Paul Eggert per la Free Software Foundation, comando originariamente presente anche sul sistema Unix.

8 Scritto da Richard Stallman and David MacKenzie per la Free Software Foundation, comando originariamente presente anche sul sistema Unix.

9 Scritto da F. Pinard per la Free Software Foundation, comando originariamente presente anche sul sistema Unix.

10 Il comando “man sed” presenta il manuale di sed, “man tr” quello di tr, eccetera.

11 Vi sono soluzioni più compatte ed eleganti di questa, usando comandi più complessi. Si veda ad esempio il potentissimo comando “awk”.



L'autore

Alberto Cammozzo lavora presso l'Università di Padova come system manager. Si occupa di retrocomputing con PLUTO ReFUN.


Sinistra <- Samba 3 come PDC di una rete Windows - Indice Generale - Copertina - Software libero e scacchi -> Destra