caricato da Utente20396

TESTOE~1

annuncio pubblicitario
UNIVERSITÀ
/ 664
LINGUISTICA
I lettori che desiderano
informazioni sui volumi
pubblicati dalla casa editrice
possono rivolgersi direttamente a:
Carocci editore
via Sardegna 50,
00187 Roma,
telefono 06 42 81 84 17,
fax 06 42 74 79 31
Visitateci sul nostro sito Internet:
http://www.carocci.it
Alessandro Lenci
Simonetta Montemagni
Vito Pirrelli
Testo e computer
Elementi di linguistica computazionale
Carocci editore
Ad Andrea, Francesco e Rachele
1a edizione, maggio 2005
© copyright 2005 by Carocci editore S.p.A., Roma
Finito di stampare nel maggio 2005
per i tipi delle Arti Grafiche Editoriali Srl, Urbino
ISBN
88-430-3425-1
Riproduzione vietata ai sensi di legge
(art. 171 della legge 22 aprile 1941, n. 633)
Senza regolare autorizzazione,
è vietato riprodurre questo volume
anche parzialmente e con qualsiasi mezzo,
compresa la fotocopia, anche per uso interno
o didattico.
Indice
Introduzione
000
Linguaggio e computer
La linguistica computazionale tra ieri e oggi
Di cosa parla questo libro
000
000
000
Parte prima
Il dato testuale e la sua rappresentazione
1.
I dati della lingua
000
1.1.
Le fonti dei dati linguistici
000
1.1.1. Dati “ecologici” e dati controllati
1.2.
I corpora
000
1.2.1. Tipi di corpora
1.3.
Il corpus come campione
000
1.3.1. Rappresentatività e variabilità / 1.3.2. Corpora bilanciati
1.4.
I corpora in
LC:
istruzioni per l’uso
000
1.4.1. I limiti della rappresentatività / 1.4.2. Il corpus come benchmark / 1.4.3. I corpora specialistici / 1.4.4. Corpora di addestramento /
1.4.5. Usare il web come corpus
1.5.
Considerazioni conclusive
Per saperne di più
000
000
2.
Il testo e la sua codifica digitale
000
2.1.
2.2.
La codifica digitale del testo: il problema
Livelli di codifica
000
000
7
TESTO E COMPUTER
2.3.
La codifica di livello zero
2.3.1. Il set di caratteri
2.4.
ASCII
000
/ 2.3.2. Il set di caratteri Unicode
La codifica di alto livello: perché, cosa, come
000
2.4.1. Perché codificare / 2.4.2. Cosa codificare / 2.4.3. Come codificare
2.5.
Considerazioni conclusive
Per saperne di più
000
000
3.
Costruire un linguaggio di marcatura
000
3.1.
3.2.
XML: principi di base
I componenti della marcatura
000
000
XML
3.2.1. Elementi / 3.2.2. Attributi / 3.2.3. Riferimenti a carattere e a
entità / 3.2.4. Commenti
3.3.
La definizione del tipo di documento (DTD)
000
3.3.1. La dichiarazione di un elemento / 3.3.2. La dichiarazione di un
attributo / 3.3.3. La dichiarazione di un’entità
3.4.
3.5.
3.6.
Struttura e validazione di un documento XML
La codifica del testo in formato XML: un esempio
Standard e codifica del testo
000
000
000
3.6.1. Iniziative internazionali di standardizzazione della codifica del
testo / 3.6.2. Lo schema di codifica XCES
3.7.
Considerazioni conclusive
Per saperne di più
000
000
Parte seconda
Metodi e tecniche di analisi testuale
4.
Dal bit alla parola
000
4.1.
La “tokenizzazione” del testo
000
4.1.1. I criteri per la tokenizzazione
4.2.
Le espressioni regolari
000
4.2.1. La sintassi delle espressioni regolari
4.3.
Analizzare il linguaggio con le espressioni regolari
Per saperne di più
8
000
000
INDICE
5.
Parole e numeri
000
5.1.
5.2.
5.3.
Popolazione e testo
Parole unità e parole tipo
Frequenze e distribuzioni
000
000
000
5.3.1. La media aritmetica / 5.3.2. La deviazione standard /
5.3.3. Leggere le distribuzioni
5.4.
Il vocabolario di un testo
000
5.4.1. Rapporto tipo/unità / 5.4.2. Parole grammaticali e parole piene
5.5.
La legge di Zipf
000
5.5.1. La famiglia Zipf
5.6.
La dinamica del vocabolario
000
5.6.1. La crescita di V / 5.6.2. La frequenza media
5.7.
Medie e inferenza statistica
Per saperne di più
000
000
6.
Probabilità ed entropia
000
6.1.
Il concetto di probabilità
000
6.1.1. Spazio campionario e distribuzione di probabilità / 6.1.2. Eventi congiunti / 6.1.3. Probabilità e frequenza
6.2.
Lingua e probabilità
000
6.2.1. Modelli stocastici / 6.2.2. Modelli linguistici stocastici
6.3.
Modelli markoviani
000
6.3.1. Il modello base: l’urna lessicale / 6.3.2. Probabilità condizionate e catene markoviane del primo ordine / 6.3.3. Oltre le catene del
primo ordine
6.4.
Linguaggio ed entropia
000
6.4.1. Vocabolario ed entropia / 6.4.2. Testo ed entropia
6.5.
Considerazioni conclusive
Per saperne di più
000
000
Parte terza
Esplorazione e annotazione del testo
7.
Esplorare il testo
000
7.1.
7.2.
Modi di esplorazione
Le parole e il loro habitat: le concordanze
000
000
7.2.1. Tipi di concordanze
9
TESTO E COMPUTER
7.3.
Funzioni di ricerca avanzate
000
7.3.1. Problemi e soluzioni
7.4.
Collocazioni
000
7.4.1. Alla ricerca di collocazioni
7.5.
Conclusioni
Per saperne di più
000
000
8.
L’annotazione linguistica del testo
000
8.1.
Livelli di annotazione
000
8.1.1. Annotazione morfo-sintattica / 8.1.2. Annotazione sintattica /
8.1.3. Annotazione semantica / 8.1.4. Annotazione pragmatica
8.2.
8.3.
Corpora annotati
“Anatomia” di uno schema di annotazione
000
000
8.3.1. Annotazione e informazione categoriale / 8.3.2. Annotazione e
informazione strutturale / 8.3.3. Annotazione e informazione relazionale / 8.3.4. Tipi di informazione di base e schemi di annotazione
8.4.
Tipi di informazione e rappresentazione
XML
000
8.4.1. Rappresentazione XML di informazione categoriale / 8.4.2. Rappresentazione XML di informazione strutturale / 8.4.3. Rappresentazione XML di informazione relazionale
8.5.
8.6.
8.7.
Annotazione stand-off
Standard e annotazione linguistica
Per concludere
Per saperne di più
000
000
000
000
9.
Verso il trattamento automatico della lingua
000
9.1.
9.2.
9.3.
Insegnare la lingua al computer
Un esempio: la morfologia
Alcune conclusioni (in forma di introduzione)
000
000
000
Bibliografia
000
10
Introduzione
Linguaggio e computer
Il linguaggio umano (o linguaggio naturale) è lo strumento primario
più immediato e duttile di cui disponiamo per creare e comunicare
contenuti complessi sempre nuovi. Negli ultimi decenni, il computer
si è imposto come la “macchina intelligente” per eccellenza, capace
di memorizzare ed elaborare quantità enormi di dati strutturati e di
renderli disponibili come informazioni. Ciononostante, le sue capacità
“comunicative” sono rimaste sorprendentemente rudimentali, sostanzialmente affidate alla mediazione di strutture logiche predefinite,
menu preconfezionati e linguaggi artificiali più o meno ad hoc. L’obiettivo centrale della linguistica computazionale (LC) è quello di sviluppare modelli computazionali della lingua, cioè modelli del funzionamento del linguaggio naturale che possano essere tradotti in programmi eseguibili dal calcolatore e che consentano a quest’ultimo di
acquisire le competenze necessarie per comunicare direttamente nella
nostra lingua.
Allo stato attuale delle nostre conoscenze, questo obiettivo può
essere perseguito a più livelli di astrazione. Immaginiamo di pronunciare una richiesta di informazioni davanti a un microfono collegato
al riconoscitore vocale di un computer. In prima battuta, possiamo ottenere in risposta la trascrizione ortografica automatica delle parole
da noi pronunciate. A un secondo livello, il computer potrebbe analizzare il contenuto della richiesta trascritta, associandolo a una rappresentazione semantica appropriata. Un calcolatore ancora più “evoluto” potrebbe rendere disponibili le informazioni oggetto della richiesta, dopo averle reperite da una fonte di dati accessibile, e così
via. Ciascuno di questi compiti richiede l’acquisizione di competenze
molto specifiche, da tradurre in tecnologie linguistiche accessibili al
calcolatore. È chiaro, tuttavia, che la capacità di comunicare con
l’ambiente esterno in modo intelligente passa attraverso l’integrazione
11
TESTO E COMPUTER
di queste tecnologie in sistemi funzionalmente complessi, in grado di
interpretare l’informazione in ingresso, elaborarla e rispondere con altra informazione pertinente. Sono sistemi con queste caratteristiche
che si nascondono dietro un risponditore automatico, un traduttore
automatico o un classificatore di pagine web. In un futuro non troppo
lontano, potremmo sorprenderci a interagire con una macchina intelligente che percepisce e ragiona sulla realtà come un essere umano!
Il livello di astrazione appropriato, gli obiettivi intermedi di ricerca, i metodi e i modelli di spiegazione della LC possono variare a seconda del punto di vista particolare da cui guardiamo al rapporto tra
linguaggio e calcolatore. Ad esempio, possiamo chiederci cosa il linguaggio naturale può fare per il computer. In che misura le attuali potenzialità dei computer possono essere migliorate ed estese dotando
queste macchine di capacità linguistiche evolute? Viviamo, infatti, in
quella che è stata spesso definita come la società della conoscenza,
dove studenti, professionisti e comuni cittadini si trovano nella necessità quotidiana di recuperare, selezionare e gestire grandi quantità
di informazioni contenute nelle miriadi di testi disponibili sul web,
nelle biblioteche digitali o sui computer di casa o di lavoro. La facilità di accesso a queste informazioni e la capacità di distinguere le parti rilevanti da quelle inutili sono condizioni essenziali per garantire
che si realizzino in pieno le potenzialità della rivoluzione informatica
in corso. In questa prospettiva, la LC promette di espandere enormemente le capacità del computer, rendendolo capace di comprendere
la struttura e il contenuto dei nostri testi e di interagire col mondo
esterno con la naturalezza e l’immediatezza del linguaggio naturale.
È possibile però rovesciare il rapporto tra computer e linguaggio
umano e chiederci cosa il primo può fare per il secondo: ovvero, in che
modo il computer possa essere messo al servizio dell’indagine linguistica. A differenza della precedente, questa è una prospettiva squisitamente legata alla linguistica e alle scienze umane, il cui obiettivo finale
è una migliore comprensione del modo in cui il linguaggio funziona e
si rapporta alle altre facoltà cognitive. Da questo punto di vista, il
ruolo dei metodi matematici e informatici è di contribuire a definire
modelli che spieghino proprietà e problemi linguistici interessanti. Le
domande che si pone il linguista computazionale sono dunque le stesse del linguista tradizionale: come funziona il linguaggio, come viene
appreso, come cambia ecc., e la dimensione innovativa è data dal
modo in cui il computer aiuta lo studioso a impostare questi problemi
e a verificarne le soluzioni.
Distinguere queste due prospettive non significa però vederle in
maniera indipendente o antagonistica. La ricerca linguistica degli ulti12
INTRODUZIONE
mi decenni ha consentito lo sviluppo di programmi applicativi che
permettono una migliore gestione dell’informazione, proprio grazie a
una più profonda comprensione del linguaggio. Allo stesso modo,
metodi matematici e informatici nati e sviluppati per scopi autonomi
si sono spesso rivelati assai utili per innovare le metodologie di rappresentazione e le analisi linguistiche. Le due direzioni nel rapporto
tra linguaggio e computer sono dunque profondamente compenetrate
e in osmosi continua. La LC è, infatti, un ambito di ricerca e di lavoro tipicamente interdisciplinare. Da un lato, essa si intreccia con l’informatica, sia teorica che applicata, e con l’ingegneria, come testimonia l’uso del termine ingegneria delle lingue (o del linguaggio, inglese natural language engineering) per qualificare le attività rivolte allo
sviluppo di applicazioni informatiche basate sulle tecnologie del linguaggio. Dall’altro lato, invece, la LC dialoga con la linguistica, le
scienze cognitive, la psicologia, la filosofia e le scienze umane in generale, con le quali condivide l’obiettivo di indagare la struttura, il funzionamento e l’uso del linguaggio e il suo rapporto con le altre facoltà
cognitive dell’uomo. In conseguenza di questo carattere interdisciplinare, linguisti, informatici, ingegneri, logici e umanisti, ma anche neuro-fisiologi, bio-ingegneri e filosofi della mente si trovano sempre più
spesso a lavorare insieme su temi comuni di ricerca. Il linguista computazionale “ideale” dovrebbe essere in grado di riassumere in sé in
maniera equilibrata le caratteristiche più salienti di tutte queste anime. Naturalmente, a seconda dell’obiettivo – più o meno applicativo – della ricerca, il peso relativo di ciascun tipo di competenza può
cambiare. Il successo finale, tuttavia, dipende dalla profondità della
loro interazione.
Alla luce di queste considerazioni, è nostro convincimento che
non solo una sintesi tra le varie anime della LC è possibile, ma anche
strettamente necessaria. Troppo spesso, invece, assistiamo a scollamenti in entrambe le direzioni. In alcuni casi, l’ingegneria delle lingue
tende a procedere in maniera indipendente dalla ricerca linguistica,
sulla spinta di esigenze di competizione tecnologica e di mercato. Viceversa, non di rado il computer è visto come un semplice strumento
per potenziare il modo tradizionale di fare ricerca sul linguaggio. In
realtà, la LC è anche un modo nuovo di guardare al linguaggio, di
studiarne la struttura e l’uso, di ripensarne l’organizzazione e le dinamiche. Come in tutte le innovazioni tecnologiche, l’applicazione del
computer al linguaggio sta progressivamente mutando il modo in cui
immaginiamo, conosciamo e usiamo quest’ultimo. Al tempo stesso, la
complessità del fenomeno è tale che lo sviluppo di applicazioni informatiche dotate di intelligenza linguistica non può prescindere dai
13
TESTO E COMPUTER
problemi che l’organizzazione e il funzionamento del linguaggio
pongono.
La linguistica computazionale tra ieri e oggi
È agli inizi della seconda metà del Novecento che può essere ricondotta la nascita della LC come disciplina di frontiera sia rispetto al
mondo umanistico, che rispetto alle applicazioni più centrali delle
scienze dell’informazione che stavano sviluppandosi in quegli stessi
anni. Le sue radici affondano in due distinti paradigmi di ricerca. Da
un lato, gli anni cinquanta e sessanta vedono le prime applicazioni
del calcolatore allo studio dei testi filosofici e letterari, con il lavoro
pionieristico di padre Roberto Busa S. J. che, presso il Centro per
l’automazione dell’analisi linguistica di Gallarate, realizza il primo
corpus elettronico delle opere di Tommaso D’Aquino (circa 10 milioni di parole, una cifra enorme per le capacità dei computer del
tempo) e un programma per la loro esplorazione attraverso concordanze (cfr. PAR. 7.2). Lo sviluppo di programmi per lo spoglio elettronico dei testi, il calcolo della frequenza delle parole, la compilazione di indici e concordanze, la creazione di repertori lessicali elettronici (i cosiddetti dizionari macchina) sono tra i primi risultati della
disciplina.
Il secondo paradigma di riferimento è rappresentato invece dall’applicazione di metodi formali all’analisi del linguaggio. Il 1957, data
di nascita della grammatica generativa e della “rivoluzione linguistica”
di Noam Chomsky con la pubblicazione di Syntactic Structures, segna
anche l’inizio di un’intensa attività di indagine, con l’ausilio di grammatiche formali, sulle proprietà del linguaggio naturale. A sua volta,
questo lavoro è profondamente intrecciato con le ricerche coeve nel
settore dell’Intelligenza Artificiale (IA). È all’interno di questa tradizione che si sviluppa il settore del Natural Language Processing (NLP)
o Trattamento Automatico del Linguaggio Naturale (TAL), con i primi programmi per l’analisi sintattica e l’interpretazione semantica automatica, e applicazioni ormai classiche come la traduzione automatica
e le cosiddette interfacce uomo-macchina in linguaggio naturale.
Nei suoi primi decenni (anni sessanta e settanta), il TAL è stato
fortemente influenzato dalla metodologia razionalista e simbolica allora dominante in IA e condivisa dalla linguistica generativa. Ciò ha significato essenzialmente il predominio di metodi logico-deduttivi e algebrici, a discapito di quelli induttivi e statistico-matematici. Il modello più influente della conoscenza umana, in questa fase, è quello
di un sistema di regole per la manipolazione di strutture di simboli.
14
INTRODUZIONE
Nel caso del linguaggio, queste regole riguardano la conoscenza che i
parlanti hanno di una lingua, e che determina la loro possibilità di
giudicare se una certa frase è grammaticalmente corretta. Nella prospettiva chomskiana, infatti, fondamentale è la distinzione tra competenza ed esecuzione, ovvero tra la conoscenza del linguaggio che hanno i parlanti e l’uso che di essa fanno nelle situazioni comunicative
concrete, per comprendere una frase o descrivere un evento. Le informazioni quantitative, secondo Chomsky, non hanno nessun ruolo
nello studio della competenza: questa consiste infatti in un sistema di
regole strutturate e formulate in modo del tutto indipendente dall’uso. La distribuzione statistica delle costruzioni linguistiche è al più
rilevante nella sfera dell’esecuzione, e resta quindi esclusa dall’ambito
di indagine proprio della grammatica generativa. Come conseguenza
diretta di questo approccio epistemologico, sviluppare un modello
computazionale del linguaggio ha voluto dire per lungo tempo scrivere sistemi di regole linguistiche interpretabili dal calcolatore. La mancanza di attenzione verso i problemi dell’uso linguistico ha portato, in
molti casi, alla creazione di modelli giocattolo (toy models), ovvero applicazioni che, seppure in grado di analizzare alcune costruzioni linguistiche non banali, non si sono dimostrate capaci, anche a causa dei
limiti tecnologici dell’epoca, di uscire dai laboratori e operare in contesti reali, con vocabolari di alcune migliaia di parole e su frasi di
lunghezza media.
Parallelamente al diffondersi della grammatica generativa, ha continuato a svilupparsi, soprattutto in area anglosassone, una tradizione
di ricerca linguistica ancorata a una metodologia di derivazione empirista, che fonda l’indagine linguistica sulla raccolta e l’analisi di corpora (cfr. CAP. 1), ovvero raccolte di grandi quantità di testi appartenenti a una certa varietà del linguaggio. La linguistica dei corpora (corpus linguistics) fa largo uso di strumenti di analisi quantitativa e statistica per esplorare le regolarità linguistiche che emergono dai testi e
che vengono a costituire la base per la descrizione della struttura del
linguaggio. A differenza della grammatica generativa, la descrizione
del linguaggio è giudicata inseparabile dall’analisi del suo uso. I metodi pionieristici di indagine quantitativa, originariamente applicati all’analisi dei testi letterari, sono stati dunque rapidamente estesi a testi
di linguaggio comune, come corpora di giornali, trascrizioni di parlato ecc. Questo tipo di indagine ha fortemente beneficiato della capacità dei computer di gestire ed elaborare quantità di dati sempre più
estese. Nel 1964 compare il Brown Corpus (lungo circa 1 milione di
parole), realizzato da W. Nelson Francis e Henry Kucera alla Brown
University negli Stati Uniti. Questo è il primo corpus elettronico pro15
TESTO E COMPUTER
gettato e costruito per lo studio di una particolare varietà linguistica
contemporanea, nel caso specifico l’inglese americano degli anni sessanta. Uno dei risultati di questa linea di ricerca è stato quello di favorire l’applicazione al linguaggio di una serie di metodi statistici tuttora fondamentali in LC (cfr. CAPP. 5 e 6).
Per molti anni, la LC di ispirazione razionalista e quella di tradizione empirista hanno proceduto in maniera parallela, con pochi e
sporadici contatti. Il superamento di tale dicotomia è stato reso possibile grazie al radicale mutamento di paradigma avvenuto nella LC a
partire dalla seconda metà degli anni ottanta, caratterizzato dal diffondersi e poi dal netto prevalere di un approccio neoempirista al
TAL. Questo cambiamento si è concretizzato nella diffusione dei metodi statistico-quantitativi e nella rinnovata centralità dei dati testuali
come base essenziale per l’esplorazione del linguaggio. La dimensione
dei corpora è andata sempre più crescendo, e la loro disponibilità è
diventata una variabile fondamentale in ogni fase di sviluppo e valutazione degli strumenti per il TAL. Al tempo stesso, la crescita del
web, con la sua grande quantità di materiale testuale multiforme e in
continua evoluzione, ha reso necessario lo sviluppo di tecnologie linguistiche in grado di confrontarsi non più con esempi da laboratorio,
ma con testi reali. Questo ha a sua volta contribuito al diffondersi di
tecniche di elaborazione linguistica più “robuste” di quelle simboliche tradizionali, tecniche in grado di affrontare la variabilità lessicale
e strutturale dei testi, e la continua violazione delle regole che ha luogo in molte manifestazioni dell’uso linguistico: prima fra tutte, la lingua parlata.
La crescente disponibilità di corpora testuali ha indubbiamente
facilitato l’innovazione metodologica in LC, fornendo i dati linguistici
necessari per un uso intensivo dei metodi statistici. L’emergere di linguaggi standard di marcatura del testo come XML (cfr. CAPP. 2 e 3),
inoltre, ha migliorato il processo di creazione, uso e interscambio dei
corpora. Al tempo stesso, ha reso possibile l’annotazione linguistica
del testo su ampia scala, che consente di rappresentare in maniera
esplicita e dettagliata la struttura e l’organizzazione linguistica del testo stesso (cfr. CAPP. 3 e 8), offrendo l’occasione per una riflessione
rigorosa sulla natura dei dati annotati e sui modelli interpretativi più
adatti per darne conto.
Parallelamente, anche in linguistica teorica si è incominciato a
prestare nuova attenzione al dato statistico, e al ruolo dei modelli
probabilistici nella descrizione linguistica e cognitiva in generale. Ad
esempio, nelle scienze cognitive si è fatta sempre più strada la con16
INTRODUZIONE
vinzione che la mente umana non sia soltanto capace di elaborare regole, ma anche di tener traccia di regolarità statistiche nell’ambiente
che la circonda.
Cos’è dunque la LC oggi? Sicuramente è una disciplina scientifica
matura, che in 50 anni è riuscita a conquistare una posizione di indiscussa centralità nel panorama scientifico nazionale e internazionale, e
in cui sono attivi ormai innumerevoli gruppi di ricerca. La Association for Computational Linguistics (ACL) organizza una conferenza
annuale a cui partecipano ricercatori di tutto il mondo. A questa si
affianca come importanza l’International Conference on Computational Linguistics (COLING) che si tiene con cadenza biennale. In Italia,
Antonio Zampolli (1937-2003), allievo di padre Busa, ha fondato e
diretto per lunghi anni l’Istituto di Linguistica Computazionale del
Consiglio Nazionale delle Ricerche (CNR) e ha occupato la prima cattedra di Linguistica matematica creata presso l’Università di Pisa nel
1977 (Zampolli et al., 2003). Attualmente, centri di ricerca pubblici e
privati sono attivi su tutto il territorio nazionale, e la LC e l’informatica applicata alle scienze umane sono diventate insegnamenti fondamentali in molte università, che offrono spesso percorsi di studio interdisciplinari umanistici e informatici.
La storia della LC ne ha anche determinato il carattere complesso
sia nell’articolazione interna sia nei rapporti con altre discipline, che
comprendono l’analisi informatica dei testi letterari (il cosiddetto literary computing), le scienze cognitive, l’IA e una miriade di settori applicativi legati all’ingegneria delle lingue. Sul versante della ricerca, i
modelli statistici hanno ancora un ruolo dominante. Dopo averne
esplorato non solo le grandi potenzialità, ma anche i limiti intrinseci,
il settore va tuttavia sempre più orientandosi verso un loro uso più
consapevole, attraverso lo sviluppo di modelli e strumenti ibridi, che
incorporano sia conoscenza rappresentata come regole, sia moduli
statistici. Sul piano tecnologico, le applicazioni basate sul TAL incominciano a diffondersi nella vita di tutti giorni. È sempre più comune
imbattersi in siti web e call center che usano tecnologie e strumenti
linguistici, spesso invisibili all’utente comune, ma tanto più efficaci
quanto meno ne è percepita la presenza. Ciononostante, queste tecnologie sono ancora limitate se confrontate alle competenze linguistiche di un parlante. I limiti non sono solo tecnologici, ma riguardano
anche la nostra comprensione, ancora parziale, di come il linguaggio
funziona. Anche in questo sta il fascino della LC: una disciplina in cui
il progresso tecnologico si deve sposare con la nostra capacità di penetrare i misteri del linguaggio e della mente umana.
17
TESTO E COMPUTER
Di cosa parla questo libro
Questo libro è il primo di due volumi dedicati al rapporto tra linguaggio naturale e calcolatore. I temi che abbiamo selezionato per
questo volume definiscono lo strumentario di base per il linguista
computazionale e in genere per chiunque voglia affrontare in maniera
proficua l’argomento partendo da un interesse primario per il testo, la
sua struttura e il suo contenuto. Nella prima parte, Il dato testuale e
la sua rappresentazione, il lettore troverà indicazioni utili riguardo ai
criteri per la selezione e l’uso del materiale testuale primario (CAP. 1)
e alle metodologie di rappresentazione e codifica dell’informazione
linguistico-testuale (CAPP. 2 e 3). L’accesso del computer al testo non
è affatto immediato: anche unità banali come il titolo, il paragrafo o
la singola parola sono in gran parte implicite e nascoste. Codificare
un testo digitale significa, in sostanza, tracciare una prima, grossolana
mappa virtuale che consenta al calcolatore di muoversi nel labirinto
del testo con un minimo di consapevolezza di dove si trovi. Nella
seconda parte, Metodi e tecniche di analisi testuale, la complessità linguistica del testo comincia a emergere agli occhi del computer, attraverso un paziente lavoro di ricostruzione a partire dal flusso ininterrotto di bit. Si parte dall’identificazione di unità lessicali semplici e
complesse attraverso l’uso di espressioni regolari (CAP. 4), per proseguire con la descrizione della loro distribuzione nel testo (CAP. 5) e
con l’individuazione di relazioni strutturali tra parole mediante modelli probabilistici (CAP. 6). La terza e ultima parte del libro, Esplorazione e annotazione del testo, infine, riporta l’enfasi sul lavoro del linguista e sulla sua capacità di estrarre ulteriori informazioni dal testo
attraverso percorsi mirati di ricerca, condotti su materiale sia grezzo
che annotato (CAP. 7). È spesso assai utile, infatti, effettuare queste
ricerche su testi annotati che diventano così uno scrigno di informazioni linguistiche preziose, automaticamente accessibili a chiunque
voglia farne uso per ulteriori ricerche. A questa delicata fase di annotazione linguistica è dedicato il CAP. 8. Infine, l’ultimo capitolo getta
un ponte verso il secondo volume accennando al problema dello sviluppo di modelli espliciti della conoscenza linguistica, come ad esempio gli analizzatori morfologici.
Alcune avvertenze preliminari si rendono necessarie. Questo libro
non è né un’introduzione alla linguistica, né una rassegna delle applicazioni tecnologiche della LC. Per rendere tuttavia il volume ugualmente leggibile sia per linguisti e umanisti che per informatici e ingegneri, abbiamo cercato di limitare per quanto possibile le conoscenze
presupposte, sul versante linguistico come su quello matematico e in18
INTRODUZIONE
formatico. A tale scopo, schede tecniche di approfondimento sono
disponibili sul sito http://www.carocci.it, dove il lettore potrà anche
trovare utili eserciziari raggruppati per capitoli. Per le stesse ragioni,
abbiamo evitato di trasformare il volume in una summa teorica del
dibattito scientifico attuale. Al contrario, ci siamo sforzati di raggiungere un equilibrio tra il sapere e il fare: nozioni di carattere teorico
sono sempre accompagnate dalla presentazione di tecniche e indicazioni metodologiche utili per poter analizzare un testo al calcolatore,
per scopi di ricerca o applicativi.
Tra le innumerevoli sfaccettature del linguaggio, particolare importanza assume la distinzione tra lingua scritta e parlata, le due principali modalità attraverso cui passa la comunicazione linguistica. Negli ultimi vent’anni, il settore delle tecnologie del parlato ha affrontato
con grande successo i problemi relativi alla sintesi e al riconoscimento
vocali da parte del calcolatore. Assai più recente, in ambito computazionale, è invece l’interesse per il rapporto tra comunicazione linguistica, gesti ed espressioni facciali e, più in generale, per l’integrazione
tra linguaggio e percezione sensoriale, nella direzione di un approccio
multimodale al TAL.
Da parte nostra, abbiamo deciso di focalizzare l’attenzione su
quegli aspetti centrali del linguaggio umano che prescindono dalle
particolari modalità attraverso cui passa la comunicazione linguistica.
A questa ragione va ricondotta la decisione di scegliere, come elemento cardine del nostro percorso espositivo, il testo, inteso come
qualsiasi prodotto dell’attività linguistica che sia elaborato o trascritto
in forma di caratteri. Questa definizione comprende libri, manoscritti,
lettere, articoli ma anche dialoghi, trasmissioni radiofoniche o conversazioni telefoniche nella misura in cui questi ultimi sono trascritti in
un qualche sistema grafico di caratteri. Il testo oggetto delle nostre
analisi non è dunque limitato alle forme di produzione linguistica
progettate per la modalità scritta, come libri o giornali. Pertanto, i
metodi e gli strumenti che verranno illustrati su testi scritti si applicano altrettanto bene al linguaggio parlato trascritto. Ad esempio, alcuni dei metodi quantitativi illustrati nei CAPP. 5 e 6 di questo volume
sono stati sviluppati al servizio delle tecnologie per il riconoscimento
del parlato, ma la loro rilevanza dal punto di vista dello studio della
lingua è indipendente dalle specificità del segnale acustico.
Il web e l’evoluzione telematica hanno inoltre reso molto più fluido il confine tra lingua scritta e lingua parlata. La posta elettronica, le
chat, i blog e gli SMS rappresentano alcuni dei nuovi stili di comunicazione in cui lo strumento elettronico e la forma dell’interazione fanno
sì che il testo scritto contenga in realtà tratti lessicali, sintattici ed
19
TESTO E COMPUTER
espressivi tipici della lingua parlata. Adottando una nozione aperta di
testo, gli stessi metodi e strumenti computazionali possono dunque
essere applicati a tutta una serie di prodotti del linguaggio rappresentativi dell’intera gamma delle modalità comunicative, delle varietà
linguistiche e dei registri dell’italiano contemporaneo. La centralità
che il testo assume nella nostra trattazione ci ha portato inoltre a
concentrarci prevalentemente su aspetti d’uso del linguaggio. È nostro convincimento, tuttavia, che lo studio del linguaggio mediante il
calcolatore possa contribuire a ricomporre e superare in una nuova
sintesi la dicotomia tra conoscenza e uso, competenza ed esecuzione
linguistica, rappresentazione e computazione, gettando nuova luce sul
rapporto tra facoltà del linguaggio e cognizione.
Concludiamo con una nota terminologica. La difficoltà di reperire
traduzioni italiane dei tecnicismi del settore ha in genere stimolato la
nostra creatività lessicale. Tutte le volte che ci è stato possibile, abbiamo scelto di tradurre il termine tecnico in un modo che suonasse
naturale e ragionevole per un parlante italiano e che richiamasse alla
mente, al tempo stesso, la sua fonte originale (menzionata alla prima
apparizione della traduzione nel testo) per non disorientare troppo il
lettore che abbia già una qualche dimestichezza con la letteratura. È
possibile che, nonostante i nostri sforzi, le scelte compiute non siano
sempre state le più felici e che qualche lettore purista possa storcere
il naso di fronte ad alcuni inevitabili prestiti e calchi. Abbiamo preferito questo rischio, tuttavia, a quello di rendere il testo meno comprensibile per il neofita, nascondendo concetti di base dietro etichette
generiche e poco comprensibili.
20
Parte prima
Il dato testuale e la sua rappresentazione
1
I dati della lingua
Il bagaglio di competenze del linguista computazionale include essenzialmente:
1. la capacità di selezionare e raccogliere i dati linguistici più appropriati per i propri scopi;
2. la conoscenza di metodi formali (logico-algebrici, statistici, matematici e computazionali) per l’analisi di questi dati;
3. la padronanza di tecniche informatiche con cui condurre automaticamente le proprie analisi.
In questa prima parte del libro ci occupiamo del primo problema,
la raccolta dei dati della lingua e la loro rappresentazione in vista del
trattamento automatico. L’attenzione al ruolo del dato testuale è una
novità abbastanza recente in LC, frutto del rinnovato interesse per
un’impostazione di tipo empirista allo studio del linguaggio. Fino a
non molto tempo fa, per un libro di introduzione a questa disciplina
sarebbe stato naturale iniziare subito con la descrizione di metodi e
strumenti informatici, senza spendere molte parole su tipo e forma
dei dati su cui questi strumenti devono operare. L’impiego di metodi
statistici ha invece reso indispensabile una maggiore attenzione alla
quantità e alla composizione del materiale linguistico. Più in generale,
è maturata la consapevolezza che ogni volta che elaboriamo dati linguistici col computer, sia per finalità applicative che di ricerca, non
possiamo comunque prescindere da un’accurata riflessione critica sulla composizione e natura dei dati stessi.
1.1
Le fonti dei dati linguistici
Per dato linguistico intendiamo i prodotti del linguaggio che sono oggetto di un processo di analisi (nel nostro caso specifico, condotta
mediante il computer) e che formano l’evidenza empirica su cui fondare lo sviluppo di modelli e teorie linguistiche. Cosa viene scelto
23
TESTO E COMPUTER
come dato dipende chiaramente dalla tipologia di fenomeni che vogliamo indagare o di capacità linguistiche che vogliamo tradurre in
un programma. Dati linguistici possono, dunque, essere parole, come
input per analisi morfologiche o per rappresentarne il contenuto semantico, frasi, per identificarne automaticamente la struttura sintattica, enunciati, per riconoscerne la funzione comunicativa ecc.
Uno dei problemi preliminari e più importanti che si pone al linguista computazionale è come individuare le fonti dalle quali attingere i dati necessari per le proprie analisi. Possiamo distinguere due
fonti principali di evidenza. La prima sono i testi dei parlanti di una
lingua, intesi come qualsiasi prodotto dell’attività linguistica dei parlanti elaborato o trascritto come sequenza di caratteri (cfr. Introduzione). Questa nozione deve essere quindi intesa nel senso più ampio
possibile e copre un territorio che si estende da testi fortemente
strutturati, come gli articoli scientifici, alle trascrizioni di conversazioni spontanee, da macro-testi, come le enciclopedie, a micro-testi
come gli SMS. La seconda fonte di evidenza linguistica sono i parlanti
stessi. In psicolinguistica e in buona parte della linguistica teorica
ciò che viene assunto come evidenza empirica è la capacità di un
soggetto di svolgere un certo compito linguistico, oppure i giudizi
che i soggetti formulano su espressioni e strutture della lingua sulla
base della propria intuizione di parlanti nativi. Il linguista procede
tipicamente preparando dei test ad hoc per lo studio di un particolare fenomeno; questi vengono poi somministrati a un gruppo selezionato di parlanti, sotto forma di questionari o di esperimenti eseguiti in un contesto controllato di laboratorio. Le risposte dei parlanti costituiscono i dati oggetto di indagine del linguista: ad esempio, le frasi giudicate grammaticalmente corrette dai parlanti, il grado di affinità semantica che i soggetti intervistati hanno riscontrato
tra due parole, il tempo con cui vengono riconosciute le parole che
appaiono su uno schermo, le espressioni usate dai soggetti per descrivere una scena ecc.
1.1.1. Dati “ecologici” e dati controllati
Una delle variabili fondamentali che distingue questi due tipi di evidenza linguistica è la naturalezza del contesto in cui i dati sono raccolti. Possiamo infatti parlare dei dati testuali come dati linguistici
“ecologici”, a fronte dei dati linguistici controllati ottenuti somministrando ai parlanti i test elaborati da un linguista. Per capire la differenza, confrontiamo il problema dell’indagine sul linguaggio con i diversi metodi che uno scienziato naturalista può usare per raccogliere
24
1.
I DATI DELLA LINGUA
dati sul comportamento di un animale. Prima di tutto, lo scienziato
può osservare l’animale nel suo habitat naturale, cercando di limitare
al massimo le perturbazioni e i condizionamenti causati dalla sua presenza, limitandosi a registrare come l’animale si muove, mangia o si
riproduce. Lo scienziato poi elaborerà le sue teorie e i suoi modelli
analizzando il risultato delle osservazioni. In alternativa, lo scienziato
può eseguire osservazioni ed esperimenti sul comportamento dell’animale in laboratorio. In questo caso, il contesto dell’osservazione è
controllato: lo scienziato prepara, infatti, un contesto sperimentale ad
hoc in cui colloca l’animale per verificare la validità di una particolare
ipotesi di ricerca. Osservando l’animale nel suo habitat, la situazione
di raccolta dei dati è la più naturale possibile, compatibilmente con i
metodi di registrazione. Questo rende talvolta necessario effettuare
molte osservazioni prima di riuscire a individuare un comportamento
interessante per un particolare obiettivo di ricerca, proprio perché
l’animale è osservato senza condizionamenti esterni. Nel caso del laboratorio, dal momento che la situazione è interamente sotto il controllo dello scienziato, è invece più facile fare astrazione da circostanze di contorno non interessanti o di disturbo, selezionando solo gli
aspetti che sono oggetto di indagine (ad esempio una particolare abitudine alimentare). Questo va chiaramente a discapito della naturalezza dell’osservazione e spesso richiede una faticosa opera di preparazione del contesto sperimentale, per essere sicuri di riuscire a controllare tutte le variabili in gioco, con il rischio sempre possibile che i
risultati ottenuti siano condizionati proprio dal contesto dell’esperimento.
I dati linguistici ricavati dai testi assomigliano molto da vicino a
osservazioni naturalistiche. Il testo rappresenta l’habitat naturale dei
dati linguistici: parole, frasi o enunciati “vivono” nel testo come il
luogo nel quale essi acquistano senso, definiscono un andamento narrativo e realizzano uno scopo comunicativo. I dati estratti da testi
sono “ecologici”, in quanto osservati e raccolti nel proprio ambiente,
di cui dunque conservano tutta la naturalezza. Dall’altro lato, i dati
linguistici ricavati attraverso la somministrazione di test ai parlanti
sono controllati, così come lo sono gli esperimenti di uno scienziato
in laboratorio. La preparazione dell’esperimento consente di controllare in maniera accurata il fenomeno linguistico da osservare e di
astrarre da eventuali fattori di disturbo. È possibile così ottenere dati
altrimenti difficili da isolare nei testi reali prodotti dai parlanti nel
corso della loro attività comunicativa spontanea.
Astrazione e idealizzazione (ovvero la creazione di una situazione
ideale anche se più astratta rispetto alla realtà) sono momenti normali
25
TESTO E COMPUTER
e fondamentali della metodologia scientifica, in quanto permettono
appunto di controllare le variabili rilevanti in un dato processo, linguistico e no. L’idealizzazione sperimentale non deve però alterare la
natura stessa del fenomeno da osservare, per evitare che i dati acquisiti siano non affidabili o non proiettabili sui contesti reali. La LC ha
evidenziato la necessità di combinare in modo equilibrato i dati linguistici naturali con il ricorso a dati controllati. Da una parte, infatti,
i modelli e gli strumenti computazionali devono essere ben adattati
all’ambiente linguistico per il quale sono progettati: tale adattamento
è possibile solo se essi sono “esposti” fin dalla fase del loro sviluppo
a dati linguistici “ecologici”, estratti da testi appartenenti a quel particolare ambiente. D’altra parte, il ricorso a dati più controllati di origine sperimentale o introspettiva, oltre a essere un punto di partenza
fondamentale per indagini sulla cognizione umana, consente di superare i limiti derivanti dalla natura comunque limitata e parziale dell’evidenza “sul campo”, a fronte dell’estrema ricchezza delle variabili da
controllare.
1.2
I corpora
Un corpus è una collezione di testi selezionati e organizzati in maniera
tale da soddisfare specifici criteri che li rendono funzionali per le
analisi linguistiche. I corpora testuali rappresentano la principale (anche se non esclusiva) fonte di dati in LC. Il rinnovato interesse per
l’uso di metodi statistici ha indubbiamente favorito il diffondersi dei
corpora come fonti di evidenza per l’analisi computazionale della lingua. Ma questo fattore sarebbe stato da solo insufficiente a spiegare il
profondo legame che oggi lega i corpora e la LC, se non si fosse accompagnato a una generale consapevolezza dell’importanza del dato
“ecologico” come base dell’indagine linguistica tout court.
Il fattore propulsivo fondamentale che ha promosso la creazione e
l’uso dei corpora è stato indubbiamente lo sviluppo della tecnologia
informatica. In realtà, la nozione di corpus precede l’avvento del
computer: la raccolta di testi costituiva infatti la prassi comune nello
studio sul linguaggio prima della nascita della grammatica generativa
chomskiana. Allo stesso modo, il corpus come collezione delle opere
di un autore è sempre stato uno strumento fondamentale negli studi
letterari, linguistici e filosofici, ad esempio per realizzare analisi sull’uso di una parola da parte di un autore, l’evoluzione del suo lessico
ecc. L’era informatica ha però letteralmente rivoluzionato natura,
ruolo e uso dei corpora. Il computer permette infatti di a) immagaz26
1.
I DATI DELLA LINGUA
zinare quantità sempre crescenti di testi; b) ottimizzare la loro esplorazione e la ricerca di dati linguistici interessanti; c) sviluppare modelli computazionali della lingua. Prima della disponibilità di strumenti informatici, la difficoltà di raccogliere, gestire ed esplorare i testi poneva enormi limiti all’uso dei corpora: limiti sia estensivi, per
quanto riguarda la dimensione del corpus, sia intensivi, per quanto
riguarda lo sfruttamento delle sue potenzialità come fonte di dati. Il
fatto che testi in formato digitale siano ormai disponibili non solo sul
web, ma anche come risultato diretto di gran parte delle nostre attività quotidiane (ad esempio e-mail, articoli, rapporti tecnici ecc.) rende
assai agevole non solo raccogliere grandi quantità di dati linguistici,
ma soprattutto accedere a un’ampia varietà di testi appartenenti a tipologie linguistiche diverse. Il ruolo dei computer nell’uso dei corpora è così cruciale che ormai il termine stesso di corpus è diventato di
fatto sinonimo di corpus elettronico, ovvero corpus di testi in formato
digitale (cfr. CAP. 2).
1.2.1. Tipi di corpora
Ogni corpus è per sua definizione il risultato di un’opera di selezione:
i criteri che guidano questa scelta determinano la natura stessa del
corpus e condizionano di conseguenza anche lo spettro dei suoi usi
possibili. Scegliere un corpus come fonte di dati linguistici per l’analisi computazionale richiede dunque prima di tutto di valutare accuratamente se il suo contenuto e la sua organizzazione sono appropriati
per i nostri scopi, ovvero se il corpus è in grado di fornirci il tipo e
la quantità di informazioni a cui siamo interessati. La TAB. 1.1 riporta
alcuni dei corpora più noti nella comunità di ricerca internazionale in
LC. La tipologia è stata definita sulla base dei seguenti parametri (gli
stessi di TAB. 1.2, dove abbiamo riportato le caratteristiche di alcuni
dei principali corpora d’italiano).
1. Generalità: il grado di generalità di un corpus dipende dalla misura in cui i suoi testi sono stati selezionati in maniera trasversale rispetto a varietà diverse di una lingua. I corpora specialistici o verticali
hanno il grado minimo di generalità, poiché includono solo testi che
appartengono a una specifica varietà linguistica (sublanguage) o a un
particolare dominio tematico. In questo caso l’ampiezza del linguaggio che il corpus cerca di descrivere è molto ristretta: si tratta in genere di linguaggi settoriali (ad esempio linguaggio medico, linguaggio
giuridico, linguaggio burocratico ecc.) oppure di linguaggi con particolari caratteristiche (ad esempio linguaggio infantile, linguaggio pa27
28
Corpus specialistico bilingue (inglese e francese
canadese) parallelo. I testi sono tratti dagli atti del
Parlamento canadese
Corpus specialistico multilingue (inglese, francese,
tedesco, spagnolo, italiano) parallelo. I testi sono
tratti dall’“Official Journal of the European Community”
Corpus audio dell’inglese americano. È un corpus
specialistico di conversazioni telefoniche, usato per
addestrare i programmi per il riconoscimento automatico del parlato
Canadian Hansards Corpus
Multext
Switchboard Corpus
Childes
Corpus di trascrizioni di vari tipi di interazioni
dialogiche con bambini o soggetti con patologie
del linguaggio
Corpus audio di dialoghi semi-spontanei raccolti
col metodo “map task” da parlanti adulti di inglese britannico
Corpus di riferimento bilanciato, sincronico, della
lingua inglese britannica. È un corpus misto creato
tra il 1991 e il 1994
British National Corpus
Map Task Corpus
Corpus di riferimento bilanciato sincronico della
lingua inglese americana scritta, creato negli anni
sessanta alla Brown University (USA)
Brown Corpus
HCRC
Tipologia del corpus
LC
Corpus
TABELLA 1.1
Alcuni dei corpora internazionali più usati in
La raccolta di testi di Childes presso la Carnegie
Mellon University (USA) è costantemente aggiornata con i contributi di ricercatori di tutto il mondo.
I testi raccolti sono codificati in XML secondo lo
standard CHAT per la trascrizione e condivisione di
trascrizioni di parlato
128 registrazioni di dialoghi (per un totale di 18
ore), trascritte e codificate in XML
2.400 registrazioni di conversazioni telefoniche,
trascritte e successivamente annotate con vari tipi
di informazione linguistica
5 milioni di parole, codificate in SGML (standard
CES), di cui un sottoinsieme è allineato e annotato
a livello morfo-sintattico
Esistono diverse versioni del corpus, per un totale
di alcuni milioni di parole. Varie porzioni del corpus sono codificate in XML e allineate
100 milioni di parole di testi di lingua scritta e
parlata, codificate in SGML (standard TEI) e annotate a livello morfo-sintattico
1 milione di parole di testi di lingua scritta pubblicati nel 1961 (successivamente annotate a livello
morfo-sintattico e sintattico)
Dimensioni
TESTO E COMPUTER
29
Corpus che include le annate del quotidiano “La Repubblica” dal 1985 al
2000
Corpus audio della lingua parlata spontanea. Il corpus è stato realizzato nel
progetto europeo C-Oral-Rom ed è comparabile con altri corpora di spagnolo,
francese e portoghese
Corpus generale diacronico della lingua
italiana scritta
La Repubblica
C-Oral-Rom
Italnet
1.849 testi in volgare (21,2 milioni di
parole), anteriori al 1375
Registrazioni audio per un totale di
300.000 parole, trascritte, codificate in
XML e annotate a livello morfo-sintattico
175 milioni di parole (attualmente in via
di ampliamento fino 400 milioni), codificate in XML (standard TEI) e annotate a
livello morfo-sintattico
100 ore di registrazioni audio trascritte,
codificate in XML e parzialmente annotate
Corpus audio dell’italiano parlato di varie tipologie (dialogico, letto, parlato televisivo, conversazioni telefoniche e corpora speciali), bilanciato dal punto di vista diafasico e diatopico
CLIPS
100 milioni di parole di testi di lingua
scritta
Corpus di riferimento bilanciato sincronico dell’italiano scritto contemporaneo
Coris
II
et al.
di Firenze
Opera del Vocabolario Italiano-CNR (Firenze)
LABLITA-Università
di Bologna
di Napoli
di Bologna
SSLMIT-Università
Federico
CIRASS-Università
CILTA-Università
Istituto di Linguistica Computazionale-CNR (Pisa)
20 milioni di parole di testi di lingua
scritta (attualmente in via di ampliamento fino a 100 milioni), codificati in SGML
(standard CES) e parzialmente annotati a
livello morfo-sintattico
Corpus di riferimento bilanciato sincronico, dell’italiano scritto contemporaneo.
Il corpus è stato sviluppato nel progetto
europeo Parole ed è comparabile con altri corpora per lingue europee
Parole
Realizzazione
Dimensioni
Tipologia del corpus
Corpus
TABELLA 1.2
Corpora per l’italiano
1.
I DATI DELLA LINGUA
TESTO E COMPUTER
tologico ecc.). I corpora specialistici sono tipicamente legati a una
particolare applicazione o ricerca: ad esempio, Childes è la più nota
fonte di dati per lo studio del linguaggio infantile (normale e patologico); il corpus Reuters-21578 è invece una raccolta di 21.578 agenzie
stampa in inglese diffuse dalla “Reuters” nel 1987 e usata per lo sviluppo e la valutazione di sistemi di classificazione automatica dei testi
(text categorization).
All’estremo opposto si collocano i corpora generali, i cui testi appartengono alle diverse varietà, comunità d’uso o registri di una lingua e sono selezionati per comporre il quadro descrittivo della lingua
nel suo complesso. I corpora generali sono essenzialmente plurifunzionali, ovvero non sono costruiti per una specifica applicazione o
obiettivo di ricerca. I corpora generali sono spesso progettati come
risorse trasversali di riferimento per lo studio di una lingua, ad esempio come fonte di evidenza per realizzare un dizionario o sviluppare
una grammatica: di qui anche il nome di corpora di riferimento (reference corpora). Spesso i corpora generali sono articolati in sottocorpora, ovvero sottoinsiemi di testi che appartengono a una particolare
varietà.
2. Modalità: la grande diversità che caratterizza a tutti i livelli la lingua scritta e quella parlata rende la modalità (scritta o orale) di produzione dei testi un parametro estremamente rilevante per definire la
fisionomia del corpus e anche deciderne gli usi più opportuni. Rispetto a questa dimensione possiamo distinguere:
a) corpora di lingua scritta – contengono solo testi originariamente
prodotti in forma scritta, come libri, articoli di giornale, lettere ecc.
(ad esempio Brown Corpus, Parole, Coris ecc.);
b) corpora di lingua parlata – contengono solo testi originariamente
prodotti in modalità orale e successivamente trascritti, come conversazioni spontanee, trasmissioni radiofoniche ecc. (ad esempio Childes);
c) corpora misti – contengono in proporzioni variabili sia testi prodotti in modalità scritta sia trascrizioni di lingua parlata (ad esempio
BNC).
I corpora in b devono essere distinti dai cosiddetti corpora audio
(o speech databases), che contengono registrazioni audio di parlato,
eventualmente accompagnate dalla loro trascrizione: l’HCRC Map Task
Corpus è composto da registrazioni audio di conversazioni raccolte in
maniera “semicontrollata” secondo il cosiddetto metodo Map Task
(Brown et al., 1984); CLIPS è un corpus audio di varie tipologie dell’italiano parlato (parlato dialogico, letto, televisivo, conversazioni tele30
1.
I DATI DELLA LINGUA
foniche ecc.) stratificato dal punto di vista diafasico e diatopico. I
corpora audio vanno acquistando una sempre maggiore importanza
come strumenti per lo sviluppo di applicazioni per il riconoscimento
o la sintesi automatica del parlato, in cui è necessario accedere a dati
acustici. Un tipo di corpus ancora più di frontiera, ma in rapida diffusione, è il corpus multimodale (o corpus audio-visivo), che contiene
le registrazioni audio-video di scambi comunicativi. Queste permettono di acquisire dati importanti non solo sulla struttura linguistica, ma
anche sugli aspetti gestuali, facciali, emozionali e ambientali della comunicazione.
3. Cronologia: i corpora differiscono anche per il modo in cui i testi
sono selezionati rispetto all’asse temporale. Un corpus sincronico include testi che appartengono a una stessa finestra temporale, selezionata per lo studio di una particolare fase della lingua: ad esempio i
testi del Brown Corpus sono stati pubblicati negli USA nel 1961, mentre il corpus La Repubblica contiene testi pubblicati sull’omonimo
quotidiano tra il 1985 e il 2000. Un corpus diacronico comprende invece testi appartenenti a periodi diversi, con lo scopo di monitorare il
mutamento linguistico su scala microtemporale oppure su scala macrotemporale. Italnet, il corpus del Tesoro della Lingua Italiana delle
Origini, è il maggiore corpus diacronico della lingua italiana con
1.849 testi anteriori al 1375, anno della morte di Boccaccio.
4. Lingua: un corpus monolingue contiene solo testi di una lingua; un
corpus bilingue (o multilingue) contiene testi di due (o più) lingue. I
corpora bilingui (multilingui) possono essere ulteriormente distinti in
corpora paralleli e corpora comparabili. Un corpus parallelo comprende
testi sia nella loro lingua originaria (tecnicamente definita L1) sia in
traduzione in un’altra lingua (tecnicamente definita L2). Se le unità
linguistiche dei testi L1 sono esplicitamente collegate alle unità linguistiche nei testi L2 che ne costituiscono le traduzioni, si parla allora di
corpus parallelo allineato: l’unità tipica di allineamento è la frase. Uno
dei più celebri corpora paralleli è il Canadian Hansards Corpus, che
contiene testi francesi e inglesi allineati, tratti dagli atti del Parlamento
canadese. In LC i corpora paralleli sono una fonte di dati estremamente
importante per lo sviluppo di sistemi di traduzione automatica.
Un corpus bilingue (multilingue) comparabile non contiene invece
testi in traduzione, ma testi originali in lingue diverse. Il corpus è
comparabile nella misura in cui i criteri di selezione dei testi sono gli
stessi nelle varie lingue. Ad esempio, Parole è un insieme di corpora
per 12 lingue europee, costruiti seguendo un comune criterio di sele31
TESTO E COMPUTER
zione dei testi; il corpus italiano è dunque comparabile con gli altri
membri della famiglia Parole. I corpora comparabili permettono di
confrontare due o più lingue rispetto allo stesso genere testuale o dominio tematico; dal momento che i testi sono tutti originali, i dati
raccolti possiedono un maggiore grado di naturalezza, evitando le artificiosità che talvolta conseguono dall’opera di traduzione.
5. Integrità dei testi: un corpus può contenere testi interi oppure
porzioni di testi di una lunghezza prefissata: il Brown Corpus include
campioni di 2.000 parole, mentre i testi in Parole e in Coris sono integrali. Per alcuni tipi di indagini la disponibilità di testi completi è
importante per evitare che la selezione di un frammento possa incidere negativamente sulla naturalezza dei dati da estrarre. Dall’altro lato,
ragioni di bilanciamento del corpus possono invece far preferire la
selezione di porzioni di testi di lunghezza uniforme: questo permette
di aumentare il numero di testi rappresentati nel corpus evitando che
quelli molto lunghi condizionino la composizione della collezione.
6. Codifica digitale dei testi: un ulteriore elemento di differenziazione
tra corpora è il modo in cui sono rappresentati i testi digitali. Nei corpora codificati ad alto livello (cfr. PAR. 2.4) i testi sono arricchiti con
etichette che ne rendono espliciti vari tipi di informazione, come ad
esempio la struttura e la composizione. Tipi particolari di corpus codificato sono i corpora annotati, nei quali le informazioni codificate riguardano la struttura linguistica del testo a livelli diversi di rappresentazione (ad esempio morfologica, sintattica, semantica ecc.). Le nozioni di codifica e annotazione di corpora rivestono un’importanza fondamentale nella LC e verranno discusse in dettaglio nei CAPP. 2, 3 e 8.
Queste diverse dimensioni contribuiscono a comporre la fisionomia
di un corpus. Un altro tratto fondamentale è però la sua estensione,
la cui unità di misura è il numero di parole unità (token) (cfr. CAP. 5)
che esso contiene; nel caso dei corpora di parlato o dei corpora audio un’ulteriore unità di misura è la durata della registrazione. In
realtà la dimensione quantitativa non è solo un elemento accessorio,
ma entra come uno degli aspetti cruciali per determinare la conformazione e l’usabilità stessa del corpus. Concentrandosi sui corpora
generali, la loro evoluzione è contraddistinta dall’ampliamento costante dell’estensione. La grandezza tipica dei cosiddetti corpora di prima
generazione degli anni sessanta-settanta è circa 1 milione di parole: il
modello di riferimento (sia per le dimensioni sia per i criteri di selezione dei testi) per questa generazione è il Brown Corpus, creato da
32
1.
I DATI DELLA LINGUA
Francis e Kucera alla Brown University negli Stati Uniti nel 1964.
L’importanza del Brown Corpus risiede nel fatto di essere il primo
corpus elettronico progettato come riferimento per lo studio di una
lingua. A partire dagli anni ottanta, la grandezza media dei corpora
di riferimento è andata progressivamente aumentando: prima si è
spostata sulle decine di milioni di parole, e poi si è attestata stabilmente sulle centinaia di milioni. Il BNC con i suoi 100 milioni di parole rappresenta senz’altro uno dei modelli più importanti per i corpora
generali di nuova generazione. Anche per l’italiano, le dimensioni dei
corpora più recenti sono in linea con la grandezza standard, aggirandosi in media sul centinaio di milioni di parole.
I corpora anche di grandi dimensioni sono comunque realtà
“chiuse”: esse ci restituiscono una sorta di “fotografia” di una lingua
attraverso i testi selezionati, ma non sono adatti a seguire i mutamenti
e le evoluzioni che in una lingua avvengono come conseguenza della
sua natura intrinsecamente dinamica. Per superare questo limite,
John Sinclair ha proposto di estendere la nozione tradizionale di corpus in uno strumento di monitoraggio linguistico. Un corpus di monitoraggio (monitor corpus) è una collezione “aperta” di testi che muta
nel tempo, pur conservando la sua fisionomia originale, introducendo
nuovi testi selezionati secondo gli stessi criteri usati per determinare
la collezione iniziale. Questo tipo di corpus permette ad esempio di
monitorare le dinamiche del lessico della lingua, e dunque può essere
usato in contesti lessicografici come fonte di dati per mantenere aggiornati i dizionari. Il primo esempio di corpus di monitoraggio è la
Bank of English, ideata e diretta da Sinclair: iniziato nel 1981, questo
corpus è arrivato negli anni novanta a un’estensione di circa 200 milioni di parole, per raggiungere i 450 milioni nel 2002. L’idea del corpus aperto è stata adottata anche per la costruzione di altri corpora
generali, ad esempio Coris per l’italiano e l’American National Corpus
(ANC) per l’inglese americano.
Al di là degli aspetti quantitativi, è possibile tracciare alcune linee
di tendenza nell’evoluzione dei corpora:
1. mentre i prodotti di prima generazione sono essenzialmente non
misti (tipicamente di lingua scritta), i corpora generali più recenti
ospitano spesso proporzioni variabili di parlato trascritto (il 10% nel
BNC). Sempre più diffusa è anche la presenza di nuove forme testuali
digitali, come pagine web, e-mail ecc.;
2. esiste un numero crescente di corpora audio e corpora multilingui, soprattutto paralleli allineati. A questo va aggiunta la disponibilità amplissima di corpora specialistici, per le più diverse varietà linguistiche e applicazioni;
33
TESTO E COMPUTER
3. il numero di lingue per le quali esistono corpora di varie tipologie
è in continuo aumento, sotto la spinta sia delle esigenze di mercato
per le tecnologie linguistiche, sia della comunità di ricerca interessata
ad allargare a nuove lingue la disponibilità di corpora di riferimento;
4. si preferisce includere in un corpus testi interi per garantire la
massima naturalezza dei dati linguistici estraibili. Un’eccezione importante a questa tendenza è invece rappresentata dal BNC, che contiene
porzioni di testi di circa 45.000 parole;
5. i testi sono riccamente codificati attraverso linguaggi di marcatura
e schemi di codifica standardizzati (cfr. CAPP. 2 e 3);
6. i corpora sono sempre più estensivamente annotati: l’annotazione
delle parole con la loro categoria grammaticale (annotazione morfosintattica) è ormai comune, ma a questa di frequente si aggiungono
anche informazioni linguistiche più avanzate, ad esempio sintattiche,
semantiche ecc. (cfr. CAP. 8);
7. strumenti informatici sofisticati (basi di dati, interfacce di ricerca
ecc.) permettono la consultazione ed esplorazione efficiente dei grandi corpora di riferimento.
Questa evoluzione è motivata da vari fattori. L’espansione delle
capacità di memorizzazione ed elaborazione dei dati da parte dei
computer, lo sviluppo di metodi avanzati per il trattamento e la codifica dei testi digitali e la disponibilità crescente di materiale testuale
già in formato digitale hanno permesso non solo un ampliamento
quantitativo dei corpora, ma anche una forte evoluzione qualitativa,
che concerne i tipi di testi che vengono a comporre il corpus, il
modo in cui questi sono rappresentati in formato digitale e anche gli
strumenti per la loro esplorazione. I testi sono stati inoltre arricchiti
con vari livelli di annotazione linguistica che costituiscono una base
essenziale per analisi ed elaborazioni informatiche avanzate. In questo
modo i corpora, da collezioni di materiale testuale, si sono andati
progressivamente trasformando in autentiche risorse di informazione
(cfr. CAP. 2) a disposizione del linguista, computazionale e no, per le
sue analisi e applicazioni.
1.3
Il corpus come campione
Il grado di adeguatezza di un corpus come fonte di dati per una particolare analisi linguistica o applicazione è determinato dall’interazione di due fattori fondamentali. Da un lato, c’è la dimensione quantitativa, ovvero la grandezza del corpus. Un corpus è come una finestra
dalla quale il linguista può osservare il linguaggio, la sua geografia e
34
1.
I DATI DELLA LINGUA
le sue dinamiche. Le dimensioni della finestra sono importanti per il
tipo di osservazioni che vogliamo compiere e per avere maggiori probabilità di osservare quei fenomeni o strutture che sono rilevanti per
i nostri scopi. Dall’altro lato, c’è l’aspetto qualitativo, ovvero la composizione e organizzazione del corpus. Un corpus è infatti il risultato
di una scelta di testi che sono giudicati significativi per esplorare una
lingua. Non è solo il numero dei testi che conta, ma anche il modo in
cui li selezioniamo. In altri termini, è anche importante dove e come
decidiamo di costruire il nostro punto di osservazione, per ottenere
da esso la migliore vista possibile sulla lingua.
Lo sviluppo tecnologico informatico ha permesso di potenziare
enormemente i corpora nella loro dimensione quantitativa. Il progresso
ha toccato però anche gli aspetti qualitativi grazie all’affinarsi di metodologie sofisticate per ottimizzare i criteri di selezione dei testi. Una
delle forze propulsive di questa evoluzione è stata la linguistica dei corpora, nella quale la nozione di corpus ha trovato una definizione e
trattazione scientifica rigorosa. Questa disciplina più di altre si è fatta
portavoce soprattutto della necessità di potenziare i corpora proprio
per quanto riguarda il controllo delle modalità di selezione dei testi,
accanto agli aspetti meramente quantitativi: a tale proposito Leech
(1991, p. 10) afferma che in un corpus «focalizzarsi solo sulla dimensione è ingenuo», in quanto più grande non significa necessariamente
migliore. Un corpus costituisce infatti una fonte preziosa di informazioni sul modo in cui si distribuiscono i tratti di una lingua: le parole, le
costruzioni sintattiche, la struttura del discorso ecc. Lo scopo è di usare questo tipo di evidenza per formulare una descrizione della lingua
dei testi nel corpus, ad esempio una descrizione del suo lessico o della
sua grammatica, in generale della sua organizzazione e delle sue dinamiche. Un corpus si configura così come un campione di una lingua o
di una sua varietà, nel senso statistico di sottoinsieme di unità di una
popolazione oggetto di studio, opportunamente selezionate come fonte
di dati per formulare generalizzazioni corrette e affidabili sull’intera
popolazione di riferimento. Porre l’attenzione sull’uso dei corpora
come campioni di testi ha dunque conseguenze estremamente rilevanti
sia sul modo di progettare e costruire i corpora, sia sul loro impiego
come fonti di dati per analisi linguistiche.
1.3.1. Rappresentatività e variabilità
La possibilità di estendere le informazioni tratte da un campione alla
sua popolazione (e quindi la possibilità di studiare una qualche realtà
sulla base di un suo sottoinsieme) dipende fortemente da quanto il
35
TESTO E COMPUTER
campione è rappresentativo della popolazione stessa: è necessario infatti che il campione sia il più possibile “simile” alla popolazione e
che ne rappresenti un modello fedele in scala ridotta (cfr. Scheda on
line 1.1). La rappresentatività agisce come vincolo qualitativo e quantitativo sulla capacità del corpus di fornirci un modello in scala delle
proprietà di una lingua o di una sua varietà. Se questa condizione
non è soddisfatta, non possiamo essere sicuri che l’evidenza del corpus corrisponda effettivamente a proprietà reali della lingua, o sia
piuttosto l’effetto accidentale del modo in cui i testi sono stati campionati. Da ciò deriva una nozione di corpus molto più restrittiva di
quella fornita all’inizio del PAR. 1.2, in quanto la rappresentatività rispetto a una data popolazione è il concetto chiave per qualificare una
collezione di testi come corpus. Per tale motivo, i corpora vengono
generalmente distinti da collezioni di testi, archivi o biblioteche digitali, quali ad esempio l’Oxford Text Archive, Project Gutenberg e, per
l’italiano, la Biblioteca Italiana. Sebbene la quantità di testi di una biblioteca digitale possa essere di gran lunga superiore a qualunque
corpus esistente, il modo in cui i testi di una biblioteca sono raccolti
è decisamente “opportunistico” rispetto alle esigenze o ai gusti letterari dei suoi utenti oppure rispetto a una specifica politica culturale,
senza che per questo i testi possano dirsi rappresentativi di una data
lingua.
Per essere rappresentativo un corpus deve tenere traccia dell’intero
ambito di variabilità dei tratti e proprietà di una lingua. Il modo in cui
questi si distribuiscono dipende fortemente dalla tipologia dei testi
della lingua. Diversi tipi testuali si legano infatti a differenti situazioni
e scopi comunicativi, che a loro volta incidono sulle scelte lessicali e
sintattiche e sulle modalità di organizzazione linguistica del testo. Il
lessico di una conversazione spontanea ha tratti di informalità maggiori di una conferenza scientifica, il linguaggio letterario presenta costruzioni sintattiche assenti o rare nel linguaggio delle e-mail e delle
chat ecc. Il nome nota può significare sia un’entità musicale, sia un
appunto scritto: la distribuzione di questi due sensi della parola è
chiaramente diversa se prendiamo in esame testi musicali, oppure testi burocratici, nei quali la prima accezione può essere molto rara o
non essere attestata. Particolari costruzioni sintattiche come il “che
polivalente” (il che con valore finale, o temporale come in l’anno che
ho incontrato Gianni) o il “ci attualizzante” (Mario c’ha dei grossi problemi) sono ormai tratti molto comuni della lingua parlata, ma hanno
una diffusione più ristretta nella lingua scritta. All’interno di quest’ultima ulteriori variazioni possono essere legate al grado di informalità
del testo stesso. Nel costruire un corpus rappresentativo di una lin36
1.
I DATI DELLA LINGUA
gua o di una sua varietà dobbiamo dunque selezionare un campione
di testi che «ci fornisca un’immagine il più accurata possibile delle
tendenze della varietà in questione, comprese le loro proporzioni»
(McEnery, Wilson, 2001, p. 30).
La linguistica dei corpora ha sottolineato l’importanza di adottare
criteri di selezione dei testi che accrescano il più possibile la rappresentatività del campione. La complessità dell’operazione di selezione
dipende dalla trasversalità o generalità della lingua che il corpus deve
rappresentare. Il caso più semplice è costituito dai corpora verticali o
specialistici, che si riferiscono a varietà linguistiche sufficientemente
ristrette o ben definibili. Alcuni degli esempi più comuni sono:
a) i corpora per lo studio della lingua di un autore, la cui estensione
coincide con la produzione dell’autore stesso; in questo caso i parametri di selezione possono essere il genere testuale (ad esempio poesia, prosa ecc.), il periodo di produzione ecc.;
b) i corpora di domini linguistici settoriali (ad esempio il linguaggio
giuridico, il gergo dei controllori del traffico aereo ecc.);
c) i corpora di testi che appartengono a generi particolari o di facile identificazione, come SMS, bollettini meteorologici, notiziari stampa ecc.
In questi casi i parametri di variabilità interna della lingua sono
limitati e comunque più facilmente controllabili. Lo spettro di variabilità ridotto e meglio delimitabile della varietà linguistica consente
quindi una maggiore accuratezza nella selezione dei testi e di conseguenza un alto grado di rappresentatività del corpus rispetto ai diversi tratti della lingua.
1.3.2. Corpora bilanciati
Un ordine di complessità molto maggiore è invece presentato dai corpora che vogliono essere rappresentativi di una lingua nel suo complesso. L’obiettivo dei corpora generali, come il BNC o Parole, è quello di essere risorse di riferimento trasversali di una lingua, per essere
usati come fonte di dati per creare modelli linguistici, lessici, grammatiche ecc. Nel caso dei corpora generali, la necessità di tenere traccia
dell’ampio spettro di variabilità dei tratti linguistici si concretizza nel
requisito del bilanciamento. Nella linguistica dei corpora il bilanciamento è infatti assunto come condizione essenziale per garantire la
rappresentatività di un corpus che voglia essere plurifunzionale e trasversale rispetto alle diverse varietà di una lingua. Un corpus generale
deve dunque essere bilanciato proprio per poter essere «diversificato
rispetto a un ampio spettro di tipi testuali» (Biber, 1993, p. 220). Il
37
TESTO E COMPUTER
bilanciamento presuppone una descrizione accurata della popolazione
di riferimento: è necessario dunque definire una mappa della lingua
tracciando a) i confini spaziali e temporali (quali testi sono inclusi o
esclusi dalla popolazione) e b) la tipologia dei testi (l’articolazione in
strati della popolazione). I criteri di bilanciamento differiscono molto
a seconda del corpus, anche se uno dei parametri più comuni è il
dominio tematico del testo. Un esempio di bilanciamento particolarmente sofisticato e articolato è quello del BNC, che rappresenta uno
standard qualitativo de facto nei corpora di ultima generazione. Prima
di tutto la popolazione testuale è articolata secondo la modalità di
produzione: il corpus contiene infatti 90 milioni di parole di testi
scritti e 10 milioni di parole di parlato trascritto. Ciascuna di queste
componenti è a sua volta organizzata secondo criteri diversi. Nella
parte di lingua scritta, i testi (comunque non anteriori al 1975) sono
stati selezionati sulla base del dominio (ad esempio scienze, arte, pensiero, economia e finanza ecc.) e del “medium” (ad esempio libri,
giornali, brochure, lettere ecc.). La componente di parlato trascritto è
invece ulteriormente suddivisa in una parte “demografica”, contenente trascrizioni di conversazioni spontanee, e una parte “contestualizzata”, formata da trascrizioni di parlato prodotto in situazioni o contesti comunicativi particolari (ad esempio conferenze, discorsi politici,
interviste ecc.), a loro volta ulteriormente classificati. Le conversazioni
della parte demografica sono invece bilanciate rispetto a sesso, età e
regione di provenienza del parlante.
Gli aspetti qualitativi del bilanciamento del corpus non possono
ovviamente essere disgiunti dalla dimensione quantitativa, dal momento che anche la grandezza del corpus incide sulla sua rappresentatività. I due fattori sono a prima vista del tutto indipendenti, poiché
l’aumento dell’estensione di un campione non è di per sé garanzia di
una sua maggiore rappresentatività (un corpus molto esteso può infatti non essere bilanciato). Un bilanciamento corretto richiede però
una quantità consistente di testi selezionati per le diverse tipologie individuate nella popolazione. Per tale ragione, la possibilità di gestire
quantità sempre maggiori di testi elettronici ha inciso positivamente
sulla rappresentatività dei corpora generali.
I corpora in
LC:
1.4
istruzioni per l’uso
I corpora costituiscono uno degli strumenti di lavoro essenziali del
linguista computazionale, che deve essere in grado di selezionare la
fonte di dati linguistici più appropriata in rapporto ai suoi specifici
38
1.
I DATI DELLA LINGUA
obiettivi e metodi di analisi. Le questioni che abbiamo illustrato nelle
sezioni precedenti non hanno dunque solo una valenza teorica ed
epistemologica, ma hanno anche ricadute importanti nella pratica della ricerca scientifica e tecnologica. Il linguista computazionale usa tipicamente un corpus come fonte di evidenza per definire modelli linguistici e sviluppare strumenti informatici per l’elaborazione della lingua: analizzare sintatticamente una frase, riconoscere il significato di
una parola in un particolare contesto, associare una forma lessicale
al suo lemma ecc. Un primo tipo di evidenza è qualitativa, ovvero
riguarda quali strutture devono entrare a far parte della competenza
linguistica rappresentata nel modello o nel programma: ad esempio
quali regole devono essere inserite nella grammatica di un analizzatore sintattico del testo. Un secondo tipo di evidenza è invece quantitativa, ovvero riguarda quante volte una certa espressione o struttura linguistica (parola, sequenza di parole, sintagma, frase ecc.) ricorre in un corpus: questo tipo di informazione quantitativa è la base
essenziale per l’applicazione di una vasta gamma di metodi statistici
in LC (cfr. CAPP. 5, 6 e 7). In entrambi i casi, la composizione e l’estensione del corpus giocano un ruolo fondamentale nel determinare
il grado di affidabilità dell’evidenza su cui analisi e applicazioni sono
sviluppate.
Il linguista computazionale deve dunque chiedersi: di che tipo di
corpus ho bisogno? Quanto sono affidabili i risultati delle analisi effettuate su di esso? In che misura è possibile estenderli a una popolazione più ampia? Che tipo di testi è in grado di analizzare un’applicazione basata su tecnologie linguistiche sviluppate a partire dai
dati ricavati da un certo corpus? Simili domande non hanno risposte
univoche poiché dipendono dal tipo di ricerca o contesto applicativo;
tuttavia tenteremo ugualmente di presentare alcune “istruzioni per
l’uso” dei corpora per le analisi computazionali.
1.4.1. I limiti della rappresentatività
I corpora sono raccolte di “osservazioni” dell’uso linguistico di parlanti reali. Come tali hanno spesso suscitato forti obiezioni circa la
loro effettiva possibilità di costituire fonti adeguate di evidenza linguistica. Chomsky infatti afferma che «impariamo di più sul linguaggio seguendo il metodo standard della scienza, che non consiste nell’accumulare enormi masse di dati non analizzati e nel cercare di
estrarre qualche generalizzazione da essi. La scienza moderna, almeno da Galileo è stata completamente differente. [...] Galileo non sarebbe stato interessato a registrazioni video di foglie che cadono, pal39
TESTO E COMPUTER
le che si muovono e rocce che rotolano giù dalle montagne» (Andor,
2004, p. 97) 1. Il limite intrinseco dei corpora, per quanto grande
possa essere la loro estensione, è quello di essere insiemi finiti di registrazioni di usi linguistici, e dunque di essere comunque parziali e
legati alla particolare prospettiva di osservazione sui dati. Al contrario, la conoscenza umana del linguaggio è intrinsecamente infinita,
poiché come parlanti di una lingua siamo in grado di generare e
comprendere un numero potenzialmente illimitato di espressioni.
Molte di queste potenzialità restano inespresse nel nostro uso linguistico, che è guidato e condizionato da prassi, abitudini, convenzioni,
limiti temporali ecc., ma nondimeno esse esistono come parte integrante della competenza di una lingua. L’affidabilità di un corpus
come fonte di dati linguistici dipende dunque dalla sua capacità di
fornirci un modello fedele del lessico e della grammatica di una lingua. Secondo Chomsky, il modello offerto da un corpus è destinato a
essere sistematicamente fuori scala e distorto, con un grande squilibrio nella distribuzione dei tratti linguistici: il numero di volte con
cui occorre una certa costruzione, così come la sua eventuale assenza,
sono inevitabilmente legati alle contingenze dell’uso e della selezione
dei testi, senza che ciò sia in qualche modo collegabile a tratti necessari della struttura del linguaggio. Secondo questa prospettiva, un
corpus è dunque al più una fonte di “curiosità” linguistiche, ma non
una fonte di evidenza a partire dalla quale sviluppare modelli della
conoscenza della lingua. Di qui deriva anche il sostanziale scetticismo
di Chomsky e di buona parte della linguistica di tradizione generativa
verso il valore autenticamente esplicativo delle inferenze statistiche ricavate da un corpus.
All’obiezione di Chomsky che nessun corpus è perfetto si potrebbe rispondere dicendo che nessun campione è perfettamente rappresentativo della sua popolazione. La linguistica dei corpora è andata
infatti affermando ripetutamente la natura relativa più che assoluta
della rappresentatività, un valore limite al quale ci si può avvicinare
progressivamente attraverso l’applicazione di una metodologia rigorosa: «il campionamento di un corpus non è assolutamente un esercizio
immediato. Comunque l’applicazione costante di rigorose metodologie statistiche dovrebbe garantire che il corpus sia il più possibile
1. Affermazioni simili costituiscono un leit motiv della grammatica generativa:
«usi osservati della lingua [...] sicuramente non possono costituire l’oggetto proprio
della linguistica, se questa vuole essere una disciplina seria» (Chomsky, 1965, p. 45).
40
1.
I DATI DELLA LINGUA
rappresentativo di una popolazione più ampia, all’interno dei limiti
pratici imposti dalla situazione contingente» (McEnery, Wilson, 2001,
p. 80). Per la linguistica dei corpora il controllo degli aspetti qualitativi di un corpus è lo strumento fondamentale per migliorarne la rappresentatività. Tutti i grandi corpora di riferimento disponibili oggi
sono di fatto figli di questa strategia: sono risorse estese di materiali
testuali trasversali rispetto alle diverse varietà di una lingua e ottenute
attraverso accurate opere di selezione.
Un corpus presenta comunque aspetti di arbitrarietà e parzialità,
legati ai criteri che vengono scelti per caratterizzare la sua lingua.
Ogni corpus è di fatto il risultato dell’applicazione di metodologie
di campionamento rigorose miste a soluzioni pragmatiche e all’intuizione del progettista del corpus. La selezione dei tipi di testi è
strettamente legata anche alla loro effettiva disponibilità: questioni
come i diritti di proprietà sui testi, la loro facilità di recupero ecc.
possono essere fattori critici nel determinare la composizione di un
corpus. Spesso, una certa tipologia di testo compare in un corpus
con un’alta percentuale semplicemente perché rappresenta tutto ciò
che è recuperabile nei tempi e con le risorse di un progetto. Basti
pensare, ad esempio, che la maggioranza dei prodotti di una lingua
sono orali, e nonostante questo la parte di lingua parlata di un corpus (quando è presente) è di solito largamente minoritaria (come
nel BNC), proprio per le difficoltà connesse alla registrazione e alla
trascrizione del parlato. Alcuni corpora nascono anche con una vocazione esplicitamente “opportunistica”, in quanto raccolgono materiale testuale selezionato semplicemente per la sua abbondante disponibilità in formato digitale. Nonostante non siano il risultato di
elaborate tecniche di bilanciamento, questi corpora possono comunque essere estremamente utili per il linguista computazionale. Ad
esempio, una delle fonti di dati per l’inglese più usate in LC è il
corpus composto da varie annate del “Wall Street Journal”. Similmente il corpus italiano La Repubblica è il risultato della collezione
di alcune annate dell’omonimo quotidiano, già disponibili in formato digitale. Anche se “la Repubblica” è un giornale “generalista” (e
comprende dunque articoli di argomenti diversi), non è certo possibile pensare a questo corpus come a una risorsa di riferimento per
la lingua italiana, dato che è composto da un unico tipo testuale.
Nondimeno, grazie anche alle sue dimensioni molto considerevoli,
questo corpus può costituire una fonte di dati importanti per ricerche e applicazioni linguistiche sull’italiano.
C’è inoltre almeno un punto della critica chomskiana cui la rap41
TESTO E COMPUTER
presentatività statistica, anche come nozione limite, non è in grado di
dare una risposta soddisfacente. Il concetto di corpus bilanciato visto
nel PAR. 1.3.2 presuppone una descrizione adeguata della popolazione
di testi da campionare. Purtroppo, però, la nozione di “tipo testuale”
su cui il bilanciamento si basa è di difficile caratterizzazione, così
come lo è spesso la nozione di lingua che il corpus vuole rappresentare. La composizione di un corpus, anche quando è realizzata seguendo rigorose tecniche statistiche di campionamento, è dunque
sempre dipendente dalla particolare prospettiva con cui organizziamo
e raggruppiamo i testi. Un corpus di una lingua è il prodotto di una
particolare interpretazione che diamo di essa e della sua articolazione
interna. Per tali motivi, più che la nozione di bilanciamento «quello
che conta è sapere che il proprio corpus è sbilanciato» (Atkins et al.,
1992, p. 6). In altri termini, il controllo dei criteri qualitativi di scelta
dei testi per migliorare la rappresentatività del corpus deve sempre
accompagnarsi alla consapevolezza dei limiti di questo processo. Se
vogliamo parafrasare un motto classico, l’imperativo per il linguista
computazionale (e no), deve essere: Conosci il tuo corpus!, ovvero sii
consapevole che esso è comunque frutto di una selezione effettuata
sulla base di particolari criteri e vincoli pratici.
I criteri di campionamento di un corpus devono essere resi il più
possibile espliciti e ben documentati. Al fine di garantire un corretto
uso del corpus, una documentazione accurata dei criteri di selezione
adottati è altrettanto importante dei criteri stessi. La natura intrinsecamente sbilanciata di tutti i corpora non li esclude dall’essere una
ricca fonte di evidenza linguistica, a patto che questa fonte sia usata
con cautela e con la consapevolezza di dove risieda lo sbilanciamento.
Ciò è particolarmente importante per usare i corpora come dati di
riferimento e confronto in esperimenti psicolinguistici, ma anche per
scopi applicativi. L’attenzione a questo problema in LC è testimoniata
dal diffondersi di studi e analisi che approfondiscono il rapporto tra
la distribuzione dei tratti linguistici e il tipo di corpus. Roland e Jurafsky (1998) analizzano la variabilità dei tipi di complementi retti da
un verbo (i cosiddetti schemi di sottocategorizzazione) in un insieme
di corpora generali e specialistici. In una direzione simile si muovono
studi come quello di Kilgarriff (2001) che hanno l’obiettivo di individuare metodi quantitativi per confrontare il grado di similarità tra
corpora sulla base della distribuzione dei tratti linguistici. Nella LC
esiste dunque un forte interesse a elaborare strumenti per controllare
la variabilità dei corpora. In generale, in ogni tipo di analisi computazionale è necessario verificare accuratamente se e in che misura i ri42
1.
I DATI DELLA LINGUA
sultati e le prestazioni ottenute siano stati influenzati dalla composizione del corpus da cui abbiamo estratto i dati linguistici. Se il corpus perfettamente rappresentativo non esiste, la LC è sempre più consapevole dell’importanza di metodi e strategie che permettano di controllare e limitare gli effetti dei possibili sbilanciamenti dei corpora.
1.4.2. Il corpus come benchmark
Oltre che dal suo grado di rappresentatività, la scelta di un corpus
come fonte di evidenza in LC può anche dipendere dalla misura in
cui esso costituisce uno standard di riferimento per un particolare
tipo di applicazione o analisi linguistica. Allo scopo di monitorare
lo stato di avanzamento in un dato ambito di ricerca è infatti spesso necessario confrontare le prestazioni di sistemi e modelli diversi,
e valutare le capacità di algoritmi o programmi di eseguire un certo
compito linguistico (ad esempio l’analisi sintattica di una frase). Diventa dunque essenziale disporre di un corpus di dati testuali selezionati con cura proprio allo scopo di “mettere alla prova” i nostri
programmi. Poiché il tipo di corpus scelto e la sua composizione
influenzano fortemente i risultati che otteniamo, una corretta valutazione comparativa tra metodi e sistemi diversi richiede l’uso dello
stesso tipo di dati. Per tale motivo, alcuni corpora hanno progressivamente assunto il ruolo di standard de facto per una certa comunità come dati di confronto (benchmark) nelle valutazioni. Nel caso
dei corpora generali, il BNC è uno standard riconosciuto per molti
tipi di analisi computazionali sulla lingua inglese. La stessa tendenza, però, vale anche per corpora specialistici e per applicazioni ben
definite: ad esempio, la comunità di ricerca che si occupa della classificazione automatica dei testi ha fatto del corpus Reuters-21578 la
collezione di dati di riferimento. Tra i molti fattori che contribuiscono a rendere un corpus uno standard di riferimento vi sono
chiaramente la qualità stessa del corpus, la sua facile disponibilità, e
anche il fatto che siano ben noti i suoi limiti e la sua composizione.
Nella prassi della LC la scelta di un corpus deve essere dunque guidata non solo dal suo grado di rappresentatività verso una lingua,
ma anche dal suo livello di rappresentatività per una comunità di
ricerca. Scegliere come base per le proprie elaborazioni computazionali un corpus che è uno standard riconosciuto per un certo tipo di
analisi può essere altrettanto importante della sua effettiva rappresentatività linguistica, proprio per garantire una migliore valutazione
comparativa dei risultati.
43
TESTO E COMPUTER
1.4.3. I corpora specialistici
I corpora specialistici sono estremamente utili per lo sviluppo di sistemi che siano fortemente adattati a un particolare tipo di linguaggio.
Come si è osservato nel PAR. 1.3.1, i confini ristretti e ben definiti della lingua di riferimento permettono infatti di sviluppare in tempi rapidi corpora di dimensioni contenute ma ugualmente dotati di un alto
grado di rappresentatività. Al posto dei grandi corpora generali, per il
linguista computazionale è dunque possibile (e spesso anche preferibile) optare per corpora molto focalizzati su un particolare dominio di
interesse. Si è così assistito al proliferare di corpora verticali per domini linguistici settoriali o per particolari tipi testuali: notiziari radio televisivi, annunci di conferenze, conversazioni telefoniche, agenzie stampa (come nel caso della collezione Reuters citata sopra) ecc.
Un problema connesso all’uso dei corpora specialistici è che l’evidenza linguistica che essi forniscono è spesso generalizzabile solo in
maniera limitata, proprio per i tratti talvolta altamente idiosincratici
della loro popolazione di riferimento. Concentrarsi su corpora specialistici per le analisi computazionali significa dunque rinunciare a modellare la competenza linguistica generale e trasversale di una lingua?
La risposta in realtà è no, o almeno non necessariamente; quello che
cambia è piuttosto il modo in cui si può affrontare l’analisi computazionale della lingua nel suo complesso. È infatti possibile sviluppare
modelli e strumenti che operano su ambiti linguistici ristretti, ma che
sono al tempo stesso dotati della capacità di estendere e adattare rapidamente tale competenza a nuove varietà della lingua. Questo approccio si accompagna a un modo diverso di intendere la stessa nozione di lingua generale. A tale proposito Biber (1998, p. 248) afferma che «non esiste niente che si possa definire una “lingua generale”;
ciascun registro ha i suoi propri usi»; lo scopo del bilanciamento dei
corpora generali è esattamente quello di controllare questa diversità
cercando di rappresentarla il più possibile all’interno della stessa risorsa di informazione. In alternativa, possiamo concepire la competenza generale di una lingua come il risultato di un processo di estensione progressiva a partire da competenze settoriali che vengono gradualmente ampliate e generalizzate grazie a un’incredibile capacità di
adattamento a nuove varianti. Due varietà della stessa lingua mantengono comunque intersezioni che consentono di estendere le nostre
competenze linguistiche dall’una all’altra, attraverso un’operazione di
adattamento la cui complessità dipende chiaramente dal grado in cui
queste varietà differiscono. La capacità di proiettare la propria conoscenza della lingua su nuovi domini imparando nuovi termini lessica44
1.
I DATI DELLA LINGUA
li, costruzioni e usi è parte integrante della competenza linguistica
umana. Una delle sfide principali della LC è proprio comprendere e
modellare questa capacità. Invece di sviluppare sistemi dotati di conoscenze linguistiche generali, ricavate da fonti di dati generali, si
preferisce spesso sviluppare sistemi e modelli “specializzati” su domini linguistici locali, e dunque su dati provenienti da corpora verticali,
dotando però allo stesso tempo tali sistemi di capacità di adattamento
linguistico sempre più sofisticate.
1.4.4. Corpora di addestramento
In quei settori della LC in cui maggiormente vengono usati metodi di
analisi statistica, si è andata recentemente affermando una visione puramente quantitativa dei corpora come fonte di dati. Questa si può
riassumere citando un’espressione abbastanza comune nella letteratura scientifica: There is no data like more data, ovvero avere tanti dati
equivale ad avere buoni dati. A tale proposito Manning e Schütze
(1999, p. 120) affermano: «nel trattamento automatico della lingua
basato su metodi statistici, generalmente si ha a disposizione come
corpus una certa quantità di dati su un qualche dominio di interesse,
senza avere nessuna informazione su come il corpus è stato costruito.
In casi simili, avere più testo per addestrare il sistema è generalmente
più utile di ogni preoccupazione di bilanciamento, e si dovrebbe semplicemente utilizzare tutto il testo disponibile».
L’applicazione dei metodi statistici all’analisi computazionale del
linguaggio si basa infatti sulla possibilità di costruire modelli di un
fenomeno linguistico a partire dagli eventi osservati all’interno di un
corpus, detto corpus di addestramento (training corpus: cfr. PAR. 6.2.1).
Gli eventi osservati possono essere le parole del corpus, i loro significati o categorie sintattiche, ma anche espressioni e strutture più complesse come sequenze di parole, sintagmi, frasi, sequenze di frasi ecc.
In un corpus di addestramento è possibile raccogliere dati quantitativi sull’occorrenza di particolari eventi linguistici. I metodi statistici
permettono quindi di trasformare le regolarità rilevate nei dati in modelli con cui effettuare previsioni su un dato fenomeno linguistico.
Questi modelli sono usati per l’analisi computazionale del linguaggio,
ad esempio per selezionare automaticamente il significato di una parola in un contesto (nella frase Il violinista suonò una nota la parola
nota si riferisce a un’entità musicale), per determinare l’analisi sintattica corretta di una frase (in Giorgio ha mangiato il panino con le
mani il sintagma preposizionale con le mani è un complemento del
verbo mangiare), oppure per farne la traduzione in un’altra lingua.
45
TESTO E COMPUTER
L’affidabilità e generalità dei modelli statistici sviluppati dipendono
da due fattori: quali espressioni sono attestate nel nostro corpus e
quante volte sono attestate, dal momento che queste e solo queste
sono le informazioni che vengono usate per elaborare il modello. Poiché il corpus è comunque una porzione limitata di una popolazione
linguistica, chiaramente ci sono sempre eventi linguistici che non siamo in grado di osservare, ovvero parole o costruzioni che semplicemente il nostro corpus non riporta: in tali casi non possiamo decidere
se l’assenza di queste costruzioni sia correlata a qualche proprietà significativa della lingua, oppure sia dovuta semplicemente al modo in
cui abbiamo costruito il corpus. Anche relativamente agli eventi attestati, però, in un corpus vi è sempre una grande quantità di eventi
linguistici rari, ovvero che ricorrono pochissime volte (cfr. PARR. 5.4 e
5.5). Dall’altro lato, è possibile inferire regolarità statistiche significative per un certo dominio solo se queste sono derivate dall’osservazione di un numero consistente di eventi. Se infatti osserviamo un
evento una volta sola, non possiamo sapere se sia accaduto per caso,
o se faccia parte di un’effettiva regolarità del mondo. Di conseguenza, poiché i dati linguistici di un corpus sono rari, è spesso estremamente difficile ricavare da essi modelli statistici affidabili.
L’impatto negativo della rarità dei dati fa sì che la possibilità di
accedere a quantità di dati linguistici sempre crescenti renda di fatto
secondario il vincolo della loro rappresentatività. Il bilanciamento di
un corpus, comunque sofisticato, non può infatti compensare la mancanza di dati sufficienti per ricavarne inferenze affidabili. In questo
contesto nasce dunque l’ipotesi che la fonte di dati migliore sia semplicemente quella con l’estensione maggiore, poiché questa aumenta
la probabilità di osservare gli eventi rilevanti ai fini dei modelli linguistici da costruire. Come abbiamo visto nel PAR. 1.3, la linguistica dei
corpora si è concentrata sul controllo degli aspetti qualitativi della selezione dei testi, proprio per ridurre l’eventualità che tratti linguistici
rilevanti non siano rappresentati nel campione. La capacità dei computer di gestire dimensioni sempre più grandi di dati elettronici rende plausibile esplorare una strada alternativa: ampliare la quantità dei
materiali testuali raccolti, sperando che le grandi dimensioni permettano alla fine di raccogliere dati linguistici sufficienti per lo sviluppo
di modelli e analisi affidabili. Questo approccio “estensivo” al trattamento computazionale del linguaggio è reso praticabile e attraente
anche dal fatto che è oggi disponibile una vera e propria “miniera” di
testi elettronici, dalla quale si possono attingere in maniera pressoché
illimitata i dati per le analisi linguistiche: il World Wide Web.
46
1.
I DATI DELLA LINGUA
1.4.5. Usare il web come corpus
Che il web sia la più grande collezione di testi esistente è indiscutibile. A questo si aggiunge un vantaggio fondamentale per la LC: si tratta di materiale testuale in formato elettronico. Il web è dunque una
vera miniera a cielo aperto per gli studi linguistici: i suoi filoni sono
in continua espansione e di fatto ancora largamente inesplorati. Lawrence e Giles (1999) stimano che all’epoca il web contenesse circa 6
terabyte di pagine di testo accessibili (un terabyte equivale a mille miliardi di byte). Nel 2003, la quantità di pagine indicizzate da Google è
più che triplicata, arrivando a 20 terabyte di testo accessibile. Calcolando una media di 10 byte per parola, Kilgarriff e Grefenstette
(2003) stimano una quantità di testo disponibile sul web equivalente
a circa 2.000 miliardi di parole! Sono stime approssimative, ma sicuramente vere per difetto, in quanto sono legate al numero di pagine
raggiunte e indicizzate dai motori di ricerca, e dunque coprono in
realtà solo una parte del testo digitale che fluttua nel cyberspazio. Le
dimensioni di testo nel web sono dunque impressionanti, così come
lo è il loro tasso di espansione.
Il web è anche per sua natura una risorsa di informazione testuale
multilingue, sebbene tuttora con una netta prevalenza dell’inglese: Xu
(2000) stima ad esempio che il 75% delle pagine web indicizzate sia
in inglese, seguito dal giapponese con appena il 6,8%. L’italiano è
fermo allo 0,9%, superato dal cinese all’1,5% e dallo spagnolo
all’1,1%. Anche in questo caso i dati sono destinati a mutare presto,
in quanto la tendenza ormai consolidata è quella di un aumento della
presenza sul web di lingue diverse dall’inglese, soprattutto per quanto
riguarda le lingue asiatiche come il cinese. Se poi guardiamo alla
quantità di testo disponibile sul web per lingua, si osserva che anche
lingue “minoritarie” sono rappresentate da grandi numeri in termini
di parole. La TAB. 1.3 riporta alcuni dati citati da Kilgarriff e Grefenstette (2003), dai quali si ricava che l’italiano, a dispetto di una presenza fortemente minoritaria, può comunque contare su quasi 2 miliardi di parole, di nuovo con stime calcolate per difetto e in crescita
continua.
Dal punto di vista dei puri dati quantitativi il web è di gran lunga
vincente rispetto a qualunque corpus generale esistente. Resta però
da valutare in che modo possa costituire una fonte di dati linguistici.
Prima di tutto il web è estremamente importante come risorsa di materiali testuali per costruire corpora. I testi disponibili appartengono
infatti a un ampio spettro di generi, domini ecc. dai quali è possibile
attingere per creare corpora generali e specialistici, monolingui e mul47
TESTO E COMPUTER
TABELLA 1.3
Numero di parole sul web per lingue in alfabeto latino sulla base dell’indicizzazione di Altavista nel 2001
Lingua
Numero di parole sul web
Albanese
Basco
Irlandese
Catalano
Finlandese
Italiano
Spagnolo
Francese
Tedesco
Inglese
10.332.000
55.340.000
88.283.000
203.592.000
326.379.000
1.845.026.000
2.658.631.000
3.836.874.000
7.035.850.000
76.598.718.000
Fonte: Kilgarriff, Grefenstette (2003).
tilingui. A questo scopo possono essere di ausilio “agenti” come web
robots, spiders, crawlers e bots, nomi diversi con cui sono chiamati
quei programmi che navigano sul web passando di sito in sito e che
scaricano automaticamente sul computer le pagine di testo visitate.
Grazie al web multilingue è anche possibile facilitare la raccolta di
corpora paralleli o lo sviluppo di risorse testuali per le cosiddette
“lingue minoritarie”, che sono comunque attestate sul web in maniera
consistente (cfr. TAB. 1.3). Il web non è però solo una “miniera” di
testi da selezionare per costruire corpora, ma può diventare anche
una fonte diretta di dati linguistici. Recentemente si è infatti andato
diffondendo un uso diverso del web, in cui il web stesso è il corpus su
cui vengono effettuate le analisi computazionali.
In che senso il web può essere considerato come un corpus? Senza dubbio il web non rientra nella definizione più restrittiva di corpus come campione rappresentativo. Se anche ci limitiamo alla porzione del web in italiano, essa non è rappresentativa di niente, se non
di se stessa. Il web è anarchico e dinamico per eccellenza, con un
elevato tasso di volatilità dei suoi testi. Sebbene sia immenso, molte
varietà di una lingua non sono comunque rappresentate, come ad
esempio il parlato. Inoltre, il mezzo elettronico ha determinato esso
stesso la nascita di un particolare tipo di varietà, la lingua del web,
fatta di un suo lessico e talvolta anche di particolari costruzioni sintattiche. In questo senso, dunque, come risorsa di riferimento per
una lingua, la rappresentatività del web è inferiore a quella di qualunque corpus bilanciato esistente. Dall’altro lato, il web è comunque
una collezione di testi da utilizzare come fonte di dati per le analisi
48
1.
I DATI DELLA LINGUA
linguistiche, e in questo senso la sua enorme estensione lo rende un
terreno estremamente promettente per le osservazioni linguistiche.
I tipi di dati linguistici che possiamo estrarre dal web sono molteplici. Ad esempio, il web ci può fornire attestazioni di errori ortografici o varianti rare. Se su Google cerchiamo la stringa daccordo otteniamo in risposta circa 48.000 pagine che la contengono, a fronte di
più di 330.000 che il motore di ricerca restituisce se cerchiamo d’accordo. Allo stesso modo, cercando coscienza, Google restituisce più di
320.000 pagine, a fronte delle “appena” 6.000 che otteniamo cercando coscenza. Questo tipo di dati, che è difficilmente attestato nei corpora tradizionali, può essere estremamente utile anche a fini applicativi, ad esempio per migliorare un programma di correzione ortografica. I corpora, in particolare quelli generali, sono usati come risorse
di riferimento per lo sviluppo di dizionari o lessici. Anche in questo
ambito il web può essere utilizzato come fonte di dati linguistici. Il
dinamismo del linguaggio nel web permette ad esempio di ricavare
informazioni interessanti su neologismi o nuovi sensi delle parole:
una ricerca su Google riporta più di 7.000 pagine che contengono
l’infinito del verbo messaggiare, un neologismo del linguaggio giovanile che si riferisce alla pratica di inviare SMS. A fronte di questi usi più
semplici, è possibile impiegare il web anche per estrarre tipi di informazioni linguistiche molto più complesse, attraverso procedure di ricerca non dissimili da quelle disponibili per estrarre i dati dai corpora tradizionali (cfr. PAR. 7.2.1). Lo sviluppo di nuove metodologie di
esplorazione del web permetterà così di sfruttare in maniera sempre
più sofisticata la ricchezza e la vivacità di questa “miniera” testuale.
Le dimensioni gigantesche del web possono essere utilizzate in
particolare per alleviare il problema della rarità dei dati linguistici
(data sparseness). Sebbene paradossalmente anche nel web ci siano
espressioni linguistiche rare, è vero però che per molti tipi di strutture (semplici parole, ma anche configurazioni più complesse) è possibile ottenere quantità sufficientemente alte di attestazioni, almeno
quelle necessarie per rendere più affidabili e più generali i nostri modelli statistici (cfr. CAP. 6). È per questa ragione che sempre più di
frequente il web è utilizzato come corpus di addestramento per l’applicazione di metodi di analisi statistica. Chiaramente, uno dei problemi da affrontare è la quantità ingente di “rumore”, ovvero di informazione non rilevante, che l’utilizzo del web inevitabilmente comporta e che quindi deve essere filtrato per ottenere dati affidabili.
L’uso del web come corpus è di fatto solo agli albori e solleva
interrogativi importanti. Non è ancora possibile affermare se e in che
misura i nuovi ordini di grandezza dei dati disponibili sul web sa49
TESTO E COMPUTER
ranno in grado di portare un effettivo contributo di innovazione negli
studi computazionali sul linguaggio. Ci si può comunque chiedere se
l’espansione del web e lo sviluppo di metodi e strumenti per la sua
esplorazione renderanno obsoleta la nozione più standard di corpus.
Si può immaginare che il web non sostituirà i corpora tradizionali,
ma piuttosto li affiancherà come una nuova e diversa fonte di informazione linguistica. Per molti aspetti essi sono infatti complementari:
sterminata e anarchica l’una, più limitati ma frutto di rigorosi metodi
di selezione gli altri. Saranno dunque di fatto le nostre esigenze di
ricerca a doverci indicare di volta in volta se affidarci ai dati selezionati estratti da corpora o a quelli molto più numerosi, ma inevitabilmente anche più “rumorosi” del web.
1.5
Considerazioni conclusive
I corpora offrono al linguista computazionale l’opportunità di sviluppare modelli e applicazioni sulla base di dati linguistici “ecologici”
direttamente estratti dal loro “habitat” naturale, il testo. Se consideriamo un corpus alla stregua di un’osservazione naturalistica, i parametri che determinano la sua conformazione sono la quantità e la
qualità dei prodotti della lingua che esso registra. Queste due dimensioni incidono fortemente sul modo in cui i dati ricavati da un corpus
possono essere proiettati in un modello descrittivo ed esplicativo delle strutture e dinamiche di una lingua o del linguaggio nel suo complesso. In alcuni casi la necessità di accedere a quantità ingenti di
dati linguistici può far passare in secondo piano il ruolo dei criteri di
selezione dei testi: anche il web, con la sua struttura multiforme, può
così diventare un’utile fonte di evidenza linguistica. Dall’altro lato, è
importante che la valutazione del grado di rappresentatività dei dati
che utilizziamo agisca sempre come un orizzonte di riferimento nelle
nostre analisi. Adottare criteri precisi ed espliciti di selezione dei testi
può dunque agire come un meccanismo di controllo qualitativo dei
dati raccolti, pur nella consapevolezza che un corpus è comunque ancorato a una particolare prospettiva sulla lingua, scelta con l’obiettivo
di ottenere un punto di osservazione ottimale su di essa. Il linguista
computazionale deve dunque sempre valutare in che misura i risultati
di un’analisi o esperimento possano dipendere dalla scelta e dalla natura dei dati a disposizione, come condizione essenziale per garantire
una corretta generalizzazione dei modelli teorici che su di essi vengono elaborati.
50
1.
I DATI DELLA LINGUA
Per saperne di più
BIBER D.
(1993), Using Register-Diversified Corpora for General Language Studies, in “Computational Linguistics”, n. 19 (2), pp. 219-41.
ID. (1998), Corpus Linguistics. Investigating Language Structure and Use,
Cambridge University Press, Cambridge.
MANNING C. D., SCHÜTZE H. (1999), Foundations of Statistical Natural Language Processing, The MIT Press, Cambridge (MA).
a
MCENERY T. E., WILSON A. (2001), Corpus Linguistics, 2 ed., Edinburgh University Press, Edinburgh.
SINCLAIR J. (1991), Corpus, Concordance, Collocation, Oxford University
Press, Oxford.
THOMPSON H. (2000), Corpus Creation for Data-Intensive Linguistics, in R.
Dale, H. Moisl, H. Somers (eds.), Handbook of Natural Language Processing, Marcel Dekker, New York, pp. 507-23.
Siti web
Language Data Consortium – LDC – http://www.ldc.upenn.edu/
Evaluations and Language Resources Distribution Agency – ELDA – http://
www.elda.org
European Language Resources Association – ELRA – http://www.elra.info
International Computer Archive of Modern and Medieval English – ICAME –
http://helmer.aksis.uib.no/icame.html
David Lee’s Bookmarks for Corpus-based Linguists – http://devoted.to/corpora
British National Corpus – http://www.natcorp.ox.ac.uk/
American National Corpus – http://americannationalcorpus.org/
Childes – http://childes.psy.cmu.edu/
Coris – http://corpus.cilta.unibo.it:8080/coris_ita.html
Corpus La Repubblica – http://sslmit.unibo.it/repubblica/
Parole – http://www.ilc.cnr.it/parole/parole.html
Clips – http://www.cirass.unina.it
C-Oral-Rom – http://lablita.dit.unifi.it/coralrom/
ItalNet – http://ovisun198.ovi.cnr.it/italnet/
Bank of English – http://www.collinswordbanks.co.uk/
51
2
Il testo e la sua codifica digitale
Come abbiamo visto nel capitolo precedente, il corpus, in quanto collezione di testi digitali, rappresenta la principale fonte di dati per la LC.
In questo capitolo affronteremo i problemi legati alla rappresentazione
digitale, o codifica, del testo. Useremo qui il termine testo in senso esteso, per riferirci a qualsiasi collezione di prodotti linguistici, siano essi
rappresentati da un singolo spezzone coerente o da un insieme di testi
differenti, selezionati e strutturati sulla base di specifici criteri di composizione o raccolti in modo opportunistico e via dicendo.
Quale che sia la sua lunghezza o il suo argomento, un testo è una
struttura complessa, che contiene informazioni di tipo diverso, articolate su più livelli: la sequenza di caratteri che si combinano a formare
parole, le quali entrano a far parte, a loro volta, di una rete di relazioni e strutture linguistiche astratte e si raggruppano in unità testuali
con funzioni specifiche, come titoli, capitoli e paragrafi. La rapidità e
l’apparente assenza di sforzo con le quali siamo in grado di accedere
ai molteplici livelli della struttura testuale per estrarne informazioni
non diminuiscono la complessità di questa operazione e devono anzi
farci riflettere sul bagaglio di conoscenze astratte e competenze specifiche che essa richiede. Un computer non possiede queste conoscenze
ed è in grado di vedere e manipolare solo sequenze di codici binari.
In questo capitolo cercheremo di spiegare come sia possibile predisporre un testo perché un computer possa avventurarsi al suo interno
e coglierne i tipi di informazione che sono al cuore dell’indagine linguistica. Come vedremo, la codifica digitale del testo corrisponde a
questo lavoro delicato di preparazione.
2.1
La codifica digitale del testo: il problema
I computer memorizzano ed elaborano dati sotto forma di sequenze
di due soli simboli 0 e 1 (detti bit dall’inglese BInary digiT, “cifra
binaria”), aggregati in sequenze di 8 cifre (byte). I testi – come anche
53
TESTO E COMPUTER
2.1
Frammento testuale da Le avventure di Pinocchio
FIGUR A
i suoni, le immagini, i dati numerici ecc. – per essere elaborati o trasmessi da un programma devono dunque avere una rappresentazione
binaria. Ciò equivale a dire che ciascun carattere alfanumerico che
compone il testo deve essere rappresentato nei termini di un codice
binario composto da una sequenza di bit. Lo stesso vale per i segni di
interpunzione e alcuni caratteri di controllo come l’accapo o il tabulatore.
Tuttavia, la codifica del testo non si esaurisce nella semplice rappresentazione binaria della sequenza dei caratteri che lo compongono. Un testo, infatti, è molto di più di una semplice sequenza di caratteri. Accanto a questa dimensione lineare, ne esiste un’altra lungo
la quale si sviluppano i livelli di organizzazione del testo e la sua
54
2.
IL TESTO E LA SUA CODIFICA DIGITALE
struttura linguistica. Ne consegue che con una codifica che si limiti
ad associare a ogni carattere del testo una rappresentazione binaria, vi
sarà inevitabilmente perdita di informazione, come illustrato dal semplice esempio che segue.
Si considerino il frammento testuale della FIG. 2.1, estratto da Le
avventure di Pinocchio di Carlo Collodi 1, e quanto otteniamo se consideriamo semplicemente la sequenza dei caratteri che lo compongono, come riportato nell’esempio 2.1.
ESEMPIO 2.1
Il testo come sequenza di caratteri
Le avventure di Pinocchio
Capitolo I
Come andò che Maestro Ciliegia, falegname, trovò un pezzo
di legno, che piangeva e rideva come un bambino.
C’era una volta...
– Un re! – diranno subito i miei piccoli lettori.
– No, ragazzi, avete sbagliato. C’era una volta un pezzo
di legno.
Non era un legno di lusso, ma un semplice pezzo da catasta,
di quelli che d’inverno si mettono nelle stufe e nei caminetti per accendere il fuoco e per riscaldare le stanze.
[...]
Dal loro confronto si ricava che, per quanto i due testi siano del tutto equivalenti dal punto di vista dei caratteri, il testo dell’esempio
2.1 contiene soltanto una parte dell’informazione convogliata nella
FIG. 2.1. Qui, ad esempio, le diciture Le avventure di Pinocchio e Capitolo I rappresentano un’informazione meta-testuale riguardante, rispettivamente, il titolo dell’opera, ripetuto nell’intestazione di ogni
pagina, e la suddivisione in capitoli. La rimanente parte del frammento rappresenta il testo vero e proprio. Tuttavia, l’esempio 2.1
non distingue il titolo Come andò che Maestro Ciliegia, falegname,
trovò un pezzo di legno, che piangeva e rideva come un bambino dal
corpo del capitolo. Infatti, i caratteri in sequenza sono rappresentati
tutti sullo stesso piano e il testo è soltanto una replica molto parziale
dell’originale.
1. C. Collodi (1983), Le avventure di Pinocchio, Arnoldo Mondadori Editore
S.p.A., Milano, I edizione e-book Reader, ottobre 2000, scaricabile gratuitamente dall’indirizzo http://ebook.mondadori.com/ebook/gratuiti.jsp.
55
TESTO E COMPUTER
Questa perdita di informazione si è verificata perché una parte
dell’informazione del testo non è convogliata dalla sequenza dei caratteri che lo compongono, ma è piuttosto implicitamente veicolata
attraverso la sua formattazione. Questo è il caso, ad esempio, dell’informazione relativa agli aspetti macrostrutturali (ovvero la suddivisione logica in sezioni, capitoli, paragrafi ecc.) e alle coordinate metatestuali (ad esempio il nome dell’autore, il titolo ecc.). Per rendere
esplicito questo tipo di informazioni è necessaria una codifica che
non opera più al livello dei singoli caratteri, ma si basa sull’identificazione di intere porzioni di testo e su indicazioni esplicite della loro
funzione.
Esiste, infine, un ulteriore livello di informazione testuale, fondamentale dal punto di vista del linguista, che né il frammento di FIG.
2.1, né a maggior ragione l’esempio 2.1 rappresentano, nemmeno in
modo indiretto: la struttura linguistica del testo. È questa, infatti, la
chiave primaria di accesso al suo contenuto. Ad esempio, per interpretare il significato della frase Maestro Ciliegia, falegname, trovò un
pezzo di legno, che piangeva e rideva come un bambino è necessario
ricostruire le strutture e le relazioni linguistiche che coinvolgono le
parole in questione. In primo luogo, condizione necessaria per individuare cosa Maestro Ciliegia ha rinvenuto è identificare la sequenza un
pezzo di legno come un sintagma nominale complemento oggetto di
trovò. In seconda battuta, ricollegare il pronome relativo che al suo
antecedente permette di riconoscere che ciò che piangeva e rideva
era proprio il pezzo di legno trovato da Maestro Ciliegia.
Strutture linguistiche come queste sono nascoste nel testo (per
esempio, una frase non evidenzia l’inizio e la fine dei suoi costituenti
sintattici), ma, come vedremo più avanti (cfr. CAP. 8), devono essere
codificate in modo esplicito se vogliamo renderle accessibili al computer e disponibili per ulteriori ricerche ed elaborazioni. La codifica
della struttura linguistica sottostante al testo pone dunque lo stesso
tipo di problemi, sebbene con un ordine di complessità maggiore,
della rappresentazione della sua organizzazione in capitoli, paragrafi,
capoversi e periodi.
2.2
Livelli di codifica
L’esempio del paragrafo precedente mostra come la rappresentazione
binaria di un testo non sia riducibile alla semplice codifica dei caratteri che lo compongono, ma si configuri piuttosto come un’operazione complessa, logicamente articolata su due livelli:
56
2.
IL TESTO E LA SUA CODIFICA DIGITALE
1. una codifica di basso livello, o codifica di livello zero, che riguarda
la rappresentazione binaria della sequenza ordinata dei caratteri del
testo;
2. una codifica di alto livello, che arricchisce il testo codificato al livello zero con informazione relativa alla struttura linguistico-testuale
e, più in generale, con informazione interpretativa di un qualche tipo;
questo tipo di codifica a sua volta richiede:
a) la selezione degli aspetti strutturali e funzionali del testo che si
considerano rilevanti e che si intende rendere accessibili al calcolatore
attraverso una rappresentazione esplicita e astratta;
b) la scelta di un linguaggio di rappresentazione, leggibile e manipolabile dal computer, che permetta di codificare informazioni aggiuntive rispetto a quelle della codifica di livello zero.
La codifica di livello zero rende dunque disponibile l’intera sequenza di caratteri di un testo, ma non consente di rappresentare
l’articolazione del testo in sotto-sequenze funzionalmente distinte e
variamente correlate tra loro. È la codifica di alto livello che permette
di colmare questa lacuna rendendo esplicita l’organizzazione del testo
o qualsiasi interpretazione, anche di tipo linguistico, si voglia associare
esplicitamente a quest’ultimo. Le sezioni che seguono illustrano più
in dettaglio questi due livelli di codifica.
2.3
La codifica di livello zero
La codifica dei caratteri, o codifica di livello zero, consiste nell’associare a ciascun carattere del testo un codice numerico, cioè un numero
(binario) che lo identifica univocamente. Ai fini della codifica binaria,
un carattere è un’entità astratta, distinta dalle sue possibili rappresentazioni grafiche (o glifi), ovvero dai modi in cui esso può apparire
secondo forma, dimensione ecc. Ad esempio, la “p” in grassetto (p) e
la “p” corsiva (p) sono considerati lo stesso carattere della “p” normale (p), anche se si differenziano tutte sul piano grafico. In maniera
simmetrica, due simboli possono essere graficamente indistinguibili
eppure corrispondere a caratteri diversi: ad esempio, le lettere degli
alfabeti latino, greco e cirillico maiuscoli sono graficamente identiche,
ma costituiscono nondimeno caratteri diversi dal punto di vista della
codifica digitale di un testo, perché appartengono ad alfabeti differenti.
Un set di caratteri (o codice) è una tabella di associazioni biunivoche (1 a 1) tra gli elementi di un repertorio di caratteri e codici numerici (detti punti di codice). Nelle tabelle di caratteri, i codici sono
57
TESTO E COMPUTER
tipicamente riportati in base decimale, ottale o esadecimale 2. Ciascun
punto di codice è rappresentato in forma binaria come una sequenza
di bit. La modalità di rappresentazione binaria dei punti di codice
viene chiamata codifica di carattere (character encoding). Il numero dei
caratteri codificabili dipende dai punti di codice disponibili, e questi
dipendono a loro volta dal numero di cifre binarie usate per la loro
codifica. Avendo a disposizione solo 2 cifre binarie sarebbe possibile
rappresentare solo 4 punti di codice (ad esempio 00, 10, 01, 11), utilizzabili per codificare 4 caratteri diversi. Generalizzando, con n cifre
binarie è possibile codificare 2n caratteri differenti.
I set di caratteri sono associazioni convenzionali tra caratteri e codici numerici. La necessità di produrre e scambiare testi in formato
digitale ha portato alla definizione di set di caratteri standard. Sfortunatamente non esiste ancora un’unica convenzione condivisa da tutti i
programmi per la codifica dei caratteri (a parte ASCII, cfr. infra). La
tendenza odierna è comunque quella di procedere verso una sempre
maggiore standardizzazione e internazionalizzazione della codifica binaria dei testi. L’avvento del web ha portato alla necessità di fornire
una rappresentazione digitale per un numero sempre maggiore di sistemi grafici, e dunque di aumentare la dimensione dei repertori di
caratteri codificati, così come di garantire la completa interscambiabilità dei testi digitali.
2.3.1. Il set di caratteri
ASCII
Il più noto e più diffuso set di caratteri è ASCII (American Standard
Code for Information Interchange), che rappresenta il primo codice
standard per la rappresentazione binaria dei caratteri, e costituisce il
nucleo comune anche di tutti i set di caratteri più estesi. Nel codice
ASCII ciascun carattere è codificato con un byte, ma di questo sono
2. Si tratta di diversi sistemi di numerazione per la rappresentazione dei numeri
interi. Sono tutti sistemi di natura posizionale (il valore di una cifra dipende da dove
essa si colloca rispetto alle altre) e che differiscono al livello della base sottostante.
Per esempio, nel sistema di numerazione decimale, detto anche sistema in base 10, si
fa uso delle dieci cifre (da 0 a 9) per la rappresentazione dei valori numerici. Il sistema di numerazione ottale, ovvero in base 8, si avvale di otto cifre (da 0 a 7). La
numerazione esadecimale, ovvero in base 16, funziona in modo analogo, con la differenza che si avvale di 16 cifre: le cifre numeriche da 0 a 9, più le prime 6 lettere
dalla A alla F per i valori successivi (in pratica, la lettera A in posizione zero corrisponde al numero 10 e la lettera F al numero 15). Per dare un esempio concreto, la
rappresentazione ottale del numero decimale 13 è, per esempio, 15 e quella esadecimale è D.
58
2.
IL TESTO E LA SUA CODIFICA DIGITALE
usate per la rappresentazione del codice numerico solo le prime 7 cifre (l’ottavo bit è usato come bit di “parità”, per verificare la corretta
trasmissione del codice). Il set di caratteri ASCII è formato quindi da
128 ( = 27) caratteri. Nella tabella ASCII, 33 punti di codice (0-32 e
127, in notazione decimale) sono associati a caratteri di controllo (ad
esempio i caratteri di accapo, tabulazione, escape, backspace ecc.) che
non sono usati per rappresentare segni grafici. I restanti 95 punti di
codice codificano le cifre da 0 a 9, i più comuni segni di punteggiatura e i caratteri alfabetici maiuscoli e minuscoli. La codifica binaria
della parola Pinocchio secondo il codice ASCII è la seguente:
TABELLA 2.1
La codifica ASCII della parola Pinocchio
Codice binario
Codice decimale
Carattere
01010000
01101001
01101110
01101111
01100011
01100011
01101000
01101001
01101111
80
105
110
111
99
99
104
105
111
P
i
n
o
c
c
h
i
o
L’insieme dei caratteri alfabetici rappresentato in ASCII è strettamente
limitato alle lettere dell’alfabeto anglosassone, e mancano, ad esempio, i caratteri con diacritici come accenti, dieresi ecc. Per ovviare a
questa limitazione, il codice ASCII è stato esteso per poter codificare
anche i caratteri necessari all’italiano, al tedesco, al francese ecc. Sono
nate dunque varie estensioni di ASCII caratterizzate dall’uso di 8 bit
per la codifica, passando così da 128 a 256 ( = 28) punti di codice
disponibili. Sebbene queste estensioni coincidano tutte nei punti di
codice da 0 a 127 (cui vengono assegnati gli stessi caratteri del set
ASCII), differiscono però per il modo in cui sono allocati i punti di
codice dal 128 al 255, con la conseguenza che, a seconda del sistema
operativo, talvolta i caratteri sono rappresentati in maniera diversa.
L’unica estensione standard di ASCII è ISO-Latin-1 (o ISO-8859-1), che
costituisce la forma ormai più diffusa per la codifica dei sistemi grafici delle lingue dell’Europa occidentale (italiano, francese, tedesco, lingue scandinave, spagnolo, islandese ecc.). ISO-Latin-1 è compatibile
con ASCII in quanto assegna i primi 128 punti di codice agli stessi
caratteri del codice ASCII. Per quanto riguarda la nuova parte, i punti
59
TESTO E COMPUTER
di codice da 128 a 159 sono di nuovo caratteri di controllo non stampabili, mentre i restanti codici sono utilizzati per rappresentare caratteri accentati, con dieresi ecc.
ISO-Latin-1 è in realtà uno dei membri della “famiglia” ISO8859, che rappresenta il primo tentativo di estendere il processo di
standardizzazione delle codifiche di caratteri al di là delle lingue
dell’Europa occidentale. ISO-8859 è una famiglia di set di caratteri
codificati con un byte; ogni set è equivalente a ASCII per i primi
128 punti di codice, mentre i punti da 160 a 255 sono usati per
codificare caratteri di sistemi grafici diversi. Ad esempio, ISO-8859-2
(Latin-2) codifica i caratteri delle lingue slave in alfabeto latino (polacco, ceco ecc.), ISO-8859-5 codifica l’alfabeto cirillico, ISO-8859-6
l’alfabeto arabo, ISO-8859-7 l’alfabeto greco moderno e ISO-8859-8
l’alfabeto ebraico.
Oltre alla copertura ancora ristretta (ad esempio i sistemi grafici
delle lingue orientali non sono rappresentati), lo standard ISO-8859 ha
un limite fondamentale, intrinseco alla strategia di codifica adottata,
che consiste nel fatto che i set di caratteri della famiglia ISO-8859
sono tutti mutuamente esclusivi. Infatti, uno stesso punto di codice
tra il 160 e il 255 corrisponde a caratteri diversi a seconda del set
ISO-8859 adottato. Ad esempio, il punto di codice 232 corrisponde al
carattere è in ISO-8859-1, al carattere Ì in ISO-8859-5 (cirillico) e al
carattere T in ISO-8859-7 (greco moderno), con la conseguenza che un
programma interpreterà questo codice come l’uno o l’altro carattere
in maniera esclusiva a seconda del set specificato. La codifica ISO8859 non permette quindi l’uso nello stesso testo di caratteri di sistemi grafici differenti, ad esempio cirillici e arabi, un problema ancora più rilevante nell’era del web in cui i programmi si trovano sempre
più spesso a dover operare simultaneamente con documenti in più
lingue.
2.3.2. Il set di caratteri Unicode
La soluzione ai limiti di ISO-8859 è fornita da Unicode, il più recente
standard per la codifica dei caratteri. Unicode è il set di caratteri universale, che permette di codificare testi contenenti caratteri praticamente di ogni sistema di scrittura conosciuta, antica e moderna. La
versione 4.0 dello standard Unicode fornisce la codifica di 96.382 caratteri, in cui trovano posto oltre all’alfabeto latino, al cirillico, al greco antico e moderno e all’arabo, anche il devanagari indiano, gli ideogrammi Han cinesi e giapponesi, il tibetano, gli Hiragana e Katakana,
per arrivare fino ai caratteri dell’alfabeto fonetico internazionale (o
60
2.
IL TESTO E LA SUA CODIFICA DIGITALE
IPA), i caratteri gotici, gli ideogrammi della lineare B minoica, e i caratteri cuneiformi dell’ugaritico. La differenza fondamentale di Unicode rispetto alle estensioni ASCII come ISO-8859 è che non esiste nessuna mutua esclusività tra caratteri di alfabeti diversi. Lo standard assegna a ogni carattere un punto di codice distinto, rappresentato nelle tabelle di Unicode da un numero in base esadecimale. I caratteri è,
T e Ì corrispondono quindi a punti di codice diversi, rispettivamente
ai numeri esadecimali E8, 3B8 e 448 (corrispondenti ai decimali 232,
952 e 1096). Questo permette l’uso simultaneo nello stesso testo di
caratteri appartenenti a sistemi grafici differenti, potendo mescolare
testo in italiano, devanagari, cirillico, gotico ecc.
I primi 256 punti di codice Unicode rappresentano gli stessi caratteri di ISO-Latin-1. In generale, per l’assegnazione dei punti di codice, Unicode adotta un principio di composizione dinamica dei caratteri, grazie al quale caratteri complessi (ad esempio cinesi, caratteri
latini con segni diacritici ecc.) sono rappresentati come sequenze di
caratteri elementari. Ad esempio, il carattere š è codificato come la
sequenza formata dal carattere base s seguito dal segno ˇ . Per i caratteri più comuni, alla codifica composizionale Unicode accompagna
anche una codifica “statica”; in questo caso, il carattere complesso è
codificato come un’unità predefinita a cui è attribuito un punto di
codice singolo. Il carattere š può dunque essere codificato o come
carattere unitario con il codice esadecimale 161 o come combinazione
di caratteri attraverso la sequenza di codici esadecimali 73 (s) + 30C
( ˇ ).
Lo standard Unicode specifica varie modalità di codifica (ad
esempio UTF-8, UTF-16 e UTF-32 ecc.), che utilizzano più di 1 byte per
la rappresentazione dei caratteri. Tutte le codifiche condividono la
stessa assegnazione di punti di codice ai caratteri, mentre ciò che
muta è il modo in cui tale codice è “tradotto” in sequenze binarie.
La codifica più comune è UTF-8, una codifica a lunghezza variabile da
1 a 4 byte dei punti di codice Unicode. Il vantaggio di UTF-8 è la sua
totale compatibilità con ASCII. Infatti, i caratteri da 0 a 127 vengono
codificati in UTF-8 utilizzando 1 byte ciascuno, come in ASCII. Così, il
byte 01101001, che codifica la i in ASCII, codifica lo stesso carattere
anche in UTF-8. Di conseguenza, ogni file scritto in ASCII è anche accettabile in UTF-8. I caratteri da 128 a 2047, che corrispondono alla
maggior parte dei caratteri non ideografici, sono invece codificati utilizzando 2 byte. I caratteri ideografici (cinesi, giapponesi ecc.) sono
codificati utilizzando 3 byte, mentre per repertori ulteriori sono usati
4 byte. Da notare che la compatibilità di UTF-8 con ASCII non si
estende anche ai caratteri ISO-Latin-1 da 128 a 255. Infatti sebbene i
61
TESTO E COMPUTER
punti di codice dei due set rappresentino gli stessi caratteri, il modo
in cui sono codificati in binario è diverso (1 byte in ISO-Latin-1 e 2
byte in UTF-8). Questo implica che un testo codificato in ISO-Latin-1 e
contenente caratteri accentati (che appunto corrispondono a punti di
codice nell’intervallo 128-255) non è compatibile con la codifica Unicode (cfr. Scheda on line 2.1).
I programmi di ultima generazione per il trattamento del testo ormai supportano lo standard Unicode, permettendo di estendere agevolmente il trattamento dei testi digitali anche a sistemi grafici non
latini. Le tastiere dei computer a cui siamo abituati consentono però
di inserire direttamente solo un insieme limitato di caratteri (generalmente ristretto all’alfabeto nazionale). Come è possibile inserire nel
testo altri caratteri? I sistemi operativi e i programmi offrono generalmente l’opportunità di inserire caratteri non presenti sulla tastiera
attraverso l’uso del codice numerico corrispondente, accompagnato
da una particolare combinazione di tasti (ad esempio ALT) 3.
2.4
La codifica di alto livello: perché, cosa, come
Al termine della codifica di livello zero, il testo si presenta al computer nei termini di un flusso ininterrotto di codici binari, come esemplificato di seguito:
N
→
o
e
r
a
u
n
l
e
g
n
o
4E 6F 6E 20 65 72 61 20 75 6E 20 6C 65 67 6E 6F
d
→
n
i
l
u
s
s
o
,
m
a
u
n
20 64 69 20 6C 75 73 73 6F 2C 20 6D 61 20 75 6E
dove, nelle righe contrassegnate dalla freccia, è riportata la rappresentazione esadecimale dei punti di codice corrispondenti a tutti i caratteri del testo (inclusi segni di interpunzione e spazi bianchi).
3. La codifica di caratteri non ASCII standard, ad esempio caratteri accentati, con
linguaggi di marcatura (XML) è discussa nei PARR. 3.2.3 e 3.3.3.
62
2.
IL TESTO E LA SUA CODIFICA DIGITALE
Un testo così codificato è assimilabile a un manoscritto in scriptio
continua, l’uso antico di rappresentare i testi, sia su pietra che su papiro, senza né staccare le parole né introdurre dei segni di punteggiatura, né ricorrere all’accapo. Un testo in scriptio continua si presenta
all’occhio umano come schiera compatta di caratteri, all’interno della
quale è alquanto difficile rintracciare un sentiero di lettura. In tali
condizioni, la lettura diventa qualcosa di ben più impegnativo di
quanto si sia soliti ritenere: è cominciare subito a interpretare; leggere
è già informare nel senso etimologico del termine, ovvero “dare forma” a dei segni grafici.
Dovrebbe essere chiara a questo punto l’analogia spesso rilevata
tra la trascrizione di un testo a partire da un manoscritto in scriptio
continua e la codifica digitale di alto livello. In entrambi i casi, si tratta di rendere esplicito ciò che è congetturale o implicito, con lo scopo di guidare il lettore nell’interpretazione del testo. Il lettore nel nostro caso è il computer e il compito della codifica di alto livello è
quello di “dare forma” alla sequenza dei caratteri del testo rendendo
esplicita quella parte di informazione che è veicolata attraverso le
convenzioni tipografiche, testuali e linguistiche. Si va da informazioni
sull’organizzazione del testo (ad esempio parti, titoli, paragrafi) alla
conoscenza linguistica necessaria per la sua comprensione (per esempio la categoria grammaticale di ciascuna parola, o i costituenti sintattici in cui si articolano le frasi del testo). La codifica di alto livello
rende appunto esplicita l’informazione relativa ad aspetti specifici di
un testo, la sua struttura linguistico-testuale così come l’informazione
interpretativa da affiancare a porzioni di esso, rappresentandola in
una forma che il computer possa elaborare in modo automatico.
Gli interrogativi che emergono in relazione a questo livello di codifica sono molteplici. Riguardano innanzitutto le motivazioni sottostanti a una codifica di questo tipo, o perché codificare. Abbiamo visto
che la codifica di alto livello è necessaria per poter rappresentare informazione che altrimenti, con la sola codifica dei caratteri, andrebbe
persa. Ma questo è un modo riduttivo di caratterizzare il suo ruolo
nella rappresentazione binaria del testo. In realtà, la codifica di alto
livello gioca un ruolo cruciale nella trasformazione del dato testuale
grezzo in fonte di informazione linguistica (cfr. PAR. 2.4.1).
Un altro interrogativo importante concerne i contenuti linguisticotestuali di cui si intende fornire una rappresentazione esplicita, o cosa
codificare (cfr. PAR. 2.4.2). Infine, l’ultimo interrogativo riguarda le
modalità di rappresentazione digitale dei contenuti selezionati, o come
codificare (cfr. PAR. 2.4.3).
63
TESTO E COMPUTER
2.4.1. Perché codificare
La codifica di alto livello trasforma il dato testuale in fonte esplicita
di informazione linguistica. Cosa significa essere fonte di informazione linguistica? Quando un testo può essere qualificato come tale?
L’opposizione dato vs. informazione può esserci di aiuto per fornire
una risposta a queste domande.
I dati non hanno come tali un significato intrinseco, a meno di
non inserirli in uno schema o struttura che li organizza e li trasforma
in informazione. Facciamo un semplice esempio per chiarire questa
distinzione. Il numero 56.100 costituisce un dato ma, da solo, slegato
da un contesto specifico, non è certo un’informazione. Diventa informazione nel momento in cui viene inserito in un contesto interpretativo: ad esempio, quando viene interpretato come il codice di avviamento postale della città di Pisa, oppure come il numero di conto
bancario di un certo cliente. Lo stesso dato può dunque fornire informazioni diverse. Un dato si carica di significato e diventa informazione nel momento in cui, inquadrandosi in uno schema di rapporti, viene legato a un contesto. Ne consegue che l’informazione in un certo
dominio è costituita da dati strutturati e organizzati in maniera esplicita: ciò può essere tradotto nella banale ma efficace equazione informazione = dati + struttura. Il valore di una base di dati si misura in rapporto alle informazioni che può fornire, non solo ai dati che contiene.
Ciò equivale a dire che nella costruzione di una base di dati un ruolo
cruciale è giocato dalla strutturazione dei dati che la compongono: integrare i dati all’interno di una base di dati non significa quindi solo
riunirli, ma soprattutto identificare e rendere esplicite quelle connessioni e quei rapporti che stabiliscono il loro valore informativo.
Questa distinzione tra dato e informazione – che nasce in ambito
informatico – si applica in modo naturale anche alla rappresentazione
digitale del testo. Un testo come flusso di caratteri, parole e frasi è
una fonte di dati linguistici (cfr. CAP. 1). Il testo è, però, anche un’entità altamente strutturata, all’interno della quale i dati linguistici sono
correlati secondo piani di organizzazione multipli. Questi livelli di organizzazione comprendono: a) la struttura del testo, con la sua articolazione in sezioni, capitoli, titoli ecc.; b) la struttura del contesto in cui
il testo è stato prodotto, ad esempio l’autore, la data di produzione,
la finalità del testo ecc.; c) la sua struttura linguistica, ad esempio le
informazioni morfologiche, sintattiche, semantiche ecc. (cfr. CAP. 8).
Inoltre, quando i testi sono inseriti in un corpus, abbiamo un livello
ulteriore di organizzazione dato dalla struttura e composizione del corpus, ovvero dalla sua articolazione in diverse tipologie di testi, di di64
2.
IL TESTO E LA SUA CODIFICA DIGITALE
verso argomento e così via (cfr. CAP. 1). Il testo, visto qui nella sua
accezione estesa, diventa fonte di informazione linguistica nel momento in cui almeno alcuni di questi livelli di organizzazione e strutturazione vengono resi espliciti attraverso una codifica di alto livello. In
generale, il potenziale informativo di una codifica di alto livello sarà
tanto più alto quanto più numerosi sono i livelli di organizzazione
testuale e linguistica codificati esplicitamente. Ma il valore aggiunto
non si limita alla quantità di informazioni codificate. Il fatto che queste informazioni sono interconnesse attraverso livelli espliciti di rappresentazione rende immediato il loro reperimento con l’aiuto del
calcolatore. Da questo punto di vista, l’accessibilità dell’informazione
linguistica codificata e la possibilità di elaborarla automaticamente
apre il campo a un processo virtuoso di esplorazione incrementale del
testo, attraverso cui nuovi livelli di analisi si sviluppano a partire da
un’analisi mirata dei livelli di codifica preesistenti. Torneremo su questi aspetti nei CAPP. 7 e 8.
2.4.2. Cosa codificare
Decidere quali tipi di informazione debbano essere selezionati e rappresentati esplicitamente all’interno di un testo rappresenta una precondizione fondamentale non solo per la sua codifica di alto livello,
ma anche per la stessa usabilità del testo codificato come fonte di
informazione. Nella fase di definizione di cosa codificare possono interagire vincoli di diverso tipo, che vanno dagli specifici interessi di
ricerca che la codifica intende promuovere, ai condizionamenti esterni, di tipo finanziario o temporale, sull’attività di codifica stessa. È
spesso difficile contemperare esigenze così diverse. Le dimensioni di
questo volume non ci consentono tuttavia di soffermarci sul problema. Ci limiteremo qui a offrire alcune indicazioni di massima.
Il primo passo è individuare il livello di informazione che si intende
codificare: se, ad esempio, si tratta di informazione relativa alla macrostruttura del testo, o alla sua struttura morfologica o a quella sintattica
ecc. Una volta individuato il livello, si può passare a definire il repertorio di tratti giudicati rilevanti. Supponiamo, ad esempio, di voler codificare le parole di un testo al livello morfo-sintattico (cfr. PAR. 8.1.1).
Questo livello include informazioni relative alla categoria grammaticale
della parola (se cioè una certa forma lessicale del testo è un nome, un
verbo, un aggettivo o quant’altro), così come ad alcuni attributi morfosintattici, quali il genere, la persona, il numero, il tempo e così via.
Definito questo insieme di attributi, bisogna caratterizzare i valori che
possono essere associati a ciascun attributo (ad esempio, maschile/fem65
TESTO E COMPUTER
minile/neutro per il genere). A tutto ciò deve accompagnarsi un’accurata definizione dei criteri di assegnazione di attributi e valori alle singole parole del testo durante il processo di codifica.
L’insieme di queste decisioni definisce quello che in letteratura si
chiama uno schema di codifica. Ogni schema di codifica può dunque
essere descritto come comprendente:
– un repertorio di categorie per la codifica, corrispondenti alla tipologia dei tratti da rappresentare nel testo, generalmente espresso nella
forma di attributi e dei loro possibili valori;
– la definizione delle regole di compatibilità tra categorie: ad esempio l’aggettivo non possiede un attributo inerente di persona, o un
nome quello di tempo;
– la specifica accurata dei criteri di applicazione al testo delle categorie selezionate.
Nel caso in cui lo schema di codifica riguardi informazione di
tipo linguistico si parla più specificamente di schema di annotazione
linguistica (cfr. CAP. 8).
La ricchezza e la varietà di attributi e valori definiti all’interno di
uno schema di annotazione possono dipendere da vari fattori: la teoria linguistica di riferimento, la finezza delle distinzioni linguistiche
che le categorie esprimono, il tempo e le risorse umane dedicati alla
codifica (soprattutto se questa è condotta in modo non automatico),
la possibilità di usare questa informazione per ulteriori livelli di analisi e così via. Non esistono ricette semplici per sviluppare uno schema
di annotazione ottimale. Ci limitiamo qui a sottolineare che il successo e la diffusione di uno schema dipendono in buona misura dalla
coerenza interna della codifica e dalla trasparenza dei suoi criteri di
applicazione (anche e soprattutto per un utente esterno). Chiaramente, dal momento che una codifica di alto livello non è mai fine a se
stessa, l’ultima parola spetta all’utilità dell’informazione codificata, sia
rispetto agli obiettivi di ricerca per i quali era stata introdotta, che
rispetto a ulteriori livelli di analisi e di codifica. Vale la pena di ricordare, infine, che uno schema di annotazione definisce il contenuto
linguistico dell’annotazione, non il modo in cui l’annotazione è codificata nel testo. Non è difficile immaginare che lo stesso schema possa
tradursi in modi diversi di codificarlo sul testo.
2.4.3. Come codificare
Passiamo ora a vedere quali siano le modalità di rappresentazione dei
contenuti selezionati per la codifica di alto livello. Esistono diversi
formati digitali in cui può presentarsi un testo, ma non tutti rappre66
2.
IL TESTO E LA SUA CODIFICA DIGITALE
sentano una risposta adeguata alle finalità di ricerca dello studioso,
nel senso che non tutti predispongono il testo alle analisi ed elaborazioni a cui dovrà essere sottoposto. Riepiloghiamo brevemente le caratteristiche principali dei diversi formati digitali del testo e rapportiamole alle necessità della codifica di alto livello.
Da un lato, abbiamo il formato solo testo (o plain text) che codifica il contenuto testuale come pura sequenza di caratteri (cfr. Scheda
on line 2.3). Esso costituisce il livello minimo di rappresentazione digitale di un testo e presenta l’innegabile vantaggio di poter essere gestito da programmi diversi indipendentemente dal sistema operativo.
Questa caratteristica è definita tecnicamente portabilità. Tuttavia, esso
non prevede l’uso di caratteri specificamente dedicati alla codifica di
aspetti di struttura macrotestuale (quali l’articolazione del testo in paragrafi, capitoli e simili), né alla codifica della struttura linguistica. Si
tratta quindi di un formato che al massimo della portabilità affianca
una minima capacità espressiva, in quanto non va al di là della pura
codifica dei caratteri che compongono il testo. A questo formato corrisponde la codifica di livello zero.
All’estremo opposto, si situano i formati come doc (il formato dei
file di Microsoft Word) o pdf (il formato dei file di Acrobat Adobe)
che presentano la peculiarità di strutturare un testo digitale in maniera estremamente fruibile per il lettore umano, con tutte le informazioni di formattazione utili alla sua composizione editoriale e alla sua
visualizzazione. Le sequenze di bit di un file doc (o pdf) codificano i
caratteri del testo secondo un certo set di caratteri, ma, a differenza
del formato solo testo, qui il contenuto testuale è inframmezzato da
istruzioni di formattazione 4. I vantaggi di questi formati per l’utente
umano sono ovvi: presentano il testo in una forma più ricca e articolata del formato solo testo. Tuttavia, quando si vada a considerare
l’uso del testo così codificato per elaborazioni computazionali, questi
vantaggi si traducono in svantaggi. La caratteristica principale di tali
formati è che sono “proprietari”, ovvero possono essere creati, letti e
interpretati solo da uno specifico programma (ad esempio un programma di editing del testo elettronico o Word Processor, oppure un
4. Se infatti proviamo ad aprire un file doc con un editore di testo (cfr. Scheda
on line 2.3), quello che otteniamo sono strani simboli inframmezzati da sequenze di
caratteri. Questo dipende dal fatto che il file contiene sequenze di bit che non corrispondono a caratteri, ma a istruzioni di formattazione, codificate secondo le convenzioni specifiche di un certo programma. L’editore di testo tenta invano di interpretare
tali sequenze binarie come caratteri, ottenendo così un risultato incomprensibile e
inutilizzabile.
67
TESTO E COMPUTER
programma di visualizzazione/presentazione del testo) 5. A una massima espressività del formato fa dunque riscontro una minima portabilità. Un secondo svantaggio riguarda la natura troppo “concreta” di
una codifica destinata a uno specifico programma applicativo: la codifica non avviene per categorie testuali astratte, ma per modalità di
visualizzazione del testo, espresse attraverso istruzioni di formattazione e composizione tipografica. Diventa presto difficile risalire all’organizzazione astratta del testo a partire da queste istruzioni.
Un’alternativa importante che concilia la necessità di rappresentare informazione strutturale astratta con la portabilità del testo è data
dalla codifica con linguaggi di mark-up, in italiano detti linguaggi di
marcatura (cfr. Scheda on line 2.4), tra i quali vale la pena menzionare in questa sede SGML (Standard Generalized Mark-up Language) e,
in particolare, XML (eXtensible Mark-up Language), sul quale ritorneremo in dettaglio nel CAP. 3. Dal punto di vista del formato, un testo
codificato con un linguaggio di marcatura è ancora in formato solo
testo. L’informazione strutturale è rappresentata attraverso l’aggiunta
al testo di etichette (o tag) di marcatura 6, che si presentano come sequenze di caratteri visibili secondo una convenzione standard e sono
intercalate nel testo secondo precise regole di combinazione. Tali etichette sono immesse dentro il file del testo per “marcare” i blocchi a
cui viene assegnata una determinata interpretazione. Con i linguaggi
di marcatura, in linea di principio, non vi è limite alla tipologia di
informazioni codificabili: infatti la tipologia di etichette di marcatura
può essere definita in funzione delle finalità della codifica.
Affiancando al requisito della portabilità del testo la possibilità di
rappresentare informazione strutturale di vario tipo (non ultima quella linguistica) e di personalizzare la codifica in relazione a specifiche
necessità di ricerca, il formato solo testo, arricchito di etichette di
5. Con tecnologia “proprietaria” si intende una tecnologia posseduta in esclusiva
da un soggetto (ad esempio una ditta o casa produttrice) che ne detiene il controllo
mantenendo segreto il funzionamento e che può modificarla a sua discrezione senza
doverne rendere conto. Con formato “proprietario” ci si riferisce a un formato le cui
specifiche non sono diffuse pubblicamente in modo esplicito e che la casa produttrice
si riserva il diritto di cambiare a propria discrezione.
6. Storicamente, il termine marcatura deriva dalla designazione – nella stampa
tipografica tradizionale – di quell’insieme di simboli, indicazioni e annotazioni inserite
in un manoscritto per specificare la composizione tipografica del testo (ad esempio,
l’impaginazione, i tipi e la dimensione dei caratteri da impiegare, le spaziature, i ritorni accapo ecc.). Oggi, il termine marcatura è stato generalizzato per designare qualsiasi tipo di codice inserito in un testo in forma elettronica al fine di associarvi informazione interpretativa.
68
2.
IL TESTO E LA SUA CODIFICA DIGITALE
marcatura, rappresenta la codifica digitale più adeguata dei materiali
testuali per gli scopi della LC.
2.5
Considerazioni conclusive
Per un utente umano il contenuto informativo del testo va ben al di
là della mera sequenza di caratteri. Il dato testuale è organizzato in
maniera complessa ed è proprio attraverso la sua organizzazione in
strutture linguistiche e testuali che il dato grezzo si arricchisce di valore informativo. Il computer, tuttavia, non dispone dei livelli di conoscenza che consentono al lettore umano di tradurre una serie di
convenzioni tipografiche in informazione esplicita riguardo alla struttura testuale, né, tanto meno, della competenza linguistica necessaria
per identificare, in una sequenza di caratteri, una parola, un costituente sintattico o una relazione tra soggetto e verbo. Per rendere
queste strutture accessibili al computer è necessario ricorrere a una
loro adeguata codifica che associ esplicitamente a porzioni del testo
struttura e funzione corrispondenti. Questa operazione non solo aggiunge al testo informazione che può essere reperita automaticamente
dal computer, ma predispone il testo per ulteriori livelli di analisi automatica, innestando un ciclo virtuoso di analisi incrementale su cui
ritorneremo nel CAP. 7. Dettagli e implicazioni della codifica di alto
livello del testo mediante l’uso di XML saranno invece oggetto del capitolo che segue.
Per saperne di più
HOCKEY S.
(2000), Electronic Texts in the Humanities: Principles and Practice,
Oxford University Press, Oxford.
PIERAZZO E. (2005), La codifica dei testi. Un’introduzione, Carocci, Roma
(capp. 1 e 2).
SIMONS G. F. (1998), The Nature of Linguistic Data and the Requirements of a
Computing Environment for Linguistic Research, in J. M. Lawler, H. Aristar Dry (eds.), Using Computers in Linguistics. A Practical Guide, Routledge, London, New York, pp. 10-25.
Siti web
TOMASI F.
(2002), Manuale di informatica umanistica. Per l’applicazione delle pratiche computazionali ai testi letterari, http://www.griseldaonline.it/informatica/
manuale.htm
The UNICODE Home Page – http://www.unicode.org/
69
3
Costruire un linguaggio di marcatura
La codifica di alto livello assolve alla funzione di colmare il divario
tra l’informazione strutturale e linguistica implicitamente contenuta in
un testo e la necessità di renderla esplicitamente accessibile al computer. Nel CAP. 2 abbiamo spiegato che nella LC il modo più adeguato
per raggiungere questo obiettivo consiste nell’uso di un linguaggio di
marcatura, uno strumento capace di rendere esplicite le relazioni tra il
testo e le sue parti e le interpretazioni a esse associate. In questo capitolo, metteremo a disposizione del lettore lo strumentario di base
indispensabile per cominciare a lavorare con XML, uno standard ormai consolidato per la marcatura di informazioni di alto livello nel
testo. Lo sforzo richiesto al lettore per familiarizzare con la sintassi di
XML potrà essere ricompensato, a nostro avviso, dalla possibilità di
disporre di uno strumento potente e versatile per rappresentare qualsiasi tipo di dato linguistico e testuale nella maniera più adeguata ai
propri scopi applicativi, di studio e di ricerca.
XML:
3.1
principi di base
Nel capitolo precedente abbiamo menzionato SGML e XML come
esempi noti della famiglia dei linguaggi di marcatura di tipo dichiarativo. In realtà, questi due linguaggi sono legati da un rapporto di tipo
evolutivo: XML infatti nasce alla fine degli anni novanta come evoluzione di SGML, linguaggio di marcatura concepito per la rappresentazione di testi in formato digitale la cui origine risale alla fine degli
anni sessanta e la cui storia culmina nel 1986, quando SGML diventa
uno standard ISO (8879:1986) per la codifica digitale di testi. Oggi
XML sta suscitando enorme interesse sia nella comunità scientifica sia
in quella industriale e sta proponendosi come naturale successore di
SGML come standard per la codifica di dati semistrutturati, particolarmente versato per le applicazioni web. Infatti, XML rappresenta
71
TESTO E COMPUTER
una versione semplificata di SGML che, pur mantenendo le potenzialità di quest’ultimo, si presta meglio a essere interpretato e manipolato
da programmi automatici 1. A questo si deve aggiungere che nonostante la sua filiazione da SGML, XML ha preso progressivamente una
strada autonoma, che ha portato alla nascita, sotto l’egida del World
Wide Web Consortium (W3C), di una vera e propria galassia di estensioni e applicazioni per il trattamento e la rappresentazione di dati.
Usare XML per la codifica dei dati testuali permette dunque oggi di
usufruire di una serie di risorse e supporti informatici in grado di
potenziare la possibilità di condividere, elaborare e analizzare i dati
stessi. Per questi motivi abbiamo scelto XML come punto di riferimento per la codifica digitale del testo.
I tratti caratterizzanti di XML, completamente derivati da SGML,
possono essere così riassunti:
– marcatura dichiarativa: XML usa etichette di marcatura che indicano la funzione astratta assolta dalla porzione di testo a cui si riferiscono (ad esempio titolo, paragrafo, nota ecc.), senza fornire indicazione su come la porzione di testo marcata dovrà apparire fisicamente
sulla pagina o sul video;
– marcatura strutturata: XML permette di raggruppare porzioni del
testo e di definirle come unità strutturali complesse, che riflettono
l’organizzazione interna del testo; ad esempio, il presente capitolo
può essere visto come articolato in una varia tipologia di unità strutturali di varia grandezza cui è associato un ruolo ben definito: titolo
di capitolo, numero e titolo di paragrafo, paragrafo, tabella, didascalia, capoverso ecc.;
– marcatura gerarchica: in XML un’unità strutturale del testo può a
sua volta contenere altre strutture incassate; quello che otteniamo è
una gerarchia di strutture definibili a livelli incrementali di dettaglio.
Ad esempio, le parti di un libro sono composte da capitoli, a loro volta
articolati in paragrafi, a loro volta suddivisi in capoversi e poi in frasi.
XML, così come SGML, non fornisce alcuna indicazione riguardo alla
1. Ad esempio, mentre in SGML ogni documento deve obbligatoriamente essere
collegato a una DTD, questa è opzionale in XML (PAR. 3.4). Altre differenze riguardano
vari aspetti della sintassi dei due linguaggi: in XML il tag di chiusura di un elemento è
sempre obbligatorio (PAR. 3.2.1), mentre in SGML è possibile renderlo facoltativo; in
XML è ammesso un solo modo di dichiarare un elemento con contenuto di tipo misto
(PAR. 3.3.1); in XML gli unici connettori leciti nella dichiarazione del contenuto di un
elemento sono la virgola e la barra verticale (PAR. 3.3.1) ecc. Sebbene ormai XML abbia
di fatto rimpiazzato SGML, è possibile trovare dati testuali codificati in SGML. Esistono
comunque programmi che permettono di automatizzare la conversione di documenti
SGML in documenti XML.
72
3.
COSTRUIRE UN LINGUAGGIO DI MARCATURA
semantica dei marcatori, ovvero alla loro tipologia, quantità o nome,
ma si occupa esclusivamente di fornire precise regole combinatorie necessarie a definire un insieme di marcatori. In realtà, dunque, XML si
configura come un metalinguaggio di marcatura, vale a dire un linguaggio per la definizione di linguaggi di marcatura veri e propri 2. A questo
fine, la nozione chiave è costituita dalla definizione del tipo di documento che avviene all’interno di una DTD (Document Type Definition),
dove l’utente può definire, in modo autonomo e funzionale alla propria ricerca, un insieme di marcatori, i loro tratti inerenti e le loro
mutue relazioni (cfr. PAR. 3.3): questo insieme di marcatori con le loro
relazioni descrivono una classe di testi che condividono le stesse caratteristiche strutturali (ad esempio tutti i testi che, come questo libro,
hanno un’introduzione e una serie di capitoli, talora raggruppati in
parti; i capitoli hanno tutti un titolo e una serie di paragrafi ecc.).
Un tratto fondamentale di XML è che esso garantisce la completa
indipendenza dei dati codificati: in altre parole, XML permette di concentrare la codifica dei dati testuali solo sugli aspetti strutturali o linguistici, facendo astrazione dal tipo di programma o sistema operativo che elaborerà il testo codificato. Infatti, tutti i documenti XML
sono in formato solo testo e usano lo stesso sistema di codifica dei
caratteri predefinito, ovvero Unicode UTF-8 (a meno che non venga
esplicitamente dichiarato il contrario, cfr. PAR. 3.4), permettendo così
la facile interscambiabilità e portabilità dei dati codificati tra applicazioni e computer diversi.
3.2
I componenti della marcatura
XML
Un documento con marcatura XML contiene testo intercalato con una
varietà di marcatori. Per testo si intende qui la sequenza delle sue parole, spazi, punteggiatura ecc. La tipologia dei marcatori include gli
elementi, gli attributi, i riferimenti a entità o a carattere, i commenti 3.
2. Contrariamente a SGML e XML, il ben noto HTML (Hyper Text Mark-up Language) rappresenta un linguaggio di marcatura vero e proprio, definito in termini di
SGML, ma costituito da un insieme di etichette prefissato e finalizzate alla pubblicazione di contenuti ipertestuali. Poiché l’insieme dei codici di marcatura HTML non è
estensibile, questo linguaggio non è facilmente riusabile per scopi diversi da quello
della visualizzazione del testo. Per tali motivi, XML si va progressivamente affermando
come la risposta ai limiti dell’HTML anche nell’ambito della tecnologia del web.
3. Un alto tipo di marcatori – sui quali non ci soffermiamo – sono le istruzioni di
elaborazione (processing instructions o PI) che consentono di inserire in un documento
XML istruzioni destinate ai programmi applicativi che elaboreranno il testo.
73
TESTO E COMPUTER
3.2.1. Elementi
Il termine tecnico usato in XML per designare un’unità del testo, vista
come componente della struttura linguistico-testuale, è elemento. Gli
elementi rappresentano i blocchi costitutivi in cui si articola un testo:
esempi prototipici di elementi sono il titolo, l’autore, o il paragrafo.
Ogni tipo di elemento è identificato da un nome (tecnicamente designato come etichetta o tag), tipicamente selezionato per caratterizzare
la funzione della partizione logica del testo che descrive 4; il nome
associato a ogni tipo di elemento è chiamato identificatore generico
(generic identifier o GI).
Nella marcatura del testo, ogni elemento viene marcato in modo
esplicito inserendo un delimitatore di apertura < tag > all’inizio dell’elemento e uno di chiusura < /tag > alla fine, dove tag rappresenta l’identificatore generico dell’elemento. Siccome XML è sensibile
alla distinzione tra maiuscole e minuscole (ovvero è case-sensitive), l’identificatore generico deve essere sempre specificato con lo stesso
tipo di carattere, maiuscolo o minuscolo: < tag > ... < /tag > è corretto così come lo è < TAG > ... < /TAG > o < Tag > ... < /Tag > ,
mentre non lo è < tag > ... < /TAG > . Tutto ciò che si trova compreso tra il delimitatore di apertura e quello di chiusura rappresenta
il contenuto dell’elemento. Consideriamo il semplice esempio di marcatura che segue:
< titolo > Le avventure di Pinocchio < /titolo >
il contenuto dell’elemento identificato dal nome titolo è rappresentato dalla stringa di caratteri Le avventure di Pinocchio. Questo
rappresenta il caso più semplice e intuitivo, in cui il contenuto dell’elemento è costituito da testo libero non contenente altri elementi (secondo la terminologia tecnica, dati di tipo carattere).
Il contenuto di un elemento può anche essere costituito da altri
elementi, come esemplificato di seguito:
4. Esistono norme specifiche per la sintassi del nome degli elementi: questo può
essere costituito da qualsiasi carattere alfanumerico e può includere il carattere di sottolineatura (o underscore) “_” e i caratteri di punteggiatura trattino “-” e punto “.”;
non può invece contenere caratteri di punteggiatura diversi da quelli elencati e nessun
tipo di spazi (spazi, ritorni a capo, line feed, tabulazioni, spazi non separabili). Inoltre,
i nomi degli elementi non possono iniziare con un numero, un trattino o un punto né
con la sequenza di caratteri “XML”. Infine, non esiste un limite di lunghezza per il
nome di un elemento.
74
3.
COSTRUIRE UN LINGUAGGIO DI MARCATURA
< capitolo >
< titolo > Capitolo primo < /titolo >
< capoverso > C’era una volta... < /capoverso >
< capoverso > - Un re! – diranno subito i miei piccoli
lettori. < /capoverso >
< capoverso > No, ragazzi, avete sbagliato. C’era una
volta un pezzo di legno. < /capoverso >
< /capitolo >
L’elemento capitolo, detto elemento padre, contiene quattro elementi figli: un elemento titolo e tre elementi capoverso. È proprio attraverso questo meccanismo di annidamento degli elementi che
XML permette la rappresentazione di strutture gerarchiche. Ogni elemento (tranne l’elemento radice, cfr. infra) ha un elemento padre che
lo include completamente; ciò implica che, nel caso di elementi annidati, la relazione di inclusione deve essere sempre propria. Ne consegue che non è consentita la sovrapposizione tra elementi: un elemento figlio deve essere completamente incluso nell’elemento padre come
in < a > < b > ... < /b > < /a > mentre una sequenza del tipo
< a > < b > ... < /a > < /b > non è riconosciuta come ben formata
(cfr. PAR. 3.4) da XML in quanto < /a > ricorre prima di < /b > .
È importante osservare che ogni documento XML deve contenere
uno e un solo elemento radice, ovvero un elemento che contiene tutti
gli altri elementi del documento. In altre parole, la radice è un elemento “orfano” (ovvero senza padre) e senza elementi “fratelli”. Se
assumiamo che l’esempio riportato sopra identifichi il contenuto di
un intero documento XML, capitolo è l’elemento radice. Ciò implica che ogni documento XML ha una struttura ad albero, i cui nodi
sono gli elementi e le foglie sono le sequenze dei caratteri del testo
contenute in ogni elemento.
Nella pratica della codifica XML di un testo, la dicotomia tra elementi che contengono solo dati di tipo carattere ed elementi che contengono solo elementi figli non è così rigida. Nella rappresentazione
del testo è infatti molto frequente avere elementi con contenuto misto,
come esemplificato di seguito:
< titolo > Le avventure di Pinocchio
< sottotitolo > Storia di un burattino < /sottotitolo >
< /titolo >
dove l’elemento titolo contiene, sullo stesso livello, sia dati di tipo
carattere sia un elemento figlio (sottotitolo).
Esiste infine la possibilità di definire un elemento vuoto, a cui non
75
TESTO E COMPUTER
è associato alcun contenuto del testo (ad esempio potrebbe semplicemente rappresentare un salto pagina): in questo caso si usa la sequenza di marcatori < tag > < /tag > , che può essere abbreviata in
< tag/ > .
3.2.2. Attributi
Gli elementi XML possono essere dotati di attributi. Gli attributi rappresentano informazioni aggiuntive che specificano alcune caratteristiche dell’elemento che non fanno parte del contenuto del testo: in
pratica, gli attributi si configurano come “glosse” associate al dato testuale, mentre la funzione assolta dagli elementi è piuttosto quella di
“contenitore” e “classificatore” del dato testuale.
Gli attributi sono specificati all’interno del delimitatore di apertura dell’elemento, nella forma nome_attributo = valore (dove attorno al segno uguale possono essere opzionalmente inseriti degli spazi) 5. I valori degli attributi devono sempre essere racchiusi tra virgolette, singole o doppie 6. Nell’esempio che segue, la numerazione dei
capoversi in cui si articola il testo (utile per poter identificare univocamente un capoverso) è rappresentata mediante un attributo (num)
associato all’elemento capoverso:
< capoverso num = ”1” > C’era una volta... < /capoverso >
Non è sempre facile stabilire quando preferire una codifica delle informazioni testuali in termini di elementi o di attributi. Prima di tutto, bisogna tenere presente che gli elementi possono ricorrere più
volte mentre un attributo può ricorrere al massimo una volta all’interno di un elemento. Inoltre, mentre nel caso degli elementi è possibile
specificare l’ordine in cui devono apparire nella marcatura testo (cfr.
PAR. 3.3.1), ciò non è possibile nel caso degli attributi. Esistono poi
alcuni criteri euristici di base per decidere se codificare informazioni
mediante attributi o mediante elementi. Ad esempio, questi ultimi
vengono utilizzati per marcare porzioni del dato testuale grezzo assegnandogli una specifica funzione, mentre gli attributi sono in genere
5. Per il nome di un attributo vigono le stesse restrizioni definite per i nomi degli elementi, riportate nella nota 4.
6. Le virgolette singole possono essere utili nel caso in cui il valore contenga a
sua volta virgolette doppie e viceversa. I due tipi di virgolette non possono però essere mescolate nello stesso attributo (ad esempio nome_attributo = “valore’ non è
sintatticamente corretta).
76
3.
COSTRUIRE UN LINGUAGGIO DI MARCATURA
utilizzati per codificare informazioni relative a un elemento. Inoltre,
la scelta tra elementi o attributi dipende anche dagli obiettivi specifici
della codifica: viene consigliato il ricorso agli attributi se le informazioni da codificare non hanno una struttura complessa 7, presentano
un insieme predefinito di valori o addirittura valori fissi, oppure si
configurano come metainformazioni relative a un elemento esistente.
3.2.3. Riferimenti a carattere e a entità
Tra i possibili marcatori XML all’interno di un testo, ci sono i cosiddetti riferimenti a carattere e riferimenti a entità.
I riferimenti a carattere sono usati per inserire nel testo caratteri
appartenenti al set di caratteri Unicode attraverso il loro valore numerico espresso in notazione decimale o esadecimale. Ad esempio, si ricorre ai riferimenti a carattere per inserire nel testo caratteri non accessibili direttamente dai dispositivi di input disponibili. In generale, per
garantire la massima portabilità del testo tra programmi che supportano diverse codifiche dei caratteri, è buona norma codificare come riferimenti a carattere tutti i caratteri che non rientrano nel set ASCII. Il
riferimento a carattere può essere espresso in due forme: &#xcodice_
esadecimale; se il punto di codice Unicode è rappresentato in base
esadecimale; &#codice_decimale; se il punto di codice Unicode è
rappresentato in base decimale (in entrambi i casi il punto e virgola fa
parte del riferimento a carattere). Ad esempio, il carattere T può essere
inserito in un documento XML attraverso il riferimento θ oppure
&#352. Per aumentare la leggibilità del testo, invece di immettere direttamente nel testo i riferimenti a carattere, possono essere loro associati nomi mnemonici attraverso il meccanismo delle entità (cfr. PAR.
3.3.3).
Le entità sono sequenze arbitrarie di byte (che vanno da una stringa di caratteri a un file intero) associate a nomi mnemonici; questi
ultimi, attraverso il meccanismo dei riferimenti a entità (cfr. infra), possono essere usati nei documenti XML come “segnaposto” del contenuto
effettivo dell’entità. Le entità usate nella marcatura del testo sono dette
entità generali (opposte alle entità parametriche, che possono occorrere
7. Vale la pena ricordare che il valore di un attributo XML è semplicemente una
stringa di testo e quindi non può rappresentare adeguatamente valori strutturati internamente. Ad esempio, se vogliamo codificare una data con un attributo, il massimo
livello di strutturazione si può ottenere è separando l’anno, il mese e il giorno con un
trattino; bisogna tuttavia tenere presente che questa rappresenta una mera convenzione grafica.
77
TESTO E COMPUTER
solo all’interno della DTD, cfr. PAR. 3.3.3). Esistono due tipi di entità
generali, alle quali si può fare riferimento dal testo marcato: entità interne, il cui valore è dichiarato localmente (ovvero nella DTD), ed entità
esterne, il cui valore è rappresentato dal contenuto di una sorgente
esterna, ovvero un file XML o in altro formato, inclusi formati grafici.
Ci concentreremo qui sulle entità generali interne, che svolgono un
ruolo importante nella codifica digitale del contenuto testuale, mentre
per il secondo tipo rinviamo il lettore interessato a letture di approfondimento. I riferimenti a entità hanno la forma &nome_entità; e la
stringa di testo associata a nome_entità, a parte il caso delle entità
predefinite (cfr. infra), deve essere dichiarata nella DTD (cfr. PAR. 3.3.3).
Nella fase di elaborazione del testo da parte del parser XML (cfr. PAR.
3.4), il riferimento a entità interne viene sostituito dalla stringa di testo
associata. L’utilità delle entità consiste dunque nel fatto che consentono di riutilizzare lo stesso frammento di testo in posizioni diverse, garantendo sempre l’esatta corrispondenza dei dati e permettendo al contempo una loro modifica semplificata.
Un caso particolare è rappresentato dalle cosiddette entità predefinite a cui si può fare riferimento nel testo come segue:
entità predefinite
carattere
definizione
&
<
>
"
'
&
<
>
"
'
e commerciale
parentesi angolare di apertura
parentesi angolare di chiusura
virgolette doppie
apostrofo o virgoletta singola
A differenza delle altre entità, queste non devono essere dichiarate
nelle DTD. I riferimenti a entità predefinite corrispondono a caratteri
riservati di XML e devono essere usati quando questi caratteri vengono impiegati come tali nel testo e non come segni di marcatura. In
caso contrario, il documento XML non risulta ben formato. Ad esempio, la sequenza < testo > l’amico < /testo > non è corretta, perché il carattere apostrofo ricorre come parte del testo: la forma appropriata è < testo > l'amico < /testo > 8.
8. I caratteri riservati possono naturalmente essere inseriti nel testo anche attraverso riferimenti a carattere. Inoltre, un modo alternativo offerto da XML è rappresentato dalle cosiddette sezioni CDATA. Queste sono anche particolarmente utili per
inserire nel testo intere porzioni di codice XML o HTML contenenti caratteri che altrimenti sarebbero trattati come codici di marcatura. Le sezioni CDATA iniziano con la
stringa < ![CDATA[ e terminano con la stringa ]] > .
78
3.
COSTRUIRE UN LINGUAGGIO DI MARCATURA
3.2.4. Commenti
Un testo con marcatura XML può contenere commenti, ovvero brevi
note che l’autore del documento può voler aggiungere al documento.
Queste note non fanno parte del contenuto del documento e vengono ignorate dalle applicazioni nell’elaborazione del testo. Il commento comincia con la sequenza di caratteri < !-- e finisce con -- > . I
commenti possono apparire in qualunque punto all’interno dei dati
di tipo carattere così come prima o dopo l’elemento radice. Non possono apparire all’interno di un delimitatore di apertura o di chiusura
di un elemento o all’interno di un commento.
3.3
La definizione del tipo di documento (DTD)
La tipologia dei marcatori XML necessari a effettuare la codifica del
testo e le regole della loro combinazione sono definite all’interno della
cosiddetta Document Type Definition (o DTD). In pratica, la DTD definisce la “grammatica” del linguaggio di marcatura associato a una specifica classe o tipo di documenti; una volta che i marcatori definiti nella
DTD sono intercalati nel testo, questo diventa un’istanza del tipo di
documenti (document instance). Per molti tipi di applicazioni e analisi
linguistiche esistono DTD predefinite, facilmente reperibili sul web, che
possono essere utilizzate per la codifica dei testi. Infatti è sempre preferibile, ove possibile, usare linguaggi di marcatura riconosciuti come
standard da una certa comunità di ricerca o per determinate applicazioni (cfr. PAR. 3.6). Grazie alla ricchezza e versatilità di XML è però sempre possibile definire la propria DTD per stabilire il linguaggio di marcatura più adatto ai propri obiettivi di elaborazione testuale.
Nella DTD vengono dichiarati – ovvero definiti – tutti gli oggetti
necessari alla costruzione di un linguaggio di marcatura; ciascun oggetto deve essere dichiarato una volta sola. Una DTD è dunque una
lista di dichiarazioni di tre tipi distinti:
– gli elementi in cui si articola il testo;
– gli attributi associati a ciascun elemento;
– le entità richiamabili attraverso riferimenti all’interno del testo.
La lista non è ordinata, ovvero non importa in quale ordine elenchiamo le dichiarazioni nella DTD. Tutte le dichiarazioni sono comprese tra parentesi angolari. Alla parentesi di apertura segue un punto
esclamativo, seguito immediatamente da una parola chiave che specifica il tipo di oggetto in corso di dichiarazione: ELEMENT per la dichiarazione di elementi, ATTLIST per gli attributi ed ENTITY per le entità.
79
TESTO E COMPUTER
3.3.1. La dichiarazione di un elemento
non fornisce alcun modo per esprimere il “significato” di un
particolare tipo di elemento, se non attraverso le sue relazioni con
altri tipi di elementi (inclusione, suddivisione). Questo tipo di informazione è definita all’interno della DTD.
La dichiarazione di un elemento si articola in due parti: l’etichetta o
tag che lo identifica (ovvero il suo identificatore generico) 9, e la descrizione del suo contenuto in termini strutturali, denominata modello
di contenuto (o content model), come illustrato nello schema che segue:
XML
< !ELEMENT tag_elemento (modello di contenuto) >
La TAB. 3.1 fornisce le specifiche di dichiarazione per le varie tipologie di contenuto:
TABELLA 3.1
Tipologia dei contenuti di un elemento
Tipo di contenuto
Come si dichiara
1
Qualsiasi
sequenza di
caratteri
< !ELEMENT tag_elemento (#PCDATA) >
2
Solo sottoelementi
< !ELEMENT tag_elemento (s1,s2?,s3*) >
< !ELEMENT tag_elemento (s1|s2|s3) >
< !ELEMENT tag_elemento (s1 + ,(s2|s3)*) >
3 Misto
< !ELEMENT tag_elemento (#PCDATA|s1|...|sn)* >
4 Vuoto
< !ELEMENT tag_elemento EMPTY >
5 Qualsiasi tipo
di contenuto
< !ELEMENT tag_elemento ANY >
La riga (1) della TAB. 3.1 esemplifica il più semplice modello di contenuto, ovvero il caso in cui l’elemento in corso di definizione può
contenere soltanto dati di tipo carattere e non presenta dunque articolazioni interne in termini di altri elementi. In questo caso, il modello
di contenuto consiste nella parola riservata #PCDATA (Parsed Character DATA) che specifica che il contenuto dell’elemento in corso di definizione è testo senza marcatori. Nella riga (2) della TAB. 3.1 trovia-
9. All’interno di una DTD, un identificatore generico deve identificare in modo
univoco un elemento, e quindi non può essere assegnato a più elementi diversi.
80
3.
COSTRUIRE UN LINGUAGGIO DI MARCATURA
TABELLA 3.2
Indicatori di occorrenza di un sottoelemento
Simbolo
Descrizione
Numero occorrenze
?
+
*
occorrenza opzionale
occorrenza obbligatoria e ripetibile
occorrenza opzionale e ripetibile
0o1
≥1
≥0
mo invece la dichiarazione di un elemento il cui contenuto è costituito esclusivamente da sottoelementi (elementi figli), per i quali è possibile specificare le modalità di occorrenza. Nel caso in cui i sottoelementi siano più di uno, la loro co-occorrenza e il loro ordinamento
reciproco sono specificati mediante connettori:
– la virgola specifica che i sottoelementi devono ricorrere all’interno
dell’elemento in corso di definizione nell’ordine specificato: ad esempio, il modello di contenuto (s1,s2,s3) specifica che l’elemento s1
deve apparire prima di s2, che a sua volta deve precedere s3;
– la barra verticale indica che i sottoelementi rappresentano scelte
alternative: ad esempio il modello di contenuto (s1|s2|s3) specifica
che l’elemento padre deve contenere uno a scelta dei sottoelementi
elencati.
È anche possibile stabilire restrizioni sul numero di volte in cui
ciascun sottoelemento può ricorrere attraverso indicatori di occorrenza
aggiunti come suffissi al nome del sottoelemento (TAB. 3.2) 10. Se un
sotto-elemento non è seguito da nessuno di questi indicatori, deve ricorrere esattamente una volta.
È possibile inoltre definire modelli di contenuto complessi raggruppando scelte alternative e/o sequenze di sottoelementi attraverso
l’uso di parentesi. Ai sottoelementi complessi così definiti possono essere associati indicatori di occorrenza, come illustrato in (2) nella
TAB. 3.1: ad esempio, la dichiarazione (s2|s3)* indica che l’elemento
in corso di definizione può contenere un numero indefinito da 0 a n
di sottoelementi di tipo s2 e/o s3 senza vincoli sull’ordine reciproco
di occorrenza.
La terza riga della TAB. 3.1 riporta la definizione di elementi a contenuto misto. Come già visto, si tratta di un modello di contenuto particolarmente utile nella codifica di un testo, caratterizzato dalla presenza di sottoelementi intervallati da dati di tipo carattere. Un elemento a contenuto misto deve essere dichiarato come illustrato nella riga
10. Nel PAR. 4.2 ritroveremo questi stessi simboli come moltiplicatori di caratteri
nelle espressioni regolari.
81
TESTO E COMPUTER
(3) della TAB. 3.1: questa dichiarazione indica che l’elemento in corso
di definizione può contenere dati di tipo carattere e sottoelementi di
tipo s1,...,sn. Si noti che nel modello di contenuto misto la parola
riservata #PCDATA deve essere obbligatoriamente la prima della lista.
Nel contenuto misto, i vincoli riguardano soltanto la tipologia dei sotto-elementi, e non l’ordinamento reciproco o il numero delle loro occorrenze: ad esempio, il modello di contenuto misto (#PCDATA|s1|s2)* specifica che l’elemento definito può contenere qualsiasi
numero (≥0) di elementi di tipo s1 e s2 in qualsiasi ordine, opzionalmente intervallati da dati di tipo carattere.
Infine, le righe (4) e (5) della TAB. 3.1 illustrano la dichiarazione
di altre tipologie di contenuto, rispettivamente il caso dell’elemento
vuoto (dichiarato utilizzando la parola chiave EMPTY) e dell’elemento
jolly (contrassegnato dalla parola chiave ANY). Il primo prevede che
l’elemento non possa contenere niente, né dati carattere, né sottoelementi; il secondo, invece, non pone alcun vincolo sul contenuto dell’elemento.
3.3.2. La dichiarazione di un attributo
Una dichiarazione di attributo definisce l’insieme degli attributi pertinenti per la descrizione di un dato elemento e, per ciascun attributo,
stabilisce vincoli sulla tipologia dei valori che può assumere, fornisce
informazioni circa l’obbligatorietà della sua specificazione ed eventualmente sul suo valore di default (cfr. infra). La dichiarazione degli
attributi rilevanti per la descrizione di un elemento è formulata secondo lo schema che segue:
< !ATTLIST tag_elemento
tag_attributo1 tipo_valore
...
tag_attributon tipo_valore
modificatore
modificatore >
La prima riga introduce la definizione di una lista di attributi associati a un elemento, il cui identificatore generico fa seguito alla parola
chiave ATTLIST. Segue la dichiarazione degli attributi, uno per riga.
Questa dichiarazione si articola in tre parti: il nome dell’attributo 11;
11. I nomi di attributi sono soggetti alla stessa tipologia di restrizioni valide per i
nomi degli elementi in XML (cfr. nota 4 in proposito). Al contrario di questi, però, i
nomi di attributi non devono essere identificatori univoci all’interno dell’intera DTD;
questa restrizione vale invece all’interno della lista degli attributi associati a uno stesso
elemento.
82
3.
COSTRUIRE UN LINGUAGGIO DI MARCATURA
TABELLA 3.3
La tipologia dei valori dichiarati per un attributo
Tipo di attributo
CDATA
NMTOKEN
NMTOKENS
Enumerated
ID
IDREF
IDREFS
ENTITY
ENTITIES
Valori associati
Il valore dell’attributo può contenere qualsiasi dato di tipo carattere (Character DATA)
Questo attributo può contenere una o più (nel secondo caso)
stringhe contenenti caratteri alfanumerici (numeri e lettere) più i
seguenti caratteri: “.” (punto), “–” (meno), “_” (trattino basso),
“:” (due punti).
È un tipo di attributo che può assumere un valore solo tra un
insieme di possibili valori definiti dall’autore della DTD; in questo caso i possibili valori sono specificati come (valore1 |
valore2 | ... | valoren)
Il valore dell’attributo deve essere una sequenza di caratteri (definita seguendo le stesse restrizioni di sintassi valide per i nomi
degli elementi XML) che costituisce l’identificatore univoco dell’elemento a cui l’attributo è associato
Il valore dell’attributo è una sequenza di caratteri che costituisce il valore dell’attributo ID di un altro elemento nello stesso
documento XML. IDREFS permette invece di specificare una lista
di sequenze di caratteri ciascuna delle quali costituisce il valore
dell’attributo ID di un altro elemento nello stesso documento
XML (gli elementi della lista devono essere separati da uno spazio)
Il valore dell’attributo deve contenere uno o più (nel secondo
caso) nomi di entità, dichiarate a loro volta all’interno della
DTD
la tipologia di valori che può assumere; notazioni circa l’obbligatorietà o l’opzionalità della sua specificazione così come eventuali valori di
default (rappresentati nello schema precedente dalla voce modificatore).
La tipologia dei valori che può essere dichiarata per un attributo è sintetizzata nella TAB. 3.3. Si noti che il tipo di valore associato
a un attributo può essere dichiarato in due modi diversi: ricorrendo
a parole chiave (le parole riportate in maiuscolo nella prima colonna della TAB. 3.3) oppure specificando una lista di possibili valori
(questo è il caso dell’attributo di tipo Enumerated nella TAB. 3.3).
La parte finale della dichiarazione di attributo specifica la sua obbligatorietà/opzionalità e/o un eventuale valore di default, come indicato nella lista che segue:
– #REQUIRED: si tratta di un attributo per il quale deve essere obbligatoriamente specificato un valore;
83
TESTO E COMPUTER
– #IMPLIED: indica che la specificazione dell’attributo è opzionale;
– #FIXED: permette di fissare nella dichiarazione dell’attributo il valore associato a quell’attributo che rimane costante e immutabile: la
sintassi per la sua specificazione è #FIXED “valore_fisso” dove valore_fisso è il valore associato all’attributo;
– Literal ovvero un valore predefinito – o valore di default – per un
attributo, da adottarsi nel caso in cui non vi sia esplicita menzione
dell’attributo nel testo marcato. La sintassi per specificare un valore
di default è semplicemente il valore dell’attributo riportato tra virgolette, senza alcuna parola chiave. Ad esempio, la dichiarazione seguente specifica che l’elemento s1 deve contenere l’attributo status
e che questo riceve automaticamente il valore free, se per un elemento di tipo s1 nel testo non viene esplicitamente indicato un valore specifico per tale attributo:
< !ATTLIST s1
status
CDATA
“free” >
Una menzione a parte meritano gli attributi di tipo ID e IDREF(S)
(cfr. TAB. 3.3) per il ruolo cruciale da loro svolto nella rappresentazione dell’annotazione linguistica (cfr. PAR. 8.4). I valori associati
ad attributi di tipo ID hanno la funzione di identificare univocamente gli elementi a cui sono associati; ciò implica che in un documento con marcatura XML lo stesso valore non deve apparire più
di una volta e che nella DTD un solo attributo di tipo ID può
essere associato allo stesso tipo di elemento. Un attributo di tipo
IDREF(S) è un riferimento all’attributo di tipo ID di un elemento
(o più elementi nel caso di IDREFS) del documento: i valori di
IDREF devono essere uguali al valore dell’attributo ID di un elemento nello stesso documento. Gli attributi di questo tipo sono
comunemente usati per stabilire relazioni tra elementi che non siano esprimibili nei termini della semplice relazione di inclusione.
3.3.3. La dichiarazione di un’entità
Come nel caso di tutte le altre dichiarazioni, anche la dichiarazione di
un’entità comincia con la parola chiave dedicata ENTITY, seguita dal
nome dell’entità da dichiarare e dal valore a essa associato.
La dichiarazione di un’entità di tipo interno (cfr. PAR. 3.2.3) segue
lo schema:
84
3.
COSTRUIRE UN LINGUAGGIO DI MARCATURA
< !ENTITY nome_entità “valore_entità” >
dove il valore associato all’entità in corso di dichiarazione (specificato tra virgolette) può anche essere costituito da testo con marcatura.
Nel PAR. 3.2.3 abbiamo menzionato un uso tipico delle entità, ovvero quello di associare nomi mnemonici ai riferimenti a carattere: in
questo modo, invece di immettere nel testo il punto di codice corrispondente al carattere, viene inserita un’etichetta più trasparente per
la lettura del testo. Ad esempio, la dichiarazione < !ENTITY auml
“ä” > definisce un’associazione tra la stringa auml e il riferimento al carattere ä (corrispondente al carattere ä). Una volta dichiarata nella DTD, l’entità viene richiamata nel testo attraverso
il riferimento ä che dunque può essere usato per codificare il
carattere ä in alternativa al più oscuro riferimento a carattere
ä 12.
Vale qui la pena menzionare infine un altro tipo di entità, le entità parametriche, il cui uso è ristretto alla DTD e la cui funzione è
quella di rendere modulari alcune dichiarazioni. Ad esempio, può
capitare di dover assegnare lo stesso gruppo di attributi a più elementi; le entità parametriche permettono di dichiarare tali attributi
una sola volta e poi, nella dichiarazione dei singoli elementi, fare
semplicemente riferimento alla corrispondente entità parametrica. A
differenza delle entità generali, le entità parametriche utilizzano il
simbolo di percentuale (%) sia nella dichiarazione sia nei riferimenti.
Nella dichiarazione, il simbolo di percentuale segue la parola chiave
ENTITY, ma precede il nome dell’entità come schematizzato di seguito.
12. Per i repertori di caratteri più comuni, in XML vengono normalmente usate le
dichiarazioni di entità definite da consorzi di standardizzazione come il W3C e la TEI
(cfr. PAR. 3.6.1). Riportiamo di seguito per comodità del lettore le dichiarazioni di
entità definite per le lettere accentate minuscole necessarie per la codifica di testi in
italiano (liste complete di dichiarazioni entità per vari repertori di caratteri sono facilmente reperibili sul web):
– < !ENTITY agrave “à” >
– < !ENTITY eacute “é” >
– < !ENTITY egrave “è” >
– < !ENTITY igrave “ì” >
– < !ENTITY oacute “ó” >
– < !ENTITY ograve “ò” >
– < !ENTITY ugrave “ù” > .
85
TESTO E COMPUTER
< !ENTITY % nome_entità_param
“valore_entità_param” >
Si noti che è richiesto uno spazio prima e dopo il simbolo %. Una
volta dichiarata, è possibile fare riferimento a questa entità in altri
punti della DTD usando il suo nome direttamente preceduto dal simbolo di percentuale e seguito dal punto e virgola (ad esempio
%nome_entità_param;).
3.4
Struttura e validazione di un documento
XML
Un documento XML si articola in due parti chiamate, rispettivamente,
prologo e istanza del documento. Nel prologo sono contenute le informazioni che permettono di interpretare il documento come un documento XML, ricollegandolo alla corrispondente DTD (ove esista); l’istanza di documento racchiude il dato testuale vero e proprio con la
relativa marcatura. Nonostante il prologo sia facoltativo è sempre
consigliabile inserirlo nei propri documenti per completezza di informazione e per consentire una validazione automatica (cfr. infra).
Il prologo si articola a sua volta in due parti: la dichiarazione XML
(XML Declaration) e la dichiarazione del tipo di documento (DocType
Declaration), come nell’esempio che segue:
< ?xml version = ”1.0” encoding = ”utf-8” standalone = ”no”? >
< !DOCTYPE elemento_radice SYSTEM “nome_dtd.dtd” >
La prima riga corrisponde alla dichiarazione XML. Questa ha l’aspetto esteriore di un’istruzione di elaborazione (è infatti delimitata da
< ? ... ? > ) con nome xml e a) fornisce informazioni sulla versione
di XML utilizzata per scrivere il documento (attributo version, il cui
valore è per il momento solo 1.0) 13, b) specifica il set di caratteri
utilizzato per la codifica (attributo encoding; se omesso, viene interpretato come UTF-8, la codifica di caratteri predefinita di XML) 14, e c)
indica se al documento è associata o no una DTD esterna (attributo
standalone che può assumere valore yes o no; se omesso ha valore
13. Al momento, l’unica versione standard di XML è la 1.0.
14. Ogni volta che un parser XML (cfr. Scheda on line 3.1) legge un file XML,
assume che esso sia stato creato con la codifica UTF-8 di Unicode; l’uso di codifiche
diverse – come ad esempio ISO-8859-1 – deve essere specificato esplicitamente nella
dichiarazione iniziale del file XML (ad esempio encoding = ”ISO-8859-1”).
86
3.
COSTRUIRE UN LINGUAGGIO DI MARCATURA
predefinito no). Le tre parti si devono susseguire in questo preciso
ordine. Se presente, la dichiarazione XML dev’essere lka prima riga
del documento.
La seconda riga rappresenta la dichiarazione del tipo di documento, che permette di associare al documento XML la sua DTD. La dichiarazione del tipo di documento specifica qual è l’elemento radice
dell’istanza del documento che segue e contiene il riferimento alla
DTD. Senza questa dichiarazione, i programmi non saprebbero quali
marcatori o tag sono impiegati nel testo codificato e quali regole sintattiche in esso vigono, e quindi non sarebbero in grado di validarlo
(cfr. infra). La dichiarazione del tipo di documento può essere schematizzata come segue:
< !DOCTYPE elemento_radice DTD >
dove DTD può essere:
– l’intera DTD contenuta tra parentesi quadre [...]: in questo caso
si parla di DTD interna al documento;
– un riferimento al file in cui la DTD è contenuta: in questo caso si
parla di DTD esterna. La sintassi del riferimento è SYSTEM “URI_
DTD”, dove “URI_DTD” indica lo Uniform Resource Identifier della
DTD, ovvero il protocollo e l’indirizzo che consentono di accedervi:
può trattarsi di un nome di file (come nell’esempio sopra) oppure di
un indirizzo web che rimanda al sito in cui si trova la DTD 15.
Quando si sviluppa una DTD, può essere utile mantenerla con il
testo codificato all’interno dello stesso file in modo da potere simultaneamente modificare i contenuti e verificarne la correttezza. La soluzione della DTD interna non è più conveniente nel momento in cui vi
siano più testi codificati che fanno riferimento alla stessa DTD. Si noti
che è possibile avere una DTD suddivisa in due porzioni, una interna
e una esterna al documento; in questo caso, il sottoinsieme interno
viene elaborato per primo e gli viene data la precedenza su qualsiasi
sottoinsieme esterno. Questa funzionalità è utile quando si ricorra a
una DTD esterna, di cui si desidera modificare alcune parti per un’applicazione specifica.
Una volta preparato il documento secondo la struttura descritta
15. Quando si tratta di una DTD standard (“pubblica”), la sintassi del riferimento
è PUBLIC Formal_Public_Identifier “URI_DTD”. Il Formal_Public_Identifier
fornisce informazioni sulla DTD (ente che l’ha sviluppata, lingua ecc.) e deve essere
formulato secondo una sintassi per la quale rimandiamo a letture di approfondimento.
87
TESTO E COMPUTER
sopra, è possibile verificarne la correttezza formale. Esistono due livelli di correttezza, corrispondenti ai concetti di documento XML
ben formato e documento XML valido. Un documento XML è ben
formato quando obbedisce a tutte le regole sintattiche di XML, ovvero quando sono rispettate le convenzioni per la sintassi dei nomi
degli elementi e degli attributi, i marcatori sono bilanciati (a ogni
tag di apertura deve corrisponderne uno di chiusura), gli elementi
non si accavallano ed esiste un solo elemento radice, tutti i valori
degli attributi sono racchiusi tra virgolette, e tutti i riferimenti a entità riguardano entità predefinite o dichiarate nella DTD. Questo
tipo di verifica viene effettuata solo sulla base delle regole sintattiche di XML. Un documento XML è valido quando rispetta la tipologia di marcatori e le gerarchie di incassamento dichiarate nella DTD
del documento. In questo caso il documento XML è un’istanza valida della classe di documenti definita dalla DTD. La nozione di validità è più restrittiva del concetto di “ben formato”: infatti, un documento XML per essere valido deve essere ben formato e presentare i marcatori previsti dalla DTD, nel giusto ordine e con i giusti attributi. La validazione dipende dunque dallo specifico linguaggio di
marcatura definito all’interno della DTD.
Per poter verificare se la codifica sia stata effettuata correttamente, esistono software dedicati all’analisi sintattica del testo in
formato XML, designati come parser XML. Esistono due tipi di parser
XML: validanti, che verificano che il testo sia valido, ovvero sia conforme alle specifiche definite nella DTD, e non validanti, che si limitano a verificare la correttezza sintattica della marcatura del testo,
ovvero che il documento XML sia ben formato. Un esempio di questo secondo tipo di programma è il browser Internet Explorer (cfr.
Scheda on line 3.1).
3.5
La codifica del testo in formato
XML:
un esempio
Vediamo un esempio di quanto detto finora procedendo alla codifica
di un frammento di testo estratto da Le avventure di Pinocchio. Procediamo innanzitutto alla definizione della DTD che specifica la tipologia di marcatori che intendiamo usare nella codifica del testo e le regole della loro combinazione. La semplice DTD riportata nell’esempio
3.1, che salveremo in un file di tipo solo testo con il nome di libro.dtd, contiene gli elementi di base per la codifica della struttura
interna del testo:
88
3.
ESEMPIO 3.1
Un esempio di
COSTRUIRE UN LINGUAGGIO DI MARCATURA
DTD
< !-- DTD per l’esempio del libro -- >
< !ELEMENT
< !ELEMENT
< !ELEMENT
< !ELEMENT
< !ELEMENT
< !ELEMENT
< !ELEMENT
libro (titolo, autore + , parte + ) >
titolo (#PCDATA | sottotitolo)* >
sottotitolo (#PCDATA) >
autore (#PCDATA) >
parte (titolo, capitolo + ) >
capitolo (titolo, capoverso + ) >
capoverso (#PCDATA) >
< !ATTLIST parte
p_id ID #REQUIRED >
< !ATTLIST capitolo
c_id ID #REQUIRED >
< !ATTLIST capoverso
num ID #REQUIRED >
< !ENTITY ograve
< !ENTITY egrave
”ò” >
”è” >
L’elemento radice è rappresentato da libro che contiene un elemento titolo, uno o più elementi di tipo autore e si articola in uno o
più elementi di tipo parte. Il titolo è un elemento di tipo misto,
che può essere composto da testo senza marcatura (identificato da
#PCDATA) al quale può affiancarsi un sottotitolo. Gli elementi
sottotitolo, autore e capoverso sono accomunati dal fatto di
avere contenuto solo di tipo testuale, senza ulteriori articolazioni in
sottoelementi. Infine, gli elementi parte e capitolo presentano
un’articolazione interna rispettivamente in titolo e uno o più elementi di tipo capitolo, e in titolo e uno o più elementi di tipo
capoverso. Agli elementi parte, capitolo e capoverso è associato un attributo di tipo ID per consentirne una più facile e immediata
identificazione all’interno del testo. Segue la dichiarazione di due entità per una codifica più agevole dei caratteri accentati ò ed è.
Una volta definite le regole per la marcatura, procediamo alla codifica del testo, ovvero alla preparazione del file XML che chiameremo
pinocchio.xml. Nell’esempio 3.2 riportato di seguito, il prologo è costituito dalla prima e dalla seconda riga, mentre l’istanza del documento va dalla quarta riga, dove è specificata l’apertura dell’elemento
radice, fino alla fine.
89
TESTO E COMPUTER
ESEMPIO 3.2
Frammento di testo con marcatura
XML
< ?xml version = ”1.0” encoding = ”UTF-8”? >
< !DOCTYPE libro SYSTEM “libro.dtd” >
< !-- qui comincia l’istanza del documento -- >
< libro >
< titolo > Le avventure di Pinocchio
< sottotitolo > Storia di un burattino < /sottotitolo >
< /titolo >
< autore > Carlo Collodi < /autore >
< parte p_id = ”1” >
< titolo > Parte prima < /titolo >
< capitolo c_id = ”p_I” >
< titolo > Come andò che maestro Ciliegia, falegname, trovò un pezzo di legno, che piangeva e
rideva come un bambino. < /titolo >
< capoverso num = ”p1c1c1” > C’era una volta... < /capoverso >
< capoverso num = ”p1c1c2” > - Un re! – diranno subito i
miei piccoli lettori. < /capoverso >
< capoverso num = ”p1c1c3” > No, ragazzi, avete sbagliato.
C’era una volta un pezzo di legno. < /capoverso >
< capoverso num = ”p1c1c4” > Non era un legno di lusso, ma
un semplice pezzo da catasta, di quelli che d’inverno si
mettono nelle stufe e nei caminetti per accendere il fuoco
e per riscaldare le stanze. < /capoverso >
< !-- altri capoversi del capitolo qui -- >
< /capitolo >
< !-- altri capitoli della parte qui -- >
< /parte >
< !-- altre parti qui -- >
< /libro >
Nella dichiarazione del tipo di documento abbiamo indicato il nome
del file della DTD corrispondente 16. Se apriamo il documento XML riportato sopra con un browser come Internet Explorer, otteniamo una
16. Se mettiamo come in questo caso solo il nome del file della DTD, al momento
della validazione del documento dobbiamo assicurarci che il file XML e la DTD siano
nella stessa cartella sul computer. Ovviamente la DTD può anche essere messa in una
cartella differente, ma in questo caso nella dichiarazione del tipo di documento dobbiamo specificare il percorso completo di cartelle e sottocartelle dove si trova la DTD,
per dare la possibilità al parser di recuperarla.
90
3.
COSTRUIRE UN LINGUAGGIO DI MARCATURA
3.1
Visualizzazione in Internet Explorer del testo marcato nell’esempio 3.2
FIGUR A
“visione ad albero” del documento XML (riportata nella FIG. 3.1),
dove la struttura gerarchica sottostante è ricostruibile a partire dall’indentazione dei vari elementi costitutivi del testo. Possiamo anche
notare che i riferimenti a entità sono stati sostituiti con il corrispondente carattere accentato.
3.6
Standard e codifica del testo
La comunità scientifica ha da tempo avvertito la necessità di poter
condividere e scambiare testi digitali codificati: questo non solo per
ampliare la circolazione di materiali e risorse utili per la ricerca, ma
anche per minimizzare la sovrapposizione e la duplicazione di iniziative, quali la creazione e la codifica di un corpus, che richiedono un
investimento economico, temporale e organizzativo non indifferente.
La codifica testuale effettuata sulla base di un metalinguaggio di marcatura standard come XML fa sì che il testo sia elaborabile da una ricca varietà di strumenti software, salvaguardando al contempo l’indipendenza dei dati codificati rispetto a un’applicazione specifica e a
un sistema operativo. Per questi motivi, possiamo affermare che l’uso
91
TESTO E COMPUTER
dello standard XML per la codifica digitale del testo rende indubbiamente più facile e immediata la condivisione di testi digitali. Rimane
tuttavia da verificare se l’uso di XML sia di per sé sufficiente ad assicurare una completa condivisibilità e interscambiabilità del testo digitale: ad esempio, se questo basti a rendere immediatamente utilizzabile
per i nostri scopi di ricerca un testo codificato da altri, oppure a mettere a disposizione di altri utenti un testo rappresentato secondo le
nostre convenzioni.
Come illustrato nelle precedenti sezioni, XML non fornisce alcuna
prescrizione relativamente alla tipologia, alla quantità e al nome dei
marcatori – ovvero in relazione al contenuto della codifica – ma si occupa esclusivamente di fornire un insieme di regole formali per la definizione di un linguaggio di marcatura. La conformità di un testo
allo standard XML riguarda pertanto solo la forma della sua rappresentazione digitale, cioè le regole di buona formazione del documento XML. Una condizione senz’altro necessaria, ma non sufficiente, perché il testo codificato sia immediatamente condivisibile e interpretabile da un utente esterno.
Una reale condivisione del contenuto della codifica deve necessariamente passare attraverso la conoscenza del repertorio delle categorie usate, del loro significato e delle loro relazioni, così come della batteria di criteri per la loro applicazione al testo. Riprendendo
un uso terminologico introdotto nel capitolo precedente, ciò implica
che un’effettiva interscambiabilità del testo digitale può essere garantita soltanto da una codifica basata su uno schema di codifica e
annotazione il più possibile condiviso, ovvero su uno schema standard. Dal punto di vista di XML ciò equivale a dire che la codifica
deve essere basata su una DTD standard, accompagnata da un insieme di specifiche che forniscono i criteri di applicazione al testo dei
marcatori.
Un’opera di codifica che utilizzi un metalinguaggio di marcatura
standard e uno schema standard di codifica e annotazione trasforma il
testo digitale in una risorsa di informazione pronta all’uso. In questo
modo viene garantito che l’informazione codificata nel testo sia interscambiabile e condivisibile sia a un livello formale (quello del metalinguaggio) sia a un livello “semantico” (riguardante il contenuto
della codifica). La consapevolezza dell’importanza di una sempre
maggiore interscambiabilità a livello di contenuto del materiale testuale ha condotto alla nascita di una serie di iniziative internazionali
per la progressiva standardizzazione della rappresentazione digitale
del testo.
92
3.
COSTRUIRE UN LINGUAGGIO DI MARCATURA
3.6.1. Iniziative internazionali di standardizzazione
della codifica del testo
Dal 1987, la Association for Computers and the Humanities (ACH), la
Association for Computational Linguistics (ACL) e la Association for
Literary and Linguistic Computing (ALLC) hanno avviato un progetto
internazionale per lo sviluppo di un modello di codifica dell’informazione testuale in formato digitale che intende proporsi come punto di
riferimento – o standard – a livello internazionale. Questo progetto –
denominato Text Encoding Initiative (TEI) e documentato alla pagina
http://www.tei-c.org/ – ha già realizzato diverse versioni di raccomandazioni per la codifica digitale di dati umanistico-letterari: la prima
versione, basata sul linguaggio di marcatura SGML, è uscita nel 1994
con il titolo Guidelines for Electronic Text Encoding and Interchange
(TEI P3); a questa, è seguita una nuova versione nel 2002 (TEI P4) basata su XML; attualmente, è in corso di definizione la versione TEI P5.
Oggi, la conformità alle specifiche TEI rappresenta un requisito importante per garantire l’effettiva condivisibilità dei testi codificati.
Le raccomandazioni TEI sono costituite da un insieme modulare
di DTD (prima in SGML, ora in XML) che comprende circa 400 marcatori diversi; sono state progettate per consentire la rappresentazione
elettronica di un’amplissima gamma di tipologie di testi (opere di
prosa, articoli di giornale, componimenti poetici, opere teatrali, fonti
manoscritte, solo per menzionarne alcune), per le finalità e gli usi più
vari che spaziano dalla costruzione dell’edizione critica di un’opera, a
studi stilistici, analisi linguistiche e strutturali del testo e così via 17.
La flessibilità e la generalità di queste raccomandazioni costituiscono al tempo stesso il punto di forza e di debolezza dello schema
di codifica TEI. Come conseguenza di ciò, sono nate una serie di iniziative finalizzate ad applicare, ovvero specializzare ed estendere, lo
schema TEI rispetto a particolari campi di studio, identificando i parametri di codifica rilevanti e colmando al contempo le inevitabili lacune delle raccomandazioni TEI in relazione a specifici aspetti di codifica. Di particolare interesse per la comunità internazionale della LC è
CES (Corpus Encoding Standard, Ide, Priest-Dorman and Veronis,
17. Al fine di facilitare l’applicazione dello schema di codifica della TEI da parte
di una vasta utenza e senza richiedere lo studio dell’intero schema di codifica è stato
sviluppato un sottoinsieme denominato TEI Lite che permette la creazione di documenti “TEI–compliant” (cioè validi rispetto all’intero schema) in maniera rapida, e si
presta facilmente allo sviluppo di applicazioni. Maggiori dettagli su TEI Lite possono
essere trovati al seguente indirizzo: http://www.tei-c.org/Lite/.
93
TESTO E COMPUTER
1996), un’iniziativa volta alla definizione di uno schema di codifica
standard finalizzato all’analisi linguistica del testo sia per scopi di ricerca sia nell’ambito di applicazioni di ingegneria del linguaggio. Lo
standard CES è nato come parte delle raccomandazioni del progetto
dell’Unione europea EAGLES (Expert Advisory Group for Language
Engineering Standards) 18 per quanto riguarda la codifica di corpora
testuali. Con l’avvento di XML, lo standard CES si è evoluto in XCES
(XML Corpus Encoding Standard, 2002) 19. Lo standard CES/XCES è stato adottato per la codifica di numerosi corpora: tra gli esempi principali possiamo ricordare i corpora multilingui paralleli Multext e Multext-East, i corpora della famiglia Parole e più di recente l’American
National Corpus (cfr. PAR. 1.2.1), attualmente in fase di sviluppo. Vediamo adesso più da vicino le caratteristiche principali dello standard
XCES.
3.6.2. Lo schema di codifica
XCES
Lo schema di codifica XCES distingue tre categorie di informazione
che rivestono un ruolo importante nella codifica del testo finalizzata a
elaborazioni automatiche:
1. documentazione: include informazione globale sul testo, sul suo
contenuto e la sua codifica; ad esempio, la descrizione bibliografica
del documento, il set di caratteri usato, la descrizione di convenzioni
di codifica;
2. dato linguistico primario: all’interno di questa categoria vengono
distinti due tipi di informazioni:
– macrostruttura del testo: include elementi testuali fino a livello di
capoverso (che rappresenta l’unità più piccola che può essere identificata indipendentemente dalla lingua): ad esempio volume, parte, capitolo fino al livello di capoverso, così come titoli, sezioni, note, didascalie ecc. 20;
18. EAGLES è stata in realtà un’iniziativa internazionale di standardizzazione dalle
ambizioni molto più ampie, che ha abbracciato aspetti molteplici e diversi della linguistica computazionale e dell’ingegneria del linguaggio, come la composizione e la
rappresentazione di corpora testuali, lessici computazionali sintattici e semantici, formalismi linguistico-computazionali ecc. Il progetto EAGLES è stato ideato e diretto da
Antonio Zampolli.
19. Lo standard XCES, sviluppato successivamente a partire da CES, è il risultato
della collaborazione tra il Department of Computer Science, Vassar College (USA), e
l’Equipe Langue et Dialogue, LORIA/CNRS (Francia).
20. Pertengono a questo livello anche aspetti di composizione tipografica del testo e informazione non testuale (ad esempio immagini).
94
3.
COSTRUIRE UN LINGUAGGIO DI MARCATURA
– microstruttura del testo: include elementi che appaiono sotto il livello del capoverso che sono spesso segnalati nel testo – talora in
modo ambiguo – mediante convenzioni tipografiche dipendenti dalla
lingua. Ad esempio, periodi, citazioni, abbreviazioni, nomi propri,
date, termini evidenziati ecc.;
3. annotazione linguistica: arricchisce il testo associando al dato linguistico primario vari livelli di interpretazione linguistica. Tipicamente l’annotazione linguistica avviene in relazione alla microstruttura del
testo, e include informazione relativa ai vari livelli di descrizione linguistica, ovvero informazione morfologica, morfo-sintattica, sintattica,
semantica ecc.
XCES fornisce una serie di raccomandazioni per la codifica del
dato linguistico primario e la relativa documentazione, brevemente illustrate di seguito, così come dà indicazioni sulla codifica dell’annotazione linguistica, sulle quali torneremo nel CAP. 8.
Ogni testo codificato conformemente alle specifiche XCES è articolato in due parti, individuate rispettivamente dagli elementi < cesHeader > e < text > , entrambi obbligatori. L’elemento < cesHeader > ,
corrispondente alla categoria “documentazione”, è usato per rappresentare informazioni bibliografiche ed editoriali relative al testo codificato che sono espresse in termini di metadati, ovvero “dati sui dati” 21.
L’elemento < text > , usato per rappresentare il dato linguistico primario, contiene la codifica digitale del testo vero e proprio. La struttura generale di ogni testo conforme alle specifiche XCES è la seguente:
< cesCorpus >
< cesHeader >
[metadati]
< /cesHeader >
< text >
[contenuto testuale]
< /text >
< /cesCorpus >
L’elemento < cesHeader > si articola in quattro sotto-elementi che
forniscono la descrizione bibliografica del testo ( < fileDesc > ), indicazioni sulla fonte originale del testo e la sua codifica elettronica
( < encodingDesc > ), informazioni relative ad altri aspetti del testo
21. I metadati costituiscono in qualche modo il “curriculum vitae” dei dati, ovvero raccolgono le informazioni relative al dove, al quando, al come e da chi i dati
sono stati ottenuti. Si tratta quindi di un corredo indispensabile per rendere tali dati
fruibili correttamente da chiunque, anche a distanza di tempo e di spazio.
95
TESTO E COMPUTER
quali la lingua ( < profileDesc > ) e un sommario del processo di
revisione della versione elettronica del testo ( < revisionDesc > ).
Con l’elemento < text > viene codificata l’articolazione interna
del testo che raggruppa le frasi che lo compongono in blocchi testuali, definendo una struttura gerarchica a più livelli in cui ogni livello può presentare più occorrenze, come esemplificato di seguito
nella codifica XCES di parte del frammento testuale dell’esempio 3.2:
< text >
< body >
< div type = ”Part” n = ”1” >
< head > Parte prima < /head >
< div type = ”Chapter” n = ”I” >
< head > Come andò che maestro Ciliegia,
falegname, trovò un pezzo di legno, che
piangeva e rideva come un bambino. < /head >
< p id = ”p1” >
< s id = ”p1s1” > C’era una volta... < /s >
< /p >
< p id = ”p2” >
< s id = ”p2s1” > - Un re! – diranno subito i
miei piccoli lettori. < /s >
< /p >
< p id = ”p3” >
< s id = ”p3s1” > No, ragazzi, avete sbagliato. < /s >
< s id = ”p3s2” > C’era una volta un pezzo di
legno. < /s >
< /p >
< !-- altri capoversi del capitolo qui -- >
< /div >
< !-- altri capitoli della parte qui -- >
< /div >
< /body >
< /text >
< body > è l’elemento che contiene il corpo del testo. L’elemento
< div > è usato per la marcatura delle divisioni strutturali del testo il
cui tipo è specificato dall’attributo type (gli elementi di tipo < div >
nell’esempio sopra corrispondono rispettivamente alla suddivisione in
parti e capitoli del testo) 22. L’elemento < head > contiene il titolo di
22. I testi mostrano un’ampia variazione per quanto riguarda la tipologia di suddivisioni strutturali e la loro articolazione interna: a seconda del genere a cui appartie-
96
3.
COSTRUIRE UN LINGUAGGIO DI MARCATURA
suddivisioni strutturali, mentre < p > è il tag che identifica l’elemento
capoverso (paragraph), la più piccola unità testuale di tipo strutturale
in cui può essere diviso un testo in prosa. Infine, all’interno di ogni
capoverso, sono marcati elementi della microstruttura del testo, ad
esempio le frasi contrassegnate dall’etichetta < s > (sentence).
Riguardo alla rappresentazione del dato linguistico primario, XCES
ha identificato diversi livelli di codifica ai quali un testo può essere
sottoposto. Si va da un livello minimale, che prevede la codifica della
macrostruttura del testo fino al livello di capoverso, a livelli più complessi che richiedono una marcatura più ricca e articolata per quanto
riguarda gli elementi interni ai capoversi (si va dalla marcatura di citazioni a quella di abbreviazioni, numeri e parole straniere).
3.7
Considerazioni conclusive
Nei tre capitoli di questa prima parte del libro, incentrata sui dati
della lingua e la loro rappresentazione, abbiamo visto il testo trasformarsi da generica fonte di dati linguistici (come tratteggiato nel CAP.
1) in vera e propria fonte di informazione linguistica (CAP. 2). Si tratta
di un passaggio che è mediato da un complesso processo di codifica
articolato su due livelli: una codifica di livello zero, che assegna a
ogni carattere del testo una rappresentazione binaria, e una codifica
di alto livello che associa al dato testuale primario informazione interpretativa che spazia da una descrizione dell’organizzazione testuale a
rappresentazioni più propriamente linguistiche. È appunto una codifica di questo tipo che arricchisce il valore informativo del dato testuale primario, rendendolo suscettibile di una vasta gamma di analisi
ed elaborazioni nel campo della LC.
L’affermarsi di metalinguaggi di marcatura standard come XML e
il diffondersi di schemi standard di codifica del testo (entrambi trattati in questo capitolo) hanno permesso ai corpora testuali codificati
di compiere un ulteriore passo in avanti, ovvero di trasformarsi in risorse di informazione linguistica, interscambiabili e portabili, a disposizione della comunità scientifica. Questo processo ha indubbiamente
facilitato la formazione di un vero e proprio spazio virtuale, in continua espansione, popolato di risorse di informazioni linguistiche
“aperte e dotate di vita autonoma”: risorse cioè che possono essere
ne, il testo si articola in diversi tipi di unità (capitoli, sezioni, parti ecc.). La codifica
mediante un elemento sottospecificato ( < div > ) permette la massima flessibilità dello
schema di codifica e l’adattabilità a diversi generi testuali.
97
TESTO E COMPUTER
condivise, utilizzate e aggiornate dalla comunità di ricerca, in un ciclo virtuoso che coniuga esigenze di autonomia e cooperazione
scientifica.
Per saperne di più
PIERAZZO E.
(2005), La codifica dei testi. Un’introduzione, Carocci, Roma
(capp. 3 e 4).
SPERBERG-MCQUEEN C. M., BURNARD L. (eds.) (2002), TEI P4: Guidelines for
Electronic Text Encoding and Interchange, Text Encoding Initiative Consortium, XML Version, Oxford, Providence, Charlottesville, Bergen.
Siti web
Il sito sull’Extensible Markup Language (XML) del Consorzio W3C, http://
www.w3.org/XML/
Traduzione italiana delle raccomandazioni del W3C Extensible Markup Language (XML) 1.0, a cura di Andrea Marchetti, http://www.xml.it:23456/XML/
REC-xml-19980210-it.html
Corso introduttivo su XML nel sito delle W3CSCHOOLS: http://www.w3schools.com/xml/default.asp
TEI Home Page, http://www.tei-c.org/
CIOTTI F. (a cura di) (1995), TEI Lite, traduzione italiana della TEI U5 1995,
http://www.tei-c.org/Lite/teiu5_it.html
Corpus Encoding Standard (CES), http://www.cs.vassar.edu/CES/
Versione XML di CES, http://www.cs.vassar.edu/XCES/
98
Parte seconda
Metodi e tecniche di analisi testuale
4
Dal bit alla parola
Questa seconda parte del libro è dedicata a illustrare alcune tecniche
di base per l’analisi computazionale del testo. In particolare, nei prossimi due capitoli verranno presentati metodi quantitativi che permettono di ricavare informazioni sulla lingua e sui principi della sua organizzazione proprio analizzando come le parole si distribuiscono nei
testi. L’applicazione appropriata di tali metodi computazionali presuppone che il computer sia in grado di identificare quali sono le parole in un testo. A prima vista questo sembra essere un problema banale, dal momento che le parole di un testo ci appaiono sullo schermo di un computer con la stessa evidenza e la stessa naturalezza con
cui siamo abituati a vederle sulla carta. In realtà, però, come si è detto nel CAP. 2, dietro le quinte la situazione è molto più complessa.
Essere in grado di riconoscere una parola in un testo richiede, infatti, criteri di identificazione molto differenti che riguardano aspetti
grafici, morfo-sintattici e semantici. Dall’altro lato, per un computer
un testo è semplicemente un insieme di righe, ciascuna formata da
una sequenza di caratteri che termina con un ritorno accapo. Il problema cruciale è che non esiste nessuna corrispondenza diretta tra
una sequenza di caratteri e una parola, e le righe di un file non coincidono necessariamente né con una frase né con un capoverso. Le
parole sono prima di tutto unità linguistiche e di contenuto, che devono essere quindi ricostruite a partire dalla sequenza di cifre binarie
che costituiscono la “materia” del testo digitale. Questo lo si può fare
solo dotando il computer di una serie di conoscenze sulla struttura e
sulle convenzioni della lingua che permettano di eliminare o almeno
ridurre le differenze tra l’organizzazione fisica del testo digitale (come
il computer vede il testo) e l’organizzazione logica del testo, con il suo
“tessuto linguistico” di parole che a loro volta si combinano in unità
più complesse (ad esempio sintagmi, frasi, paragrafi ecc.). Nel PAR.
4.2 vedremo come il linguaggio delle espressioni regolari permette di
tradurre tali conoscenze in regole formali direttamente interpretabili
101
TESTO E COMPUTER
dal computer e che lo mettono dunque in grado di identificare le parole in un testo sulla base di criteri linguisticamente motivati. Al tempo stesso, familiarizzare con le espressioni regolari permetterà al lettore di impadronirsi di uno strumento fondamentale per eseguire
esplorazioni avanzate dei dati testuali (cfr. PAR. 7.3).
4.1
La “tokenizzazione” del testo
In LC le unità di base del testo digitale sono i “token”, una famiglia
alquanto eterogenea che raggruppa oltre alle parole ortografiche tradizionali (con alcune importanti distinzioni cui accenneremo più
avanti), anche numeri, sigle, segni di punteggiatura, nomi propri e altri strani esemplari del “bestiario” testuale. Sebbene i token possano
essere anche delle entità complesse con costituenti interni talvolta
ben riconoscibili (come nel caso dei morfemi o i componenti di una
data), tuttavia sono tutti accomunati dalla caratteristica di rappresentare le unità di base per i successivi livelli di elaborazione (morfologico, sintattico ecc.). Il processo di segmentazione del testo in token è
detto “tokenizzazione” e può essere realizzato automaticamente attraverso l’uso di appositi programmi chiamati “tokenizzatori” (cfr. Scheda on line 4.1). Sebbene la nozione di token includa, come abbiamo
detto, quella di parola, è importante tenere presente che è al tempo
stesso assai più semplice di quest’ultima. Infatti, come vedremo nel
PAR. 4.1.1, i token sono identificati nel testo sulla base di caratteristiche superficiali, pertinenti alla sua codifica di livello zero. La tokenizzazione, pertanto, non si basa su espliciti criteri morfologici, sintattici o semantici, che invece entrano a pieno titolo nella definizione
linguistica di parola. Ad esempio, dal punto di vista della tokenizzazione del testo, darglielo è considerato come un token unico, anche se
dal punto di vista morfo-sintattico è in realtà composto da tre unità
distinte (l’infinito del verbo DARE seguito da due pronomi clitici) 1.
La tokenizzazione è generalmente considerata un compito abbastanza semplice per quelle lingue come l’italiano che adottano la convenzione ortografica di delimitare le parole con spazi. Altre lingue,
come il cinese o il giapponese, hanno invece un sistema ortografico
continuo e le parole ricorrono una di seguito all’altra, senza segni di
separazione. In tali casi, la tokenizzazione del testo è un’operazione
estremamente complessa e richiede l’uso di algoritmi sofisticati, che
1. Da ora in avanti l’uso del maiuscoletto indica che una particolare forma è usata per denotare un esponente lessicale (o lemma).
102
4.
DAL BIT ALLA PAROLA
ricorrono generalmente a modelli statistici e a lessici di riferimento
per operare il riconoscimento delle parole nel testo. Nelle lingue a
ortografia continua la tokenizzazione del testo assomiglia al problema
che si pone per il riconoscimento e l’interpretazione del linguaggio
parlato: in questo caso, infatti, l’input è costituito da un segnale acustico continuo che deve essere segmentato e proiettato su sequenze di
unità discrete, le parole, il cui riconoscimento è la precondizione per
poter decodificare il contenuto del messaggio.
Limitandoci al caso delle lingue con ortografia segmentata, in prima approssimazione potremmo definire un token come una qualsiasi
sequenza di caratteri delimitata da spazi (comprendendo in questa
nozione anche il segno di tabulazione, l’inizio riga e l’accapo). Questo
fornirebbe ai tokenizzatori un criterio banale per la segmentazione
del testo, poiché i confini tra i token potrebbero essere riconosciuti
semplicemente individuando i caratteri di spazio nel testo. In realtà,
però, questo tipo di soluzione è troppo riduttiva, come si evince dall’esempio seguente:
C’era una volta un pezzo di legno.
Adottando il criterio degli spazi come delimitatori di token, il testo
verrebbe segmentato in questo modo:
C’era | una | volta | un | pezzo | di | legno.
Il risultato contiene delle unità di analisi non appropriate. La sequenza C’era, considerata un token unico, si compone invece, da un punto
di vista linguistico, di due unità distinte, il clitico con elisione C’ seguito da era come voce del verbo essere. Analogamente il token legno. dovrebbe essere segmentato nei token distinti legno e il segno di
punteggiatura. Poiché vogliamo che i token corrispondano a unità
linguisticamente plausibili, il risultato che vogliamo ottenere è il seguente, in cui il testo viene ora segmentato in 9 token:
C’ | era | una | volta | un | pezzo | di | legno | .
Dunque, sebbene nelle lingue a ortografia non continua gli spazi siano degli indicatori utili per riconoscere i confini tra token, essi non
sono di per sé sufficienti a garantire la corretta segmentazione del testo. Poiché i token rappresentano le unità di base per le nostre analisi
computazionali, la loro identificazione deve essere guidata da criteri
strettamente linguistici.
103
TESTO E COMPUTER
4.1.1. I criteri per la tokenizzazione
Ciò che rende la tokenizzazione un’operazione non banale anche
per una lingua come l’italiano è che le convenzioni ortografiche e la
struttura del lessico fanno sì che non esista un rapporto biunivoco
tra sequenze di caratteri delimitati da spazi e i token come unità linguistiche di base. Una sequenza continua di caratteri può infatti corrispondere a più di un token, come nel caso di C’era nell’esempio
precedente. Viceversa, sequenze di caratteri contenenti spazi possono costituire un token unico: ad esempio, il nome La Spezia rappresenta dal punto di vista linguistico un elemento atomico e per tanto
deve essere considerato come un solo token, nonostante includa uno
spazio.
La variabilità linguistica incide enormemente sulla complessità
della segmentazione del testo, così come su tutte le dimensioni di organizzazione linguistica. A livello della tokenizzazione, la variabilità
riguarda le diverse convezioni ortografiche che vengono adottate a seconda del tipo di testo, genere o registro. Una stessa parola può infatti avere più varianti ortografiche, non di rado addirittura nello stesso testo: ad esempio, database si alterna spesso a data base, e similmente markup viene anche reso con mark-up o con mark up. Lo stesso vale anche per parole italiane composte o prefissate: una semplice
ricerca sul web evidenzia come il termine semilavorato si trovi attestato anche nelle varianti semi-lavorato, semi lavorato e semi – lavorato. La tokenizzazione deve essere dunque in grado di gestire le varianti ortografiche delle parole, eventualmente provvedendo a una
loro normalizzazione. Non solo, infatti, casi come semi lavorato o
data base devono essere considerati come token unici, ma è certamente preferibile riportare le loro varianti a una forma ortografica di
base, per garantire il loro trattamento unitario nelle successive analisi
linguistiche.
Esiste anche una forte variabilità interlinguistica. Le date sono
scritte secondo convenzioni diverse in italiano e in inglese; Manning e
Schütze (1999, p. 131) riportano un impressionante numero di varianti nel modo di scrivere i numeri telefonici a seconda del paese e
della lingua. Le convenzioni per la scrittura dei numeri sono anch’esse soggette a variazione interlinguistica: 45.632,5 viene scritto
45,632.5 in inglese e 45 632,5 in francese. In alcune lingue, inoltre, i
composti nominali sono normalmente scritti senza spazi di separazione: ad esempio carta di credito diventa credit card in inglese ma Kreditkarte in tedesco.
104
4.
DAL BIT ALLA PAROLA
La corretta tokenizzazione del testo richiede dunque tre passi
fondamentali:
1. stabilire con precisione quali siano le unità linguistiche atomiche
di interesse, per definire i tipi di token in cui il testo deve essere
segmentato;
2. individuare la metodologia e i criteri più opportuni per l’identificazione dei token e le necessarie operazioni di elaborazione del testo.
Queste comprendono tipicamente i. la separazione di sequenze di caratteri che devono essere analizzate come token multipli, ii. l’accorpamento in un unico token di elementi distinti e iii. la normalizzazione
di eventuali varianti ortografiche delle parole;
3. esprimere i criteri e le trasformazioni necessarie in un linguaggio
formale (come ad esempio le espressioni regolari, cfr. PARR. 4.2 e 4.3)
che sia traducibile in un programma eseguibile dal computer.
Le modalità con le quali va effettuata la tokenizzazione dipendono fortemente dal tipo di linguaggio e dal genere del testo, così come
dal tipo di analisi computazionale a cui siamo interessati. Generi e
testi differenti possono porre problemi diversi in fase di tokenizzazione e richiedono soluzioni specifiche. Come per tutti i tipi di analisi
computazionale, è dunque fondamentale definire i criteri e i processi
di tokenizzazione sulla base di un’analisi preliminare di un corpus
sufficientemente rappresentativo del tipo di linguaggio e di struttura
testuale su cui poi il tokenizzatore dovrà operare. Vediamo adesso
più da vicino i problemi principali della tokenizzazione e alcuni criteri linguistici per la loro soluzione.
Punteggiatura e altri segni ortografici
I segni di punteggiatura compaiono attaccati o alla parola che li
precede (ad esempio virgole, punti, virgolette e parentesi di chiusura ecc.) o alla parola che li segue (ad esempio virgolette e parentesi di apertura ecc.). Inoltre, quando una parola include l’apice
come segno di elisione, questa viene scritta attaccata alla parola
che segue (ad esempio c ’ era). I segni di punteggiatura devono
però essere considerati come token indipendenti, ed è dunque necessario separarli, in fase di tokenizzazione, dalla parola a cui si
accompagnano.
Dal momento che i segni di interpunzione costituiscono un insieme assai ristretto e comunque ben definibile, la loro individuazione e
trasformazione in token indipendenti potrebbe apparire un’operazione banale. Il problema è che la punteggiatura è ambigua, ovvero lo
stesso segno di interpunzione ha usi diversi, che richiedono tratta105
TESTO E COMPUTER
TABELLA 4.1
Usi principali del punto
Fine frase
Abbreviazioni
Acronimi
cifre decimali
date
indirizzi internet o e-mail
C’era una volta un pezzo di legno.
Sig. Rossi ecc.
U.S.A.
9.45
25.12.2004
www.google.it ecc.
menti diversi in fase di tokenizzazione. L’esempio prototipico di punteggiatura ambigua è il carattere punto (.), di cui la TAB. 4.1 illustra
alcuni degli usi principali. Il punto di fine frase deve essere considerato come un token indipendente, mentre nel caso di acronimi e abbreviazioni il punto è parte integrante dell’elemento a cui si accompagna e con cui forma dunque un token unico. Per una corretta tokenizzazione del testo è dunque necessario disambiguare la punteggiatura sulla base del contesto in cui essa compare.
Mentre riconoscere l’uso del punto come separatore di cifre o
nelle date può essere semplice, non altrettanto facile è identificare il
suo uso come delimitatore di frasi. Il metodo più comune per il riconoscimento del punto di fine frase si basa sulla seguente euristica (comunemente detta regola del “punto-spazio-maiuscola”): un punto segnala la fine della frase se è seguito da uno spazio e da una parola con
l’iniziale maiuscola. Questa euristica da sola è in grado di riconoscere
correttamente fino a oltre il 90% dei punti di fine frase. Vi sono però
eccezioni di cui tenere conto: ad esempio, una sequenza che soddisfa
questo stesso criterio è Sig. Rossi, in cui però il punto non segnala la
fine di frase. La regola del “punto-spazio-maiuscola” deve, dunque,
essere arricchita con la condizione che la parola che precede il punto
non sia un’abbreviazione. Per rendere più complesso il problema,
quando un’abbreviazione compare alla fine della frase, il punto assolve sia alla funzione di terminatore di frase sia di parte dell’abbreviazione (ad esempio Ho letto libri, giornali ecc.). È importante osservare
che il corretto riconoscimento dei punti di fine frase ha dei risvolti
linguistici molto importanti che riguardano il processo di segmentazione del testo in frasi. Dal momento che le frasi sono le unità linguistiche fondamentali a livello sintattico, la corretta identificazione dei
loro confini è un passo preliminare fondamentale per ogni processo
di analisi sintattica automatica (parsing) del testo.
Il punto non è un caso isolato. Il segno di apice (’) può essere
usato anch’esso in modi diversi: apostrofo (l’uomo), virgoletta (il ‘tre106
4.
DAL BIT ALLA PAROLA
no’ della sera), accento (poiche’) ecc. Di nuovo, a seconda del contesto in cui questo carattere ricorre, la tokenizzazione deve avere esiti
diversi. Ad esempio, se usato come virgoletta, l’apice deve essere considerato come token indipendente, se usato come segno di elisione
deve invece comparire associato alla parola che precede, infine se è
segno di aferesi esso deve essere associato alla parola che segue (ad
esempio ‘ntorno, ‘sto).
Maiuscole e minuscole
I computer sono case-sensitive, ovvero codificano i caratteri maiuscoli
in maniera diversa dai caratteri minuscoli (cfr. Scheda on line 2.2). Di
conseguenza, dal punto di vista della loro rappresentazione digitale
casa, Casa e CASA sono tre token del tutto differenti (a meno che un
programma non disponga di una funzionalità specifica per ignorare la
distinzione tra maiuscole e minuscole). Il problema è che le convenzioni ortografiche e stilistiche rendono l’uso e la distribuzione delle
maiuscole nei testi estremamente complesso.
Tra gli usi dei caratteri maiuscoli troviamo infatti i seguenti: a)
segnalare l’inizio di una frase, b) esprimere enfasi (ad esempio
AIUTO!!), c) distinguere i titoli da altre parti del testo. Questi usi
della maiuscola non sono però necessariamente correlati a distinzioni
di natura linguistica. È infatti plausibile affermare che nella frase Il
burattino legge il libro lo stesso articolo il ricorra due volte, anche se
la prima occorrenza ha la lettera iniziale maiuscola. Se vogliamo sottoporre un testo a un’analisi quantitativa calcolando il numero di occorrenze delle sue parole può essere necessario che in un caso simile
il computer consideri i due articoli come occorrenze dello stesso tipo
di token, sebbene inizino con caratteri differenti (cfr. PAR. 5.2). Questo può essere ottenuto eseguendo una semplice conversione di ogni
carattere maiuscolo nel testo in minuscolo o viceversa. A un esame
attento, però, questa strada risulta troppo semplicistica e di fatto impraticabile. Come è noto, infatti, accanto agli usi riportati sopra, la
maiuscola è anche impiegata per marcare l’iniziale dei nomi propri
(ad esempio Pinocchio) e in tedesco addirittura di qualsiasi nome;
ugualmente maiuscoli sono anche generalmente le sigle e gli acronimi
(ad esempio ITA, USA ecc.). In questi casi, annullare la distinzione
maiuscolo/minuscolo è problematico. Prima di tutto, perdiamo informazione importante per distinguere i nomi propri da altre categorie
grammaticali. In secondo luogo vengono introdotte omografie, con
effetti potenzialmente molto negativi sulle indagini linguistiche. Molti
nomi propri possono infatti risultare ambigui con termini comuni: se
107
TESTO E COMPUTER
trasformati in minuscolo, il cognome Rossi diventa indistinguibile dal
plurale dell’aggettivo ROSSO, e il nome Ciliegia di un personaggio di
Pinocchio si viene a confondere con l’omonimo frutto. Anche nel caso
degli acronimi, la loro conversione in minuscolo può renderli indistinguibili da parole comuni (si pensi a USA e usa, NATO e nato
ecc.). Ovviamente queste ambiguità possono essere risolte andando a
vedere come è usato il token nel testo, ma in LC è bene evitare il
proliferare di tali omografie.
È dunque necessario operare un processo di normalizzazione “intelligente” delle maiuscole nel testo, ovvero individuare criteri affidabili per decidere quando un token maiuscolo debba essere considerato equivalente al suo corrispettivo minuscolo e quando invece questa
equivalenza non sussista. Un semplice criterio euristico può essere
quello di convertire in minuscolo solo le parole all’inizio di frase o
all’interno di un titolo. Il problema è che non è sempre banale distinguere l’inizio di una frase: questo segue generalmente un punto
(semplice, esclamativo o interrogativo), che come abbiamo visto sopra
è spesso a sua volta carico di ambiguità. Ugualmente complesso è riconoscere i titoli, anche se in questo caso l’eventuale presenza di codici di marcatura del testo ci può essere di aiuto. Inoltre, è perfettamente possibile che un nome proprio o una sigla ricorra come prima
parola di una frase o dentro il titolo, e che dunque la conversione
annulli una differenza significativa. In realtà, il trattamento dei caratteri maiuscoli è un problema delicato che costringe a scelte ponderate
e legate al tipo di testo e di analisi da effettuare. Non esistono infatti
soluzioni univoche. L’uso delle maiuscole è governato non solo da
convenzioni ortografiche e stilistiche, ma anche da competenze e fattori strettamente linguistici, come la capacità di distinguere i nomi
propri, di individuare i confini di frase ecc. Rendere il computer in
grado di effettuare normalizzazioni intelligenti e accurate dei caratteri
maiuscoli significa in effetti dotarlo di conoscenze significative e avanzate sulla lingua e sulle sue convenzioni.
Acronimi e abbreviazioni
In molti tipi di testi (normative e regolamenti, manuali tecnici, articoli scientifici ecc.) l’uso di abbreviazioni e acronimi è estremamente
diffuso:
L’art. 1, par. 3, del reg. (CE) n. 1257/1999 del Consiglio, del 17 maggio
1999, sul sostegno allo sviluppo rurale da parte del Fondo europeo agricolo
108
4.
DAL BIT ALLA PAROLA
di orientamento e garanzia (FEAOG), che modifica e abroga taluni regolamenti (GU L 161 del 26.6.1999, pag. 1), ...
La loro corretta tokenizzazione è dunque necessaria non solo per
un’appropriata preparazione del testo, ma anche per garantire che
abbreviazioni e acronimi siano riconosciuti in maniera adeguata.
Essi giocano un ruolo chiave per ricostruire e interpretare il contenuto informativo del testo: infatti, gli acronimi di regola sostituiscono i termini complessi corrispondenti in tutte le funzioni linguistiche espletate da questi ultimi. Inoltre, queste espressioni hanno un
altro tasso di variazione strutturale: lo stesso acronimo può essere
scritto senza punti (USA), con i punti (U.S.A.), con punti separati
da spazi (U. S. A.) ecc., non di rado con diverse varianti che ricorrono nello stesso testo. Lo stesso termine può inoltre essere abbreviato in modi diversi (ad esempio pagina può diventare pg., pag., p.
ecc.), a seconda del genere, stile o delle convenzioni tipiche di una
certa comunità. La difficoltà maggiore posta da questi tipi di espressioni è comunque la loro produttività: nuove abbreviazioni e acronimi sono creati in continuazione, venendo a costituire di fatto una
classe aperta di unità linguistiche che non possono essere elencate
in maniera esaustiva.
La strategia più diffusa ed efficace adottata dai tokenizzatori per
gestire le abbreviazioni e gli acronimi è quella di combinare la consultazione di elenchi e glossari contenenti le espressioni più comuni,
con l’uso di regole euristiche generali per individuare le abbreviazioni
e gli acronimi non conosciuti. Alcune delle euristiche più semplici
considerano come abbreviazioni le sequenze formate da una o più
lettere maiuscole ciascuna seguita da un punto (ad esempio W.T.C.
ecc.), oppure le sequenze di sole consonanti maiuscole (ad esempio
DPR) ecc. Ciascuna di queste regole non è chiaramente in grado singolarmente di catturare tutte le abbreviazioni di un testo, ma il loro
uso combinato, unitamente alla disponibilità di ricchi repertori, permette di arrivare anche a un’accuratezza del 99% di abbreviazioni e
acronimi riconosciuti e tokenizzati correttamente.
Token graficamente complessi
Esistono
no però
pertanto
1. nomi
sequenze di caratteri che, sebbene contengano spazi, formadal punto di vista linguistico delle entità unitarie, e che è
opportuno considerare come un singolo token:
propri come Los Angeles, La Spezia, Poggio a Caiano ecc.
109
TESTO E COMPUTER
che è plausibile considerare come unità lessicali atomiche dal punto
di vista linguistico;
2. espressioni multilessicali (multiword expressions). Tra di esse possiamo includere espressioni caratterizzate da invariabilità e rigidità della
forma come di rado, fuori servizio, per davvero ecc., oppure espressioni
non analizzabili sintatticamente come ad hoc e al di là ecc. A livello
della tokenizzazione non tutte le espressioni linguistiche generalmente
definite come multilessicali vanno considerate però come token unitari.
Sebbene anche nomi composti come carta di credito o espressioni idiomatiche come tagliare la corda abbiano un alto grado di convenzionalità e coesione interna, questi aspetti riguardano però la sfera sintattica o
semantica (cfr. PARR. 7.4, 8.3 e 8.4). Considerarli come token unici vorrebbe dire ad esempio non tenere conto del fatto che tali espressioni
possono essere flesse morfologicamente (ad esempio carte di credito,
taglierei la corda ecc.) e subire alterazioni sintattiche (ad esempio tagliare sempre la corda), sebbene in misura ridotta;
3. strutture alfanumeriche come espressioni monetarie (125 euro e 30
centesimi), unità di misura (25 kg), date (18 giugno 1815), numeri telefonici (050 354634), targhe (BF 425 KL), indirizzi (Pza. Martiri della
Libertà 15) ecc.
Quali espressioni complesse è opportuno considerare come token
unitari è comunque una questione strettamente dipendente dal tipo
di analisi che vogliamo fare sul testo. In alcuni casi anche le sequenze
nome-cognome possono essere considerate come token unitari (ad
esempio Mario Rossi); nel caso di testi normativi, potremmo invece
pensare di unificare sequenze molto complesse come GU L 161 del
26.6.1999 che segnalano rinvii a testi di legge ecc. I criteri per la selezione di questi fenomeni devono tenere conto della loro frequenza
nel testo, e soprattutto del loro possibile impatto sui livelli successivi
di analisi.
Come nel caso delle abbreviazioni, il riconoscimento di token graficamente complessi deve tenere conto del loro alto grado di variabilità strutturale. Un esempio classico sono i molti modi diversi in cui è
possibile scrivere le date: ad esempio 25/02/1993, 25-02-1993, 25 febbraio 1993, febbraio 1993, febbraio ’93, 25 febbraio, 25 feb. 1993 ecc.
Il riconoscimento delle espressioni complesse che devono essere trattate come token unitari viene generalmente effettuato utilizzando dizionari e repertori (come nel caso dei nomi propri e delle espressioni
multilessicali), combinati con regole generali. Per date ed espressioni
monetarie, ad esempio, è facile individuare delle generalizzazioni sulla
loro composizione strutturale, che possono essere tradotte in minigrammatiche specializzate per il loro riconoscimento.
110
4.
DAL BIT ALLA PAROLA
4.2
Le espressioni regolari
La tokenizzazione del testo si basa sulla ricerca (ed eventualmente la
successiva trasformazione) di sequenze di caratteri – più tecnicamente
dette stringhe – che soddisfano particolari criteri. Ad esempio, può
essere necessario identificare nel testo quegli elementi che corrispondono alle voci di un dizionario o glossario, oppure individuare i contesti adeguati a qualificare un punto come delimitatore di frase, per
poi scorporarlo dalla parola che lo precede ecc. Lo strumento ideale
per realizzare questo tipo di operazioni sono le espressioni regolari
(regular expressions o più brevemente regex), una notazione algebrica
che permette di definire in maniera formale e rigorosa pattern di
stringhe. Un pattern è uno schema o modello di stringa che specifica i
criteri che devono soddisfare le stringhe da individuare nel testo: ad
esempio, “le stringhe che iniziano per lettera maiuscola”, “le stringhe
che iniziano per b, terminano per a e sono lunghe non più di 4 caratteri” ecc. Le espressioni regolari (ER) sono state originariamente
sviluppate dal logico matematico Steven C. Kleene (1909-1994) nel
1956, come notazione algebrica per rappresentare insiemi di stringhe
di simboli. In quanto definisce uno schema di stringa, una ER rappresenta in effetti l’insieme delle stringhe che corrispondono a tale
schema.
Molti programmi (Emacs, Word ecc.) e linguaggi di programmazione (ad esempio Perl) supportano le ER, ovvero permettono di specificare pattern di stringhe usando la sintassi delle ER e di verificare
su un testo se esistono stringhe che soddisfano tali pattern. Le ER
sono anche usate per fare ricerche avanzate su documenti testuali
(cfr. PAR. 7.3), per consultare cataloghi on line ecc. Quando un programma verifica se in un file di testo esistono stringhe di caratteri
conformi al pattern specificato da una ER, il file viene generalmente
analizzato riga per riga (ciascuna riga termina con un accapo): se una
riga contiene una stringa che corrisponde al pattern, il programma
restituisce una risposta, altrimenti passa alla riga successiva, fino a
quando non arriva alla fine del file. Verificare se una stringa soddisfa
(corrisponde a) un pattern viene detto pattern matching. I programmi
differiscono per il tipo di risultato prodotto in caso di corrispondenza
(matching): la stringa di testo che soddisfa il pattern, la riga di testo
in cui la stringa ricorre (ad esempio nel comando Linux/Unix grep),
l’intero documento (ad esempio nei motori di ricerca) ecc. Perl invece restituisce un valore “booleano”: vero, se nel testo esiste una stringa che soddisfa il pattern della ER; falso, altrimenti.
111
TESTO E COMPUTER
4.2.1. La sintassi delle espressioni regolari 2
Caratteri
La ER più elementare è quella costituita da un solo carattere: /a/ specifica il pattern che è soddisfatto dal carattere a. È essenziale ricordare
che /a/ e a sono due entità completamente diverse: la prima è una ER
che definisce uno schema di stringa, mentre la seconda è una stringa
specifica che corrisponde allo schema. Inoltre, le ER sono case-sensitive:
/a/ è soddisfatta solo da a, ma non da A (viceversa per /A/). Una ER
particolare è //: questa corrisponde alla stringa vuota, ovvero la stringa
composta da zero caratteri.
Una classe di caratteri – costituita da un insieme di caratteri racchiusi tra parentesi quadre (ad esempio /[la]/) – è una ER che viene soddisfatta da uno qualsiasi dei caratteri indicati all’interno delle
parentesi:
ER
Interpretazione
Esempi di corrispondenza
/[la]/
/[Ll]/
il carattere l o il carattere a
l minuscola o maiuscola
...il pozzo ...; ...un cane ...
...il tappo...; La macchina
L’ordine dei caratteri dentro le parentesi quadre è irrilevante: /[ab]/
e /[ba]/ sono entrambe soddisfatte dalle stesse stringhe. Alcune classi
di caratteri di uso frequente possono essere abbreviate con il trattino
(-), che specifica un intervallo di caratteri in una scala:
ER
Interpretazione
Equivalenza
/[a-z]/
/[A-Z]/
/[0-9]/
una lettera minuscola
una lettera maiuscola
una cifra numerica
/[abcdefghijklmnopqrstuvwxyz]/
/[ABCDEFGHIJKLMNOPQRSTUVWXYZ]/
/[0123456789]/
2. In questa sezione e nelle seguenti la sintassi delle ER viene illustrata utilizzando la notazione adottata in Perl. La sintassi delle ER è sufficientemente standard e in
buona parte condivisa da tutti i programmi che le supportano. È però importante
tenere conto che alcune differenze notazionali esistono comunque. Negli esempi, usiamo la convenzione Perl di delimitare la ER con il segno “/”: ad esempio /casa/ (il
segno “/” è solo un modo per rendere la ER ben distinguibile e non fa parte della ER
stessa). Il testo su cui viene effettuata la ricerca è invece in corsivo, mentre la prima
stringa nel testo che soddisfa il pattern della ER è sottolineata.
112
4.
DAL BIT ALLA PAROLA
La classe /[a-z]/ comprende solo i caratteri che nella tabella ASCII
sono compresi tra a e z; i caratteri accentati non sono dunque compresi nella classe /[a-z]/. È anche possibile combinare queste abbreviazioni: ad esempio /[a-zA-Z]/. Inoltre, il trattino può anche
essere utilizzato per esprimere sottointervalli nella scala numerica o
alfabetica: ad esempio /[a-d]/ è esattamente equivalente alla classe
di caratteri /[abcd]/.
Una classe di caratteri in cui la parentesi di apertura sia immediatamente seguita dal carattere “^” è soddisfatta da qualsiasi carattere
diverso da quelli specificati nella classe:
ER
Interpretazione
Esempi di corrispondenza
/[^la]/
qualsiasi carattere diverso da l e da a
/[^A-Z]/ qualsiasi carattere che non sia una lettera maiuscola
La pietra ...; ...le stanze...
Carlo è arrivato.
In questo caso “^” ha il significato di negazione come complemento
(in senso insiemistico) della classe di caratteri che seguono, ovvero
come tutti i possibili caratteri diversi da quelli specificati nella classe:
/[^a-d]/ è soddisfatta anche dalle cifre numeriche, i segni di punteggiatura, lo spazio ecc. Se “^” non compare in prima posizione all’interno della classe, non viene invece interpretato come negazione:
ad esempio /[l^a]/ o /[la^]/ sono soddisfatte da qualsiasi stringa
contenga l, a o ^.
Il carattere backslash (\) è utilizzato per segnalare che il carattere
che segue ha un’interpretazione speciale, diversa da quella usuale. Ad
esempio, alcuni caratteri speciali rappresentano caratteri di controllo,
come il ritorno accapo (\n), la tabulazione (\t), il line feed (\r) ecc.
Altri definiscono invece abbreviazioni per le classi di caratteri più
comuni:
ER
Interpretazione
Equivalenza
/\d/
/\D/
/\w/
/\W/
/\s/
/\S/
una qualsiasi cifra numerica
il complemento di /\d/
un qualsiasi carattere alfanumerico o l’underscore “_”
il complemento di /\w/
un carattere di spaziatura
il complemento di /\s/
/[0-9]/
/[^0-9]/
/[0-9_a-zA-Z]/
/[^0-9_a-zA-Z]/
/[ \r\n\t]/
/[^ \r\n\t]/
113
TESTO E COMPUTER
Un carattere speciale molto importante è il carattere jolly (.), che corrisponde a qualsiasi carattere escluso il ritorno accapo.
Sequenze di caratteri e disgiunzioni di sequenze
Le ER consistono di sequenze di caratteri normali, speciali o classi di
caratteri:
ER
Interpretazione
Esempi di corrispondenza
/[iI]l/
/\s[a-z]/
il oppure Il
un carattere di spaziatura seguito
da un’altra lettera minuscola
una cifra numerica seguita da un
carattere qualsiasi
Il caldo ...; ...un pilastro ...
Carlo mangia ...
Un cane saltò
... C3P8 sollevò ...
...parcheggiò la 2cv ...
/\d./
Come mostra il caso di /[iI]l/, l’uso delle classi di carattere permette di aggirare il problema della natura case-sensitive delle ER. È
importante però non confondere le classi di caratteri con le sequenze.
Una classe di caratteri come /[il]/ corrisponde in effetti a un solo
carattere (i o l). Al contrario, /il/ è soddisfatta dalla stringa di due
caratteri il.
La disgiunzione tra stringhe di caratteri viene invece espressa nelle ER tramite l’operatore di alternativa (|):
ER
Interpretazione
Esempi di corrispondenza
/il|la/
/[iI]l|[Ll]a/
il o la
il o Il o la o La
...al pilota...; ...una lama...
Il cane...; ...una lavatrice ...
Sebbene la classe di caratteri e l’alternativa abbiano entrambe un’interpretazione disgiuntiva, queste non devono però essere confuse. La
classe di caratteri esprime infatti una disgiunzione tra caratteri singoli, mentre l’alternativa esprime una disgiunzione tra stringhe (che possono essere formate da uno o più caratteri): /12|3/ è soddisfatta o
dalla stringa 12 o dalla stringa 3, invece /[123]/ è soddisfatta da un
singolo carattere scelto tra 1 o 2 o 3. Come mostra il caso di
/[iI]l|[Ll]a/, l’operatore di alternativa è combinabile con la classe di caratteri. Questa ER può però essere scritta in maniera del tutto
equivalente usando solo l’alternativa: /il|Il|la|La/. Infatti, capita
spesso che esistano modi diversi – più o meno compatti – di descrivere con una ER lo stesso pattern.
114
4.
DAL BIT ALLA PAROLA
Moltiplicatori di caratteri
I moltiplicatori sono operatori che permettono di specificare quante
volte il carattere che li precede deve comparire nel pattern. I moltiplicatori più comuni sono i seguenti 3:
?
* (Kleene Star)
+
zero o una occorrenza del carattere precedente;
zero o più occorrenze del carattere precedente;
una o più occorrenze del carattere precedente.
L’operatore + è in realtà derivabile dal Kleene Star: infatti /a + / è
equivalente a /aa*/.
ER
Interpretazione
Esempi di corrispondenza
/\d + /
/uno?/
/RA\d*/
i numeri naturali
un o uno
le stringhe formate da RA seguito da
zero o più numeri
4; 125; 26363733839
un uomo ...; ...uno sparo ...
...il RA ...; ... il RA4...
...il RA546 ...
Un problema interessante è posto da una ER come /a*/, che è soddisfatta da qualsiasi stringa che contenga zero o più a. Questo implica
che /a*/ è soddisfatta non solo da stringhe come cane, kaa, maaaall
ecc., ma anche da casi come 3456, pippo ecc., proprio perché tutte
queste stringhe contengono zero occorrenze di a. In effetti, la ER
/a*/ è virtualmente soddisfatta da qualsiasi stringa di testo.
L’operatore “*” è spesso usato insieme al carattere jolly. Ad
esempio, volendo trovare le righe di testo che contengono la parola
cane seguita a una qualche distanza non ben definita dalla parola gatto si può scrivere /cane.*gatto/: in questo caso il carattere jolly
moltiplicato da “*” copre qualsiasi sequenza di caratteri si interponga
tra cane e gatto (a esclusione del fine riga). Esistono anche dei moltiplicatori avanzati con i quali è possibile controllare il numero di volte
in cui un carattere può o deve ricorrere:
{n}
{n,m}
{n,}
esattamente n occorrenze del carattere precedente;
almeno n e al massimo m occorrenze del carattere precedente;
almeno n occorrenze del carattere precedente.
3. È interessante osservare che questi simboli sono usati con un’interpretazione
simile nelle DTD XML (cfr. PAR. 3.3.1).
115
TESTO E COMPUTER
In Perl, come in altri programmi che implementano le ER, i moltiplicatori sono predefiniti per comportarsi in maniera “ingorda” (greedy). Si prenda ad esempio /b.*s/ e immaginiamo di verificare questa ER su una riga di testo formata dalla frase bisogna salire sull’autobus. In questa frase, esistono quattro stringhe che sono compatibili
con il pattern definito dalla ER: bis, bisogna s, bisogna salire s, e bisogna salire sull’autobus. In realtà, però, l’unica stringa che in effetti
soddisfa la ER è quella più lunga, ovvero l’intera frase. Ciò è dovuto
al comportamento “ingordo” dei moltiplicatori, che privilegiano la
stringa più lunga tra quelle compatibili con il pattern. Questo tipo di
comportamento può essere molto pericoloso, specialmente quando si
usano le ER per effettuare sostituzioni di stringhe (cfr. infra). È però
possibile costringere i moltiplicatori a comportarsi in maniera “pigra”
(lazy), ovvero a trovare la corrispondenza con la stringa più breve tra
quelle compatibili con il pattern. Il comportamento pigro dei moltiplicatori è ottenuto facendoli seguire dal carattere “?”: ad esempio,
nella frase sopra /b.*?s/ è soddisfatta dalla stringa bis 4.
Ancore
Le ancore sono caratteri speciali che indicano la posizione precisa
nella riga di testo in cui deve comparire la stringa che soddisfa la ER.
Le quattro ancore principali sono:
^
$
\b
\B
inizio della riga di testo;
fine della riga di testo;
confine di token;
qualsiasi punto che non sia un confine di token;
In Perl un confine di token 5 è qualsiasi punto nella riga di testo situato tra un carattere della classe \w e un carattere della classe complementare \W e viceversa. Nell’esempio seguente, le barre verticali
continue marcano alcuni punti che rappresentano confini di token:
4. Il segno “?” ha dunque un doppio uso nella sintassi Perl delle ER: come moltiplicatore di opzionalità e come operatore di “pigrizia” quando segue immediatamente un moltiplicatore. Le versioni “pigre” degli altri moltiplicatori sono + ?, ??, {n}?,
{n,m}?, e {n,}?.
5. Abbiamo tradotto così il termine inglese word boundary, per evitare di introdurre ulteriori ambiguità nell’uso di parola.
116
4.
DAL BIT ALLA PAROLA
C’|era| una| volta
Attraverso l’uso delle ancore è possibile specificare nel pattern delle
la condizione che la stringa da ricercare compaia in un particolare
punto del testo. Ad esempio, /^Il/ è soddisfatta solo dalle stringhe
Il all’inizio della riga di testo, e /il$/ è soddisfatta solo dalle stringhe il alla fine della riga di testo.
L’ancora \b è molto utile per individuare sequenze di testo che
formano unità linguistiche indipendenti, come le parole: ad esempio,
per cercare la congiunzione e (e non la semplice lettera e) è sufficiente scrivere /\be\b/, che è soddisfatta da Pinocchio e la fata, ma
non da Geppetto. Purtroppo, \b coincide solo approssimativamente
con la nozione di confine di token come unità linguistica. Ad esempio, /\bè\b/ non può essere usata per trovare è come forma del verbo essere (come in Pinocchio è stanco). Sia il carattere accentato è sia
lo spazio rientrano infatti in \W, e dunque tra di essi non esiste un
confine di token. La formulazione corretta per individuare è come
forma del verbo essere è invece /\Bè\B/.
ER
Raggruppamento, precedenze e memorizzazione
I moltiplicatori agiscono solo sul carattere immediatamente precedente:
ad esempio /la + / è soddisfatta dalle stringhe la, laa, laaa ecc. Per
moltiplicare intere stringhe è invece necessario racchiuderle tra parentesi tonde. La ER /(la) + / è dunque soddisfatta non da laaaaaa, ma da
lalalalala. Un altro esempio della funzione di raggruppamento delle parentesi è insieme con l’alternativa: per cercare tutte le occorrenze delle
parole trovo e troviamo, possiamo infatti scrivere /trov(o|iamo)/. Se
omettiamo le parentesi, la ER è invece soddisfatta dalle stringhe trovo e
iamo.
L’uso delle parentesi è correlato al fatto che, come in tutte le notazioni algebriche, anche nella sintassi delle ER esiste un ordine di
precedenza secondo il quale vengono applicati gli operatori, riportato
qui sotto (in ordine di precedenza discendente):
Ordine precedenza
Tipo di operatore
Sintassi
1
2
3
4
parentesi
moltiplicatori
sequenza e ancore
alternativa
()
? + * {m,n} {n,} {n} ?? + ? *?
cane ^ $ \b \B
|
117
TESTO E COMPUTER
Poiché i moltiplicatori hanno precedenza sulla sequenza, nel caso di
/la + / prima + moltiplica il carattere a, e successivamente le a vengono concatenate a l. Le parentesi hanno invece precedenza massima
e dunque permettono di alterare l’ordine predefinito di applicazione
degli operatori. Gli operatori dentro le parentesi vengono eseguiti
prima di quelli fuori, esattamente come accade in aritmetica. Nella ER
/(la) + / il moltiplicatore agisce sul risultato della concatenazione di
l con a, e dunque ciò che viene moltiplicato è la stringa la e non il
solo carattere a. Un uguale ragionamento si applica al caso dell’alternativa visto sopra.
In Perl le parentesi consentono anche di memorizzare la stringa
di testo che soddisfa il loro contenuto in variabili temporanee numerate progressivamente (dette registri). Nella stessa ER è possibile
riferirsi alla stringa memorizzata usando il numero del registro
preceduto dal carattere “\”. La sequenza \1 è dunque interpretato in modo equivalente a ciò che ha soddisfatto il contenuto della
prima coppia di parentesi, \2 è interpretata in modo equivalente a
ciò che ha soddisfatto il contenuto della seconda coppia di parentesi ecc. La memorizzazione di stringhe è un’estensione delle
funzionalità centrali delle ER che non è supportata da tutte le loro
implementazioni, ma risulta molto utile nelle elaborazioni del testo. Volendo trovare le parole che contengono due lettere identiche, non è possibile infatti esprimere tale condizione semplicemente con /[a-z][a-z]/. Usando le parentesi possiamo invece formulare la condizione di identità come /([a-z])\1/. Quando la
ER viene interpretata sul testo, la lettera che soddisfa il contenuto
delle parentesi viene memorizzata temporaneamente nel registro 1.
La sequenza \1 richiama il contenuto del registro e lo usa per
verificare che la lettera seguente sia esattamente identica alla prima. Questa ER è dunque soddisfatta da ll, aa, mm ecc., ma non
da ma, al ecc.
È importante ricordare infine che quando gli operatori delle ER
(*, + , ?, [, ), / ecc.) sono usati come caratteri da ricercare nel testo,
devono essere preceduti dal backslash (\): ad esempio /\./ è soddisfatta dal carattere punto e non da qualsiasi carattere 6.
6. In Perl, quando questi caratteri si trovano dentro una classe di caratteri l’uso
del backslash è opzionale (a parte il caso in cui il carattere da cercare sia “/”): ad
esempio, /[.\/]/ e /[\.\/]/ sono entrambe accettabili, ma non /[./]/.
118
4.
DAL BIT ALLA PAROLA
Sostituzione di testo
Con le ER è possibile non solo cercare stringhe di testo, ma anche
effettuare trasformazioni su di esse. In Perl esiste a tale scopo l’operatore di sostituzione: s/ espressione_regolare / nuova_stringa / 7. Attraverso la sostituzione è possibile sia inserire che cancellare
testo: ad esempio, s/token/tokens/ aggiunge una s alla parola token (s/token/s/ invece rimpiazzerebbe con s l’intera parola token,
perché la nuova stringa sostituisce interamente la stringa che soddisfa
il pattern della ER); s/token// cancella la stringa token (formalmente questa viene sostituita con la stringa vuota) 8.
Nell’elaborazione del testo siamo spesso interessati a sostituire
una stringa solo a condizione che questa compaia in un determinato
contesto: ad esempio, rimpiazzare la o con la i soltanto quando la o
è preceduta dalle consonanti d o t (così da ottenere dadi da dado).
Il contesto della sostituzione può essere espresso con la classe di
caratteri [td], ma se formalizziamo la sostituzione come s/[td]o/
i/, otteniamo un risultato sbagliato perché dado viene trasformato
in dai. La sostituzione deve infatti operare sulla o, mentre la parte
restante della ER rappresenta solo il contesto in cui tale sostituzione
deve applicarsi e deve quindi rimanere inalterato nella nuova stringa. Per formulare queste sostituzioni dipendenti da contesto si deve usare la funzione di memorizzazione con l’uso delle parentesi:
s/([td])o/\1i/. Le parentesi consentono di memorizzare il carattere che soddisfa il loro contenuto. Grazie a \1, la nuova stringa
contiene esattamente la stessa consonante che ha soddisfatto la classe di caratteri [td]. Di conseguenza, se il pattern è soddisfatto da
to, questo viene rimpiazzato da ti, mentre se è soddisfatto da do
viene sostituito da di, ottenendo così correttamente dadi da dado e
dati da dato.
7. In Perl la sostituzione viene effettuata sulla prima stringa che soddisfa il pattern della ER. Per sostituire ogni stringa che soddisfa il pattern bisogna aggiungere
l’operatore g in fondo all’espressione di sostituzione: ad esempio s/la/al/g. Inoltre
nel caso dell’operatore di sostituzione, i segni “/” sono obbligatori, poiché fanno parte della sintassi di questo operatore in Perl.
8. È importante sottolineare che la seconda parte dell’espressione di sostituzione
contiene una stringa e non una ER. Ad esempio, in s/[la]/[la]/, le parentesi quadre a sinistra rappresentano una classe di caratteri, mentre a destra sono interpretate
come parentesi quadre effettive. Il risultato è dunque la sostituzione di ogni l o a con
la stringa [la].
119
TESTO E COMPUTER
4.3
Analizzare il linguaggio con le espressioni regolari
Le regole euristiche per la disambiguazione della punteggiatura che
abbiamo visto nel PAR. 4.1.1 hanno una struttura condizionale come la
seguente: se il carattere punto è preceduto da una parola minuscola
ed è seguito da uno spazio e da una lettera maiuscola, allora il punto
è un confine di frase e deve essere considerato un token indipendente. La condizione della regola definisce la struttura del contesto linguistico che permette di disambiguare il segno di punteggiatura e può
essere facilmente rappresentata con una ER:
[4.1]
/\b[a-z] + \.\s + [A-Z]/
Il punto è preceduto dal carattere di escape per non essere interpretato come il carattere jolly; inoltre il carattere speciale \s seguito dal
moltiplicatore cattura anche i casi in cui il punto è seguito da un ritorno a capo o da più di un elemento di spaziatura. Naturalmente
questa ER non è del tutto soddisfacente: per esempio, non tiene conto
del fatto che prima del punto potrebbe esserci un carattere accentato,
una parentesi o delle virgolette, o che la parola che precede potrebbe
essere un’abbreviazione ecc. Saranno dunque necessarie fasi successive di raffinamento della [4.1] (preferibilmente accompagnate da verifiche empiriche su un corpus) per essere sicuri che questa ER sia in
grado di individuare tutti e soli i contesti rilevanti per disambiguare il
punto come confine di frase. L’elemento fondamentale è comunque
che le ER ci permettono di formalizzare in maniera semplice e diretta
le euristiche linguistiche per una corretta tokenizzazione del testo.
Queste regole espresse sotto forma di ER potranno poi entrare a far
parte di programmi (come i tokenizzatori) in grado di eseguirle sul
testo e dunque di segmentare quest’ultimo in maniera conforme ai
nostri criteri linguistici.
In maniera simile, con le ER è possibile scrivere regole per il riconoscimento di acronimi o espressioni linguistiche complesse come
date, indirizzi ecc. Ecco un esempio di regola per il riconoscimento
di date:
[4.2]
/\d\d?[-\/]\d\d\?[-\/]\d\d(\d\d)?/
[4.3] /\d\d? ([Gg]ennaio|...|[Dd]icembre) \d\d(\d\d)?/
120
4.
DAL BIT ALLA PAROLA
La regola [4.2] è in grado di identificare date come 23-4-1980,
5/12/78 ecc. 9, mentre la regola [4.3] riconosce le date in cui il mese
è scritto in lettere. L’uso dell’alternativa abbinata alle classi di caratteri consente di riconoscere i nomi dei mesi con iniziale maiuscola o
minuscola; le parentesi consentono invece di applicare l’operatore di
alternativa nel modo opportuno. Regole di questo tipo costituiscono
il nucleo delle mini-grammatiche per il riconoscimento di strutture
linguistiche comunemente usate dai tokenizzatori (cfr. Scheda on line
4.1).
L’importanza e la versatilità delle ER non si esauriscono però solo
alla fase di tokenizzazione del testo, ma si estendono anche a livelli
più avanzati di analisi linguistica. Date e abbreviazioni non sono le
uniche strutture le cui regolarità sono esprimibili attraverso le ER. Infatti, regole morfologiche, morfosintattiche e perfino alcune regole
sintattiche possono essere espresse formalmente come ER. Prendiamo
ad esempio la regola che governa la flessione del presente indicativo
della prima coniugazione verbale regolare in italiano: questa prevede
che verbi come amare, faxare, portare, saltare ecc., si coniughino in
maniera simile, con le desinenze o, i, a, iamo, ate e ano che si aggiungono alla radice del verbo. Tale regola morfologica può essere formulata con la seguente ER:
[4.4] /\b(am|fax|port|salt|...)(o|i|a|iamo|ate|ano)\b/
È interessante notare come la ER è in grado di rappresentare la stessa
strutturazione morfologica delle parole, con la prima parentesi che
raggruppa le radici e la seconda le terminazioni flessionali. Questa regola permette dunque di realizzare una forma elementare di riconoscimento morfologico (cfr. PAR. 9.1.2), individuando tutte le forme del
presente indicativo dei verbi regolari della prima coniugazione. La regola è inoltre estensibile: infatti, volendo aggiungere un nuovo verbo
che si coniuga secondo la stessa classe di flessione, basterà aggiungere
alla ER la sua radice.
Le ER consentono anche di modellare semplici regole grammaticali, come ad esempio quelle che governano la composizione di un sintagma nominale. Il fatto che in italiano un nome sia opzionalmente
preceduto da un articolo e modificato da zero o più aggettivi che
precedono o seguono il nome può essere espresso formalmente con la
9. Si noti come il moltiplicatore ? agisca sul contenuto delle parentesi: questo
permette di esprimere la condizione che l’anno deve essere formato da due o da quattro cifre, ma non da tre.
121
TESTO E COMPUTER
seguente ER (dove Art, N e Agg sono etichette che stanno rispettivamente per le categorie grammaticali articolo, nome e aggettivo):
[4.5]
/Art?\sAgg*\sN\sAgg*/
Questa ER può essere utilizzata, ad esempio, per definire una ricerca
di gruppi nominali in un corpus le cui parole siano annotate con informazione relativa alla loro categoria grammaticale (cfr. PAR. 7.3).
Naturalmente la [4.5] non tiene conto di condizioni sintattiche fondamentali (ad esempio l’accordo in genere e numero tra aggettivo e
nome ecc.), ma è nondimeno in grado di rappresentare un sottoinsieme non indifferente di strutture nominali in italiano.
Come strumento per la formalizzazione di regole linguistiche le ER
hanno limiti che non devono essere sottovalutati. È infatti possibile
dimostrare che esistono tipi di regole e strutture linguistiche che non
possono essere rappresentate attraverso di esse. In linguistica teorica
questo tema è stato al centro di un grande dibattito che ha visto protagonista Noam Chomsky. Nonostante ciò, come sottolineano Karttunen et al. (1996), alcuni importanti aspetti della grammatica di una
lingua sono perfettamente formalizzabili con le ER. È per tale motivo
che le ER hanno acquistato un ruolo di primo piano nella LC contemporanea, non solo come strumenti per un’efficiente tokenizzazione
del testo, ma anche per modellare aspetti significativi della struttura e
organizzazione del linguaggio.
Per saperne di più
CRESPI-REGHIZZI S.
(2002), Linguaggi formali nelle scienze della comunicazione, Zanichelli, Bologna.
nd
FRIEDL J. E. F. (2002), Mastering Regular Expressions, 2
ed., O’Reilly.
HAMMOND M. (2002), Programming for Linguists: Perl for Language Researchers, Blackwell, Oxford.
JURAFSKY D., MARTIN J. H. (2000), Speech and Language Processing. An Introduction to Natural Language Processing, Computational Linguistics and
Speech Recognition, Prentice Hall (NJ).
KARTTUNEN L., CHANOD J.-P., GREFENSTETTE G., SHILLER A. (1996), Regular
Expressions for Language Engineering, in “Journal of Natural Language
Engineering”, n. 2 (4), pp. 305-28.
MIKHEEV A. (2003), Text Segmentation, in R. Mitkov (ed.), The Oxford Handbook of Computational Linguistics, Oxford University Press, Oxford, pp.
210-8.
PARTEE B., TER MEULEN A., WALL R. (1990), Mathematical Methods in Linguistics, Kluwer Academic Publishers, Dordrecht.
122
5
Parole e numeri
Ogni testo, quale che sia la sua lunghezza o modalità di codifica, è
una miniera di dati quantitativi che possono essere oggetto di elaborazioni statistiche. Ad esempio, possiamo quantificarne la ricchezza
lessicale contando il numero di parole diverse che l’autore del testo
ha usato rispetto al numero totale di parole; oppure stabilire quali
sono le parole d’uso più frequente e quanta informazione esse ci
forniscono riguardo al contenuto del testo. Il linguista computazionale può anche chiedersi se esistano regolarità statistiche della lingua
ricorrenti e trasversali, che tendono a ripetersi in modo sostanzialmente invariato in altre produzioni dello stesso autore, o in altre tipologie di testo o in domini tematici diversi. Questo problema si ricollega a un altro tema affascinante: il rapporto tra la lingua come
insieme di regole, convenzioni e preferenze socialmente e cognitivamente condivise, da una parte, e dall’altra un corpus di testi in
quanto campione di questo universo, cioè riproduzione in scala della
popolazione virtualmente infinita di tutti i testi, scritti o parlati, di
una lingua (cfr. PAR. 1.3).
A questi e altri argomenti si rivolge l’approccio statistico allo studio del testo, che ha ottenuto risultati di grande rilievo in ambiti
scientifici relativamente distanti tra loro come la psicolinguistica, la
stilometria (o stilo-statistica), la sociolinguistica e l’ingegneria del linguaggio. Questo capitolo contiene un’introduzione alle nozioni di
base della statistica linguistica e offre alcune istruzioni e raccomandazioni pratiche per la loro applicazione all’analisi del testo.
5.1
Popolazione e testo
La terminologia della statistica riflette la tradizionale vicinanza di
questa disciplina alle scienze sociali. Una popolazione statistica di riferimento è l’insieme di individui o unità statistiche di cui vogliamo stu123
TESTO E COMPUTER
diare e caratterizzare sinteticamente la distribuzione rispetto a certe
caratteristiche di interesse (cfr. Scheda on line 1.1). Ad esempio, presa come popolazione una classe di alunni, possiamo voler misurare,
per ciascun alunno, la statura, l’età o i voti del primo quadrimestre.
Statura, età e voti rappresentano gli attributi o variabili delle nostre
unità. Non tutte le variabili assumono valori quantitativi. Volendo
raggruppare i nostri alunni in base al sesso, i valori (o modalità) dell’attributo corrispondente saranno maschio e femmina.
Nell’affrontare l’analisi quantitativa di una lingua in generale, la popolazione di riferimento è un concetto più difficile da definire per la
sua natura potenzialmente infinita, che richiede, per essere studiato
con metodo scientifico, la selezione preliminare di un campione il più
possibile rappresentativo della popolazione stessa, un campione cioè
che sia in grado di riprodurne, in scala, le caratteristiche rilevanti rispetto alla nostra indagine (cfr. PAR. 1.3). Più abbordabile sembra il
problema della descrizione quantitativa di un testo specifico, come ad
esempio il libro Le avventure di Pinocchio, o una collezione di testi
riconducibili a uno stesso autore o accomunati dallo stesso genere o da
un medesimo argomento. In questo caso, consideriamo il testo stesso
come la nostra popolazione di riferimento. Nel seguito di questo capitolo, ci concentreremo inizialmente su aspetti di statistica descrittiva del
testo, per poi accennare a problemi di campionamento e verifica delle
ipotesi rispetto a una popolazione (statistica inferenziale).
Il primo passo verso l’analisi quantitativa del testo è definire quali
sono le unità rilevanti e che cosa siamo interessati a misurare. In questo capitolo ci concentreremo, per semplicità, su un’analisi quantitativa delle parole, usando come materiale illustrativo Le avventure di Pinocchio di Collodi. Naturalmente, è possibile applicare i metodi dell’indagine statistica a unità linguistiche più astratte, come ad esempio
le categorie grammaticali, i costituenti interni delle parole o morfemi,
i sintagmi ecc. Si noti infine che, nella nostra prospettiva, il testo rimane l’oggetto primario dell’analisi quantitativa; le parole rappresentano solo un punto di vista privilegiato per analizzarne aspetti di struttura e organizzazione, sia per ciò che riguarda i legami sintattici del
testo, che quelli narrativi, stilistici e di contenuto.
5.2
Parole unità e parole tipo
Per predisporre Le avventure di Pinocchio all’analisi statistica, sono
necessari due passi preliminari: i. la tokenizzazione del testo, attraverso la quale possiamo individuare i token, cioè le parole e le altre uni124
5.
PAROLE E NUMERI
tà atomiche dell’analisi linguistica (cfr. PAR. 4.1) e ii. la classificazione
dei token in tipi di token.
Se facciamo astrazione per semplicità dai segni di punteggiatura,
la frase dell’esempio 5.1 contiene 33 token, ognuno dei quali rappresenta una parola unità distinta, individuabile univocamente in base
alla sua posizione nella sequenza del testo (le posizioni sono marcate
da un numero in pedice). Da questo punto di vista, ad esempio,
un3 ≠ un8. D’ora in avanti ci concentreremo sui criteri di classificazione delle parole unità in parole tipo.
ESEMPIO
5.1
Non1 era2 un3 legno4 di5 lusso6 , ma7 un8 semplice9 pezzo10 da11 catasta12 ,
di13 quelli14 che15 d’16inverno17 si18 mettono19 nelle20 stufe21 e22 nei23
caminetti24 per25 accendere26 il27 fuoco28 e29 per30 riscaldare31 le32 stanze33.
Sapere quante parole unità ricorrono in un testo ci dà una prima idea
delle dimensioni del nostro oggetto di studio. Il più delle volte la nostra curiosità è tuttavia mirata: vogliamo sapere quante unità di un
certo tipo sono presenti nel testo. La definizione dei tipi di parola introduce un livello di astrazione dai dati osservabili, che non vengono
più analizzati come unità distinte, ma piuttosto come classi di unità.
Il processo di astrazione può avvenire a diversi livelli, a seconda degli
interessi specifici del linguista, ma anche a seconda degli strumenti
empirici di analisi a sua disposizione.
Il primo e più immediato livello di astrazione consiste nel considerare due unità come forme grafiche dello stesso tipo se esse sono
indistinguibili a prescindere dalla posizione che occupano nel testo.
Da questo punto di vista, ad esempio, un3 = un8, ma Non3 ≠ non130.
Il passo successivo è quello di fare astrazione (cum grano salis) da
aspetti di rappresentazione tipografica del testo, come la distinzione
tra caratteri maiuscoli e minuscoli (cfr. PAR. 4.1.1): pertanto Non3 =
non130. Se poi siamo interessati all’esponente lessicale astratto (o lemma) cui un’unità del testo è riconducibile, allora siamo disposti, ad
esempio, a riconoscere ero e saranno come due forme (flesse) del verbo ESSERE. Infine, se vogliamo raggruppare le unità in base alla loro
lunghezza in caratteri, due forme come non e che diventano membri
della stessa classe di parole di lunghezza 3.
Analogamente a quanto si fa in statistica sociale, chiameremo
attributi le dimensioni rilevanti della nostra classificazione. FORMA
GRAFICA, LEMMA, LUNGHEZZA IN CARATTERI sono tutti possibili attri125
TESTO E COMPUTER
TABELLA 5.1
Parole unità e tratti distintivi
PAROLA
FORMA
FORMA
UNITÀ
GRAFICA
NORMALIZZATA
Non1
era2
un3
legno4
di5
lusso6
ma7
un8
semplice9
pezzo10
da11
catasta12
Non
era
un
legno
di
lusso
ma
un
semplice
pezzo
da
catasta
non
era
un
legno
di
lusso
ma
un
semplice
pezzo
da
catasta
LEMMA
LUN
CATEGORIA
GRAMMATICALE
NON
ESSERE
UN
LEGNO
DI
LUSSO
MA
UN
SEMPLICE
PEZZO
DA
CATASTA
3
3
2
5
2
5
2
2
8
5
2
7
AVVERBIO
VERBO
ARTICOLO
NOME
PREPOSIZIONE
NOME
CONGIUNZIONE
ARTICOLO
AGGETTIVO
NOME
PREPOSIZIONE
NOME
buti delle nostre unità. Ogni unità assume in genere un solo valore
per ciascun attributo. Ad esempio, gli attributi della forma ero
sono FORMA GRAFICA = ero, LEMMA = ESSERE, LUNGHEZZA = 3 e
così via. Nel caso di forme omografe come era, tuttavia, il rapporto
tra unità e valore diventa di uno a molti: era può essere, infatti, a
seconda del contesto, riconducibile al LEMMA = ESSERE (verbo) o
al LEMMA = ERA (nome). In questi casi, è opportuno risolvere
l’ambiguità nel testo, selezionando il valore appropriato (cfr. PARR.
7.3 e 8.1.1).
Nella TAB. 5.1 abbiamo classificato le prime 12 parole dell’esempio 5.1 secondo attributi diversi, disposti lungo un gradiente che va
dai più concreti (colonne a sinistra della tabella) ai più astratti (colonne a destra). I valori di ciascun attributo definiscono i tipi di parole che possiamo trovare in un testo rispetto a quell’attributo. Diremo dunque che la TAB. 5.1 contiene una sola FORMA ripetuta due
volte (un), mentre tutte le altre ricorrono una volta soltanto. Inoltre, ci sono 5 unità di LUNGHEZZA 2, tre di LUNGHEZZA 5, due di
LUNGHEZZA 3 e due esemplari singoli di 7 e 8 caratteri. Infine, troviamo 4 parole di tipo NOME, 2 di tipo ARTICOLO, 2 di tipo PREPOSIZIONE, e una ciascuna per i tipi VERBO, AGGETTIVO, AVVERBIO e
CONGIUNZIONE. Dato un attributo, contare quante unità ricorrono
con un certo valore v dell’attributo significa calcolare la frequenza
(assoluta) di v.
Nelle pagine che seguono ci concentreremo sulle statistiche riguardanti due attributi soltanto: la LUNGHEZZA di parola (quinta colonna di TAB. 5.1) e, soprattutto, la FORMA NORMALIZZATA (terza colonna di TAB. 5.1). Le ragioni di questa scelta sono molteplici. In pri126
5.
PAROLE E NUMERI
mo luogo le due variabili sono correlate in maniera non banale nel
linguaggio: forme che ricorrono più di frequente tendono a essere anche più corte. In secondo luogo, contare quante FORME diverse sono
presenti nel nostro testo significa quantificare, in prima approssimazione 1, il suo grado di variabilità lessicale (cfr. PAR. 5.4). Esiste infine
una ragione pratica: è molto più facile contare con il computer quante parole unità hanno la stessa FORMA piuttosto che quante unità condividono lo stesso LEMMA. Nel primo caso, infatti, l’uguaglianza tra
un3 e un8 si ottiene banalmente prescindendo dalla loro posizione nel
testo. Nel secondo caso, è necessario andare al di là della loro differenza (o identità) superficiale, mediante un’analisi di tipo morfologico
e sintattico (cfr. PAR. 8.1.1 e CAP. 9). Per queste ragioni, negli studi
statistici del testo è invalso l’uso di chiamare parola tipo di un’unità il
valore dell’unità per l’attributo FORMA (NORMALIZZATA). Quando dunque diciamo che l’esempio 5.1 contiene due unità di tipo di, intendiamo dire che di è attestata due volte nel testo, o anche che di ha frequenza 2 2.
5.3
Frequenze e distribuzioni
Il comportamento di un insieme di unità osservabili può essere analizzato guardando come esse si distribuiscono rispetto ai valori di uno
o più attributi specifici. Possiamo ad esempio misurare la statura di
tutti gli studenti di un liceo e raggrupparli in classi per valori di statura crescenti. Analogamente, possiamo misurare la grandezza del lessico in un campione di bambini tra i 18 e i 24 mesi d’età, per vedere
se esistono valori ricorrenti intorno ai quali tende a raggrupparsi la
maggior parte dei bambini.
In generale, il grafico di una curva di distribuzione è un modo
per fotografare il comportamento delle unità rispetto a uno o più attributi. Ad esempio, il grafico di FIG. 5.1 riassume come le parole
(unità) di Pinocchio si distribuiscono in base alla loro lunghezza misurata in caratteri. Per disegnare questa distribuzione occorre fare le seguenti tre cose:
1. Naturalmente, a questo livello di astrazione, non siamo in grado di distinguere
tra l’uso di era come verbo e il suo uso nominale.
2. Per inciso, la distinzione tra tipo e unità ha un uso generale e non si limita al
solo caso delle parole, ma si estende a morfemi, sintagmi ecc.).
127
TESTO E COMPUTER
5.1
Lunghezza di parola in caratteri in Pinocchio
FIGUR A
9000
frequenza delle unità
8000
7000
6000
5000
4000
3000
2000
1000
0
1
5
9
13
17
lunghezza in caratteri
1. misurare la lunghezza l di ogni parola nel testo;
2. raggruppare tra loro le parole con la stessa lunghezza;
3. contare quante parole cadono in ciascuno dei raggruppamenti.
A questo punto, basta riportare sull’asse orizzontale delle x (o
asse delle ascisse) i valori di l misurati al passo 1 in ordine crescente
rispetto all’origine degli assi. In corrispondenza di ciascun valore l,
riportiamo sull’asse delle y (o delle ordinate) il numero di parole con
quella lunghezza, o frequenza assoluta di l.
Se la variabile è invece qualitativa, le modalità sull’asse delle x seguiranno un ordine convenzionale. Ad esempio, possiamo studiare la
distribuzione delle preposizioni in un testo, semplicemente contando
la loro frequenza assoluta, cioè quante volte ogni preposizione tipo
ricorre nel testo in questione. Questi valori possono essere poi riportati su un grafico, disponendo le preposizioni in ordine alfabetico sull’asse delle x. D’ora in avanti ci concentreremo prevalentemente sulla
frequenza di forme lessicali normalizzate.
In generale, le frequenze assolute di due distribuzioni, anche se si
basano sullo stesso tipo di unità e sulla stessa batteria di attributi e
valori, non sono confrontabili, in quanto si riferiscono a un diverso
numero totale di unità. La forma occhi, ad esempio, ha frequenza assoluta 3 nei capitoli 1 e 33 di Pinocchio. Da questo dato, tuttavia,
128
5.
PAROLE E NUMERI
non siamo autorizzati a concludere che la forma occhi sia distribuita
allo stesso modo nei due capitoli, in quanto il capitolo 33 è lungo tre
volte più del primo. Per ovviare a questo effetto di distorsione, si ricorre abitualmente alle frequenze relative, calcolate come rapporto tra
la frequenza assoluta ni (rispetto al valore i di un attributo) e il numero totale |T | di unità osservate nel testo T (o lunghezza di T in
parole) 3.
[5.1]
fi =
ni
|T |
Alla luce della [5.1] la frequenza relativa di occhi nel capitolo 1
3
= 0,004) è considerevolmente più alta che nel capitolo 33
(
799
3
= 0,0012).
(
2524
5.3.1. La media aritmetica
In statistica, si chiama media aritmetica di una serie di valori espressi
da una classe di unità il risultato della somma di questi valori divisa
per il numero di unità della classe. Ad esempio, dire che la lunghezza
media in caratteri delle parole di un testo T è uguale a 4,6 significa
calcolare un valore che è il risultato della somma della lunghezza di
tutte le parole presenti in T (misurata in numero di caratteri) divisa
per la lunghezza |T| di T:
[5.2]
l̄ =
l1 + l2 + ... + l|T |
|T |
|T |
=
i = 1 li
|T |
.
Nella formula, l̄ si legge “lunghezza media”, li è la lunghezza in ca|T |
ratteri dell’i-esima parola unità del testo T e i = 1li indica la somma
di tutti i valori di li con l’indice i che varia tra 1 e |T|.
3. In generale, |T| rappresenta la cardinalità dell’insieme T, cioè il numero dei
suoi membri. Dal nostro punto di vista, un testo T può essere rappresentato come un
insieme di parole unità, in quanto ciascuna unità è distinta da ogni altra da un indice
che esprime, in modo univoco, la sua posizione nel testo.
129
TESTO E COMPUTER
Il valore 4,6 quantifica pertanto la tendenza dell’autore del testo a
usare parole più o meno lunghe. Chiaramente, soltanto attraverso un
confronto tra il valor medio calcolato e lo stesso valore calcolato su
altri testi siamo in grado di trarre indicazioni qualitative da l̄: potremmo cioè concludere se l’autore ama usare preferibilmente parole lunghe o corte. Nel PAR. 5.6.2 vedremo come la nozione di media si applica alle frequenze lessicali.
5.3.2. La deviazione standard
La media ci dà un valore di tendenza che riassume sinteticamente
l’andamento di una distribuzione, ma non dice come i dati osservabili
in nostro possesso si distribuiscono complessivamente. Una misura
statistica che ci consente di “allargare” la nostra inquadratura sul
modo in cui i dati si dispongono intorno alla media è la deviazione
standard (detta anche scarto quadratico medio) che, nel caso della lunghezza di parola in caratteri, è
[5.3]
s =
√
|T |
(li – l̄)2
i=1
,
|T |
cioè la radice quadrata della media dei quadrati degli scarti, dove
scarto è la differenza tra un valore li e la sua media 4. L’importanza di
s come indice statistico deriva dal ruolo centrale che la media svolge
all’interno di certe distribuzioni. Infatti s non fa altro che calcolare
gli scarti quadratici dalla media, presa come punto di riferimento dell’intera distribuzione.
Tornando al nostro esempio della lunghezza in caratteri delle parole, se tutte le nostre unità avessero la stessa lunghezza l, allora l̄ = l
e s = 0. Se invece il valore di s cresce, questo vuol dire che ci sono
parecchie parole la cui lunghezza differisce molto dal valore della media. In altre parole, s è in grado di quantificare quanto disomogenea
sia la distribuzione.
4. La media dei quadrati degli scarti dalla media è anche nota come varianza. A
differenza della varianza, la cui unità di misura è uguale al quadrato dell’unità di misura dei dati originari, la deviazione standard è espressa nella stessa unità di misura
dei dati.
130
5.
PAROLE E NUMERI
5.3.3. Leggere le distribuzioni
Saper leggere il grafico di una distribuzione significa essere in grado
di rispondere a domande del tipo: intorno a quali valori si concentra
la maggior parte degli individui della popolazione? Con che ritmo se
ne discosta progressivamente? Possiamo prevedere l’andamento della
distribuzione per valori non osservati? E così via. Le distribuzioni ci
offrono dunque indicazioni importanti riguardo alla tendenza più o
meno selettiva delle nostre unità a raggrupparsi intorno a certi valori. Un semplice esempio, attribuito da Herdan (1964) a E. T. Whittaker, ci può aiutare a chiarire meglio questo concetto. Un treno
vuoto, composto da un numero infinitamente grande di carrozze, è
fermo al marciapiede di una stazione in attesa di partire. I passeggeri
cominciano a salire: come si distribuiranno negli scompartimenti?
Possiamo immaginare che molto dipenderà da alcuni vincoli ambientali e dall’attitudine di chi viaggia. Proviamo a distinguere tre scenari
possibili.
Nel primo scenario, ipotizziamo che i passeggeri non abbiano alcuna ragione a priori di preferire una carrozza rispetto a un’altra, o
uno scompartimento rispetto a un altro. In questo caso non è difficile
prevedere che ogni scompartimento avrà la tendenza a contenere n
passeggeri, con n = N/S, dove N è il numero totale dei passeggeri e S
quello degli scompartimenti. Questa distribuzione, che si basa sull’ipotesi che ogni scompartimento abbia la stessa probabilità di essere
scelto, è anche detta uniforme (cfr. PAR. 6.1, per una definizione più
formale).
Supponiamo invece che i passeggeri arrivino al binario attraverso
un unico sottopassaggio e che abbiano la tendenza a occupare il posto più vicino al loro punto di accesso al binario, per una sorta di
naturale propensione a compiere il minimo sforzo. In questo caso, ci
aspettiamo che le carrozze in prossimità del sottopassaggio siano sovraffollate, e che la densità dei passeggeri diminuisca man mano che
ci allontaniamo dal sottopassaggio in direzione della testa e della
coda del treno. La distribuzione dei viaggiatori ricorderà la forma a
campana della cosiddetta curva normale (cfr. Scheda on line 5.1), con
valori alti in prossimità dell’asse centrale della campana, valori rapidamente decrescenti su entrambe le “spalle”, e due lunghe “code”,
anch’esse disposte simmetricamente ai due lati dell’asse centrale, sulle
quali il numero di passeggeri continua a decrescere a un ritmo molto
lento.
Nel terzo scenario, infine, i passeggeri raggiungono il treno dalla
prima carrozza, come accade comunemente nelle stazioni di testa, in
131
TESTO E COMPUTER
cui il binario termina e i treni ripartono invertendo la direzione di
marcia con la quale erano arrivati. Supponiamo inoltre che l’attitudine dei passeggeri sia più complessa che nei primi due casi: la pulsione a fare meno strada possibile si combina, questa volta, con il loro
grado di socievolezza, che può variare da passeggero a passeggero. Il
risultato più prevedibile è che alcuni scompartimenti saranno sovraffollati di viaggiatori socievoli, mentre tanti altri saranno occupati da
pochi passeggeri o da viaggiatori solitari. Verosimilmente, gli scompartimenti affollati saranno quelli di testa, più vicini al punto di arrivo dei passeggeri, dal momento che è ragionevole prevedere che i
viaggiatori più socievoli siano meno selettivi degli altri e che quindi
abbiano la tendenza a fermarsi il prima possibile. Man mano che ci
allontaniamo in direzione della testa, naturalmente, i passeggeri diventano sempre più “difficili”. Spingendoci ancora più in là, finiremo
col trovare una lunga fila di scompartimenti di viaggiatori solitari, disposti ad attraversare tutto il treno pur di trovare uno scompartimento vuoto. Naturalmente quanto più saranno socievoli i passeggeri,
tanto più affollate saranno le carrozze di testa.
Come si vede, una semplice funzione di distribuzione delle frequenze può darci molte informazioni utili riguardo all’attitudine della
popolazione che stiamo esaminando. Tornando alla FIG. 5.1, notiamo
che la curva di distribuzione ha due cuspidi (dette anche mode). Un’altra sua caratteristica evidente è che la più alta delle due mode non è
centrata rispetto alla distribuzione complessiva, ma piuttosto spostata
verso sinistra. Discuteremo più avanti le ragioni di questa asimmetria;
ci limitiamo per adesso a osservare che la mancanza di simmetria in
una distribuzione indica, a meno di errori, che esistono dei fattori che
impediscono alla popolazione di concentrarsi intorno al valor medio
(nel nostro caso 4,6). Riprendendo la nostra metafora del treno, possiamo ipotizzare l’esistenza di due sottopassaggi, uno dei quali è accessibile per un numero più alto di potenziali passeggeri (ad esempio quello
che collega il binario all’ingresso principale della stazione). In generale,
tuttavia, bisogna stare bene attenti a separare l’osservazione della distribuzione dalla sua possibile spiegazione. Molte spiegazioni diverse
sono infatti compatibili con la stessa distribuzione.
5.4
Il vocabolario di un testo
Definiamo il vocabolario VT di un testo T come l’insieme delle parole
tipo che ricorrono in T. È utile distinguere questa nozione da quella
di lessico L di una lingua (oppure di un parlante), che indica, nell’uso
132
5.
PAROLE E NUMERI
più comune, il repertorio di tutte le parole possibili di quella lingua
(oppure di tutte le parole conosciute da quel parlante). Il vocabolario
VT è dunque quel sottoinsieme di L che ritroviamo effettivamente attestato in T. Secondo la definizione che qui proponiamo, il lessico
definisce un insieme potenziale, e dunque potenzialmente infinito, di
parole. Al contrario, dato un testo di lunghezza finita, la grandezza
del suo vocabolario è sempre finita, ed è data dalla cardinalità |VT|,
cioè dal numero di parole tipo in T. Nel nostro esempio 5.1,
|VT| = 29.
5.4.1. Rapporto tipo/unità
Il rapporto tipo/unità (type/token ratio), la cui formula è data in
[5.4], può essere interpretato come un indice della ricchezza lessicale
di un testo.
[5.4]
0 <
|VT |
|T |
≤1
I valori del rapporto oscillano tra 0 e 1. Valori vicini allo 0 stanno a
indicare che il lessico del testo è meno vario. Il valore massimo 1 si
ottiene quando la grandezza del vocabolario è pari alla lunghezza del
testo che lo esprime. Questo succede quando il testo in questione è
interamente formato da hapax, cioè da parole che ricorrono una volta
soltanto, un’eventualità possibile solo con testi relativamente brevi.
Diventa presto molto difficile, come vedremo più avanti, evitare di
ripetere una preposizione, un articolo o un ausiliare. Il limite minimo
cui tende la [5.4] è 0. Questo valore si raggiunge solo se si verificano
due condizioni: il testo è infinitamente lungo, ma il suo vocabolario
smette di crescere da un certo punto in poi (si immagini, ad esempio,
un testo formato interamente dalla stessa frase ripetuta un numero
infinito di volte).
Un altro indice usato per misurare la varietà lessicale è il rapporto
tra il numero di hapax |V1T | di un testo T e la lunghezza di T
([5.5]).
[5.5]
|V1T |
|T |
Si dimostra semplicemente che
133
TESTO E COMPUTER
[5.6]
0 <
|V1T |
|T |
≤
|VT |
|T |
≤1
La disuguaglianza si giustifica osservando che il vocabolario di T è
definito dall’unione di tutte le parole tipo che si presentano una sola
volta in T, con tutte le parole tipo che appaiono in T due volte, tre
volte, quattro volte e così via, fino ad arrivare all’insieme di parole
tipo che appaiono con la frequenza massima (max) nel testo. In altri
termini abbiamo:
[5.7]
|VT | = |V1T | + |V2T | + ... + |VT | + ... + |Vmax
T |,
dove ViT è l’insieme delle parole tipo con frequenza pari a i, o classe
di frequenza i. Si noti, a questo proposito, che mentre la ripetizione
di una stessa parola tipo v determina il passaggio di v da una classe
ViT alla classe ViT+ 1, questa stessa ripetizione non cambia il valore
complessivo di |VT| perché non causa l’inserimento di un nuovo tipo
in VT.
Torniamo alla formula [5.7] della struttura del lessico. È interessante rappresentare con un grafico lo spettro delle frequenze di Pinocchio, che si ottiene mettendo in ascissa valori crescenti di classi di
frequenza i da 1 a max. Sull’asse delle ordinate riportiamo invece
quante parole tipo hanno frequenza i, cioè il valore corrispondente a
|ViT |. Ciascuno di questi valori risponde dunque alla domanda: quante parole diverse sono usate nel testo un numero i di volte? Per inciso, dovrebbe essere chiaro, a questo punto, che possiamo ricostruire
la lunghezza totale del testo dal quale siamo partiti con la formula:
[5.8]
|T | = |V1T |·1 + |V2T |·2 + ... + |ViT |·i + ... + |Vmax
|·max
T
Il grafico di FIG. 5.2 rappresenta lo spettro di frequenze del lessico di
Pinocchio per classi di frequenza misurate su scala logaritmica (cfr.
Scheda on line 5.1). Osserviamo che le parole tipo del nostro testo
non sono distribuite in modo uniforme. La stragrande maggioranza
ricorre poco frequentemente, e dunque si concentra in prossimità
dell’origine dell’asse delle x (valori di i compresi tra 1 e 10). Ad
esempio, gli hapax formano la classe più numerosa: 3270 membri
(per i = 1). D’altro canto, le classi di frequenza i > 10 contengono ciascuna fino a un massimo di 40 parole tipo circa. Infine, le parole tipo
assai frequenti, cioè vicine ai valori di max e più lontane dall’origine,
formano insiemi alquanto sparuti (molto spesso classi di un solo ele134
5.
PAROLE E NUMERI
5.2
Spettro delle frequenze lessicali in Pinocchio
FIGUR A
4.000
parole tipo
3.000
2.000
1.000
0
1
10
100
1.000
10.000
classe di frequenza
mento). Questo vuol dire che le parole del testo costituiscono un sistema con un numero molto alto di eventi rari (Baayen, 2001): sono
cioè moltissime le parole che incontriamo solo una o due volte, mentre sono relativamente poche quelle che incontriamo ripetutamente.
Dal punto di vista del vocabolario, le parole tipo che ricorrono
una sola volta nel testo rappresentano più del 50% delle entrate di
VT, come ricaviamo dalla distribuzione delle frequenze relative cumulate delle parole tipo, riportata nella parte superiore di FIG. 5.3. Il
grafico è costruito a partire dallo spettro di FIG. 5.2, disponendo in
ascissa le classi di frequenza. La frequenza relativa cumulata corrispondente alla classe i è uguale al numero di parole tipo che appaiono nel testo da 1 a i volte, diviso per la grandezza del vocabolario. Il
grafico di questa distribuzione ci dice che le parole tipo ripetute al
massimo dieci volte in Pinocchio coprono, in percentuale, più del
90% del vocabolario del libro. In generale, un testo con un lessico
più povero di quello di Pinocchio tenderà a presentare una curva
meno schiacciata verso l’alto, a indicare che le parole molto frequenti
occupano una fetta più consistente del vocabolario del testo.
Calcoliamo ora le frequenze relative cumulate delle parole unità (invece che dei tipi). Per ogni classe i sull’asse delle x, l’asse delle y ci dà
il numero di parole unità che ricorrono nel testo da 1 a i volte, diviso
per la lunghezza del testo. Dalla curva risultante, riportata nella parte
inferiore di FIG. 5.3, osserviamo che il 90% del vocabolario di Pinoc135
TESTO E COMPUTER
5.3
Frequenze cumulate per parole tipo e parole unità
FIGUR A
100
99,20%
91,65%
60,91%
54,74%
50
28,18%
8,08%
0
1
10
100
1.000
classe di frequenza
percentuale lessico
percentuale testo
chio copre poco più del 28% della lunghezza complessiva del libro.
Anche in questo caso, un testo lessicalmente più povero tenderà ad
avere una curva delle frequenze relative cumulate delle parole unità
con un andamento più piatto nella parte iniziale. Questo vuol dire che
due testi possono presentare fino al 70% di parole unità in comune,
anche quando i loro rispettivi vocabolari (cioè gli insiemi delle loro
parole tipo) non si sovrappongono per più del 10%. Bastano poche
differenze testuali per far parlare due documenti di cose completamente diverse. Nel prossimo paragrafo cercheremo di capire il perché.
5.4.2. Parole grammaticali e parole piene
Dal punto di vista della loro distribuzione nel testo, possiamo dividere le parole del lessico in due grandi categorie: quelle “socievoli”, che
affollano il testo, e quelle “difficili”, che si concedono raramente. Alla
prima categoria appartengono le cosiddette parole grammaticali, cioè
quelle parole, come congiunzioni, preposizioni e articoli, che formano
il “tessuto connettivo” della lingua di un testo, e si prestano così a
essere usate molto frequentemente, indipendentemente dalla tipologia
o dall’argomento del testo. Per questa stessa ragione, le parole grammaticali sono tipicamente assai poco informative riguardo al contenuto di un testo. Alla categoria delle parole difficili sono invece riconducibili le parole lessicalmente piene, come i nomi, gli aggettivi e i
136
5.
PAROLE E NUMERI
verbi. A differenza di quanto accade per le parole grammaticali, sapere che un testo contiene parole come computer, modem, internet, aggettivi come virtuale, casuale, digitale, e verbi come digitare o faxare
ci dà un’idea abbastanza precisa dell’argomento del testo, o almeno
del dominio tematico cui il documento fa riferimento. Da un punto
di vista strettamente linguistico, inoltre, un aspetto importante che distingue le parole grammaticali dalle altre è che in generale le prime
costituiscono una classe lessicale ristretta e chiusa. Con questo intendiamo dire che: a) il numero di articoli, congiunzioni, preposizioni e
ausiliari diversi di una lingua è mediamente basso; b) che questo numero resta relativamente costante nel tempo.
5.5
La legge di Zipf
Le osservazioni esposte finora si ricollegano a una tra le leggi quantitative più note e interessanti dell’uso linguistico, la legge di Zipf, così
chiamata in omaggio al lavoro pionieristico del linguista americano
George Kingsley Zipf (1902-1950), che per primo la osservò e cercò
di darne un’interpretazione (Zipf, 1935, 1949). Ordinando le parole
di un testo per valori decrescenti di frequenza, Zipf osservò l’esistenza di una relazione matematica costante tra la posizione che una parola occupa all’interno della lista, o rango della parola, e la sua frequenza. Si osservi a questo proposito la TAB. 5.2, contenente la lista
TABELLA 5.2
Le 30 parole più frequenti in Pinocchio
Rango
Forma
Frequenza
Rango
Forma
Frequenza
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
e
di
che
a
il
la
un
non
per
in
Pinocchio
si
gli
una
è
1.752
1.338
1.019
932
925
711
708
507
481
453
415
393
364
360
296
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
ma
i
come
da
io
mi
le
più
l’
disse
Lo
burattino
se
con
era
290
283
234
233
225
219
211
210
206
202
199
195
189
188
185
137
TESTO E COMPUTER
delle 30 parole più frequenti di Pinocchio. Se la parola il, attestata
con frequenza 925, ha rango 5, questo vuol dire che il testo in questione contiene 4 parole tipo con frequenza maggiore di 925. Nel
caso in cui due o più parole compaiano nel testo con la stessa frequenza, queste occuperanno nella lista posizioni successive, a ciascuna delle quali è associato un rango crescente.
La distribuzione di TAB. 5.2 ci ricorda da vicino la disposizione
dei passeggeri sul treno immaginario del nostro terzo scenario (cfr.
PAR. 5.3.3), in cui i viaggiatori sono alle prese con due esigenze potenzialmente conflittuali: quella di fare meno strada possibile (e quindi trovare il posto più vicino alla testa del treno) e quella di assecondare il loro grado di socievolezza, intesa come disponibilità a
viaggiare in scompartimenti affollati. La congiunzione e (TAB. 5.2), ad
esempio, illustra una tipologia particolarmente socievole di passeggeri: sono quelli che si fermano alla prima carrozza perché non disdegnano la compagnia di tante altre persone. Per trovare il primo
nome, Pinocchio, dobbiamo spostarci alla carrozza 11; per il secondo,
burattino, saltiamo direttamente alla 27. In generale, nei primi 30 vagoni troviamo in prevalenza passeggeri “di compagnia” come congiunzioni, preposizioni, articoli e verbi ausiliari. La presenza di così
tanti Pinocchio, per quanto inattesa in generale, si spiega naturalmente alla luce del fatto che il treno in questione è proprio il libro di
Pinocchio: con una battuta, possiamo immaginare che il treno sia diretto al paese dei Balocchi e che attiri appunto tipi come Pinocchio!
Se volgessimo lo sguardo ad altri treni in partenza dalla stessa stazione, sarebbe assai sorprendente trovarne un altro in cui le unità di
tipo Pinocchio viaggiano nei vagoni di testa. Questa osservazione, in
sé piuttosto banale, suggerisce tuttavia che il grado di socievolezza di
una parola tipo può cambiare da treno a treno. Esistono nondimeno
dei tipi di parola che sono sempre socievoli e viaggiano in massa su
qualsiasi treno: le parole grammaticali, appunto.
L’analisi della distribuzione del rango z per la frequenza f in testi
sufficientemente lunghi portò Zipf a ipotizzare l’esistenza della seguente relazione tra le due quantità, nota appunto come legge di Zipf:
[5.9]
f(z) =
C
za
Nella [5.9], f(z) è la frequenza della parola tipo di rango z; l’esponente a, secondo Zipf, era molto vicino a uno (e quindi poteva essere
semplicemente omesso dalla [5.9]), mentre C, una costante corrispon138
5.
PAROLE E NUMERI
5.4
La curva di Zipf in Pinocchio (doppia scala logaritmica)
FIGUR A
10.000
frequenza
1.000
y = 6185.5x–1.0418
100
10
1
1
10
100
1.000
10.000
rango
dente alla frequenza della parola di rango 1, dipende dalla lunghezza
|T| del testo e dalla grandezza del suo vocabolario 5. Osserviamo che
C
C
C
per a = 1, la f(z) si riduce a
al rango 2, a
al rango 3, a
al
2
3
4
(
C
–
C
)
tra la fren n+1
quenza dell’n-esima e la frequenza dell’n + 1-esima parola della lista si
riduce progressivamente al crescere di n.
Questo vuol dire che parole che appaiono molto in basso nella
lista di Zipf tendono ad avere frequenze simili. La coda della curva di
Zipf conterrà dunque tante parole con frequenza 1: gli hapax.
Per rendersi conto meglio del significato della curva di Zipf è utile osservarne il grafico in doppia scala logaritmica di FIG. 5.4, dove
abbiamo confrontato l’andamento teorico previsto dalla legge (la li-
rango 4 e così via. In questo modo, lo scarto
5. La C garantisce che la somma di tutte le f(z) sia uguale a |T|, cioè che, per
C
|T |
a = 1, = |T |. Pertanto: C =
.
1
z z
z
z
139
TESTO E COMPUTER
nea retta in grigio chiaro) con quello realmente osservato in Pinocchio
(losanghe in grigio scuro), i cui primi 30 valori corrispondono a quelli della TAB. 5.2. Sull’asse delle x si dispongono valori crescenti di
rango, mentre l’asse delle y rappresenta la frequenza della parola di
rango x, cioè il numero delle sue unità nel testo. La curva di Zipf che
approssima meglio i nostri valori osservati è definita da C = 6185 ed
a = 1,04. Il logaritmo (cfr. Scheda on line 5.1) trasforma una potenza
in prodotto e un prodotto in somma, consentendoci di riscrivere la
[5.9] come segue:
[5.10]
log f(z) = logC – a logz
Il risultato della [5.10] è la trasformazione di una curva in una retta
che scende da sinistra verso destra, la cui pendenza è definita dal
coefficiente a. Dato che log(1) = 0, l’origine degli assi cade in corrispondenza dei valori di frequenza 1 e rango 1. Pertanto, il punto in
cui la retta intercetta l’asse delle y corrisponde a log C, cioè al logaritmo della frequenza massima di parola. L’intercetta sull’asse delle x,
d’altra parte, individua il punto della lista in cui cominciamo a trovare le parole di frequenza 1 (hapax). Il fatto che, su scala logaritmica,
lo scarto tra la frequenza f(1) ed f(10) sia uguale allo scarto tra f(10)
ed f(100), tra f(100) ed f(1.000), tra f(1.000) ed f(10.000) e così via,
conferma che le frequenze per parole con ranghi alti decrescono molto più lentamente. Se infatti decrescessero allo stesso ritmo,
f(1) - f(10) sarebbe dieci volte più piccolo di f(10) - f(100), cento volte
più piccolo di f(100) - f(1.000) e via dicendo.
Concentriamoci ora sulle differenze tra l’andamento teorico previsto dalla [5.9] e la distribuzione effettivamente osservata. L’effetto a
gradini che ritroviamo in quest’ultima, evidente soprattutto nella coda
della distribuzione, indica che in Pinocchio esistono più parole con la
stessa frequenza. Inoltre, le parole con la stessa frequenza aumentano
col rango. La legge di Zipf non prevede che esistano più parole con
la stessa frequenza, ma possiamo spiegare questo “errore” osservando
che a) i valori predetti dall’equazione [5.9] sono valori teorici che variano con continuità, mentre le frequenze assolute sono sempre discrete e variano con uno scarto minimo di un’unità; b) più ci spostiamo verso i ranghi alti, più si riducono gli scarti tra le frequenze di
parole di rango contiguo; e quindi più probabile diventa che il loro
scarto sia inferiore all’unità. Meno giustificabile è invece lo scostamento tra Zipf e Pinocchio nella parte alta del grafico di FIG. 5.4,
dove i valori teorici previsti sono significativamente più alti di quelli
osservati. Questo scarto ha stimolato, nel corso degli ultimi 50 anni,
140
5.
PAROLE E NUMERI
la formulazione di numerose leggi alternative, per le quali si rimanda
il lettore interessato a Baayen (2001).
Per riassumere, la legge di Zipf esprime una relazione teorica tra
rango e frequenza come una retta su doppia scala logaritmica strettamente decrescente, che intercetta l’asse delle x alla frequenza 1. In
pratica, la retta definisce la pendenza di una scalinata i cui gradini
diventano più larghi al crescere del rango. Ma cosa significa la pendenza della scalinata? Possiamo avere scalinate più o meno ripide?
5.5.1. La famiglia Zipf
Sulla base delle sue osservazioni empiriche, Zipf aveva concluso che a
≅ 1. In realtà, i mezzi di calcolo di cui disponiamo oggi ci consentono di essere più precisi e di osservare che a può variare da testo a
testo. L’equazione della [5.9] definisce dunque un’intera famiglia di
andamenti zipfiani, che possono variare a seconda del punto C in cui
la retta intercetta l’asse delle y, o del coefficiente angolare a della
stessa retta, o di entrambi.
Dalla [5.9] ricaviamo che non è possibile mantenere invariata la
lunghezza del testo e la frequenza massima C facendo variare il coefficiente a. In altre parole, a parità di lunghezza del testo, C ed a sono
interdipendenti: aumentando il primo parametro, dovremo aumentare
anche il secondo. Un testo con la stessa lunghezza di Pinocchio, ma
con un vocabolario meno ricco, avrà quindi una scala zipfiana con
pendenza maggiore di quella del Pinocchio originario. Se alcune parole si ripetono con maggiore frequenza, la legge di Zipf prevede infatti
che le altre presenteranno frequenze proporzionalmente più basse
(cfr. l’andamento con quadratini nella FIG. 5.5). Dovrebbe esser chiaro, a questo punto, che il coefficiente a della [5.9] può essere interpretato, a parità di lunghezza del testo, come un indice inverso della
sua ricchezza lessicale. Più grande è a, più ristretto sarà il vocabolario
di T.
Costruiamo ora un testo “artificiale” per osservare se il suo andamento è riconducibile alla famiglia Zipf. Prendiamo uno spezzone di
testo da Pinocchio (diciamo le prime 30 frasi) e ricopiamolo di seguito k volte, fino a raggiungere la lunghezza del Pinocchio originale.
Andiamo a proiettare le relazioni tra rango e frequenza nel nuovo testo (cfr. l’andamento con triangolini nella FIG. 5.5). Osserveremo una
“scala” che scende verso il basso con una pendenza minore di quella
di Pinocchio, ma che non tocca l’asse delle x, interrompendosi in cor141
TESTO E COMPUTER
5.5
Andamento rango/frequenza in tre tipologie di testo
FIGUR A
100000
frequenza
10000
1000
100
10
1
1
10
100
1000
10000
rango
pinocchio
artificiale
impoverito
rispondenza della frequenza k. L’aumento complessivo delle frequenze, dovuto alla minore pendenza della nuova scala, compensa il suo
accorciamento. Il testo ha la stessa lunghezza di Pinocchio, ma il suo
andamento non fa parte della famiglia Zipf, in quanto presenta un
“salto”, dalla frequenza k > 1 a 0, che la [5.9] esclude.
In conclusione, la legge di Zipf definisce una tendenza consolidata
nella relazione tra rango e frequenza delle parole di un testo: poche
parole sono ripetute molto spesso, molte parole hanno invece frequenza 1 o poco maggiore. Dal nostro punto di vista, un aspetto affascinante di questa relazione sta nel fatto che la forma della distribuzione lessicale che essa genera è relativamente indipendente dalla lunghezza del testo (per quanto, come abbiano visto, i suoi parametri C
e a non lo siano affatto). Qualsiasi porzione sufficientemente lunga di
un testo reale tenderà a presentare un andamento zipfiano. È abbastanza scontato osservare che ripetere più volte una stessa porzione di
testo non significa produrre un nuovo testo più lungo. È un po’
meno ovvio che una semplice relazione quantitativa come la cosiddetta legge di Zipf consenta di misurare, in un testo, la relazione tra il
tutto e le sue parti e distinguere, a colpo d’occhio, testi naturali da
testi “artificiali”.
142
5.
PAROLE E NUMERI
5.6
La dinamica del vocabolario
Osservare come le parole, i “passeggeri” del testo, si distribuiscono al
suo interno ci ha fornito una serie di informazioni preziose riguardo
alle loro abitudini, al loro grado di socievolezza e persino alla natura
e al contenuto del testo stesso. Questo quadro, tuttavia, è una fotografia fondamentalmente statica della composizione lessicale del testo
e non dice nulla, ad esempio, riguardo a quando una certa parola è
apparsa per la prima volta (nella nostra metafora, quando è salita sul
treno) o riguardo al modo in cui la distribuzione stessa delle parole
cambia col tempo, ad esempio da un capitolo a quello successivo.
Una visione dinamica della composizione lessicale di un testo è di
fondamentale importanza per riuscire a capire, ad esempio, quanto a
lungo dobbiamo osservare il comportamento dei nostri passeggeri per
essere ragionevolmente sicuri di averne registrato le caratteristiche salienti, o per essere in grado di prevedere la loro distribuzione finale
sulla base di un’osservazione parziale dei dati.
5.6.1. La crescita di V
Torniamo a considerare |VT|, la cardinalità dell’insieme di parole tipo
nel nostro testo T. Intuitivamente, all’inizio di un testo |VT| cresce
rapidamente. Si immagini, ad esempio, di volere contare il vocabolario di questo paragrafo. La prima frase del paragrafo contiene parole
tutte diverse tra loro. Ogni parola entrerà dunque nel vocabolario.
Nella seconda frase, invece, la preposizione di si ripete, così come il
nome testo e così via. Le parole ripetute sono già presenti nel vocabolario e quindi non vanno aggiunte. Pertanto, il ritmo di crescita di
|VT| rallenta al crescere del testo. Cerchiamo ora di formalizzare questa intuizione.
Per disegnare l’andamento della crescita lessicale all’aumentare
della lunghezza del testo è utile rappresentare il testo come una sequenza v1, v2, ... vi ... v|T| di parole indicizzate per posizione. L’indice
i può essere anche interpretato come associato a un dato istante temporale, per cui l’unità vi è la parola che troviamo nel testo all’istante
i. Questa interpretazione suggerisce una visione del testo più vicina al
linguaggio parlato, corrispondente a un flusso di parole nel tempo.
Immaginiamo di scorrere il testo parola per parola. Se vi è una parola
nuova, cioè se non è mai apparsa nella sequenza v1, v2, ... vi-1, allora
incrementiamo |VT| di un’unità. Al contrario se vi è già apparsa prima, allora |VT| resta invariato. Chiamiamo VT(i) il vocabolario delle
143
TESTO E COMPUTER
5.6
La crescita del lessico in Pinocchio
FIGUR A
grandezza vocabolario
7.000
6.000
5.000
y = 3.2824x0.6984
4.000
3.000
2.000
1.000
0
0
10.000
20.000
30.000
lunghezza testo
con punteggiatura
40.000
50.000
60.000
senza punteggiatura
Potenza (con punteggiatura)
prime i parole v1, v2, ... vi, di T, con i ≤ |T |. |VT(i)| ci restituisce pertanto la grandezza del vocabolario usato nelle prime i parole di T. La
FIG. 5.6 presenta il grafico della |VT(i)| in due versioni differenti: la
prima include nel vocabolario anche i segni di punteggiatura; la seconda si limita alle sole parole in senso stretto. In entrambi i casi, il
ritmo col quale |VT(i)| aumenta diminuisce al crescere di i (rappresentato sull’asse delle x) senza tuttavia mai annullarsi completamente.
Quando il lessico include la punteggiatura, la crescita è leggermente
più lenta. Nella figura, abbiamo approssimato questo andamento con
una funzione potenza del tipo ia, dove il valore di a, l’esponente per
il quale dobbiamo elevare la lunghezza i del testo, è vicino a 0,7.
Questo andamento non rettilineo (o, più tecnicamente, non lineare),
come vedremo, è tipico della crescita del lessico nel testo, anche se
l’esponente a può variare da testo a testo.
In generale, l’andamento di |VT(i)| si spiega osservando che, al
crescere di |T |, diventa intuitivamente sempre più difficile trovare una
parola mai usata prima in T. |VT(i)| non cresce sempre, poiché esistono parole che devono ripetersi più o meno regolarmente. Le parole grammaticali, come abbiamo visto, sono certamente tra queste: il
loro ruolo di connettivi sintattici le rende insostituibili nella maggior
parte delle frasi che usiamo. Un altro fattore di ripetitività è la coerenza lessicale. Quando parliamo di un argomento, tendiamo a ripete144
5.
PAROLE E NUMERI
5.7
La crescita degli hapax in Pinocchio
FIGUR A
3.500
3.000
2.500
2.000
1.500
1.000
5.00
0
0
10.000
20.000
media hapax
30.000
40.000
50.000
hapax osservati
re le stesse parole relative a quell’argomento. Sebbene dal punto di
vista stilistico sia preferibile non ripetersi troppo, ragioni di chiarezza
spesso impongono l’uso coerente delle stesse parole quando si vuole
fare riferimento agli stessi concetti.
Un ultimo fattore di ripetitività lessicale è l’andamento narrativo.
Per illustrarlo più concretamente, in FIG. 5.7 abbiamo rappresentato
con una serie di pallini neri la distribuzione degli hapax di Pinocchio,
calcolata in modo incrementale dall’inizio alla fine del libro, sulle prime 1.000, 2.000, 3.000 parole e così via, fino a coprire il libro intero.
Sullo stesso grafico abbiamo poi proiettato la distribuzione degli hapax, calcolata questa volta su 40 campioni casuali di Pinocchio. I campioni sono costruiti estraendo a caso dal testo di Pinocchio 1.000,
2.000, 3.000 parole e così via, fino ad arrivare a un campione casuale
di taglia pari alla lunghezza totale del testo. In questo modo capitoli
e campioni casuali possono essere confrontati.
Si osservi ora che gli hapax “reali” (i pallini neri) sono, in generale, meno frequenti di quelli campionati casualmente (rombi collegati
da una linea continua), soprattutto nella parte bassa della curva, in
corrispondenza dei primi capitoli del libro. Questo sta a indicare che
il ritmo narrativo di Pinocchio determina una certa “vischiosità” lessicale che porta a ripetere le stesse parole molto di più di quanto non
imponga la distribuzione zipfiana delle stesse. Per i lettori più scettici,
ci affrettiamo a osservare che gli scarti tra le due distribuzioni sono
145
TESTO E COMPUTER
statisticamente significativi: infatti, la probabilità che essi siano dovuti
al caso è molto bassa, inferiore allo 0,05 6!
5.6.2. La frequenza media
La crescita delle dimensioni del vocabolario di un testo T al crescere
della lunghezza di T non è, come tale, sorprendente. Cosa succede se
rapportiamo queste due grandezze tra loro? Esprimiamo questo rapporto come segue:
[5.11]
f (|T |) =
|T |
|VT|
f (|T |) è chiamata frequenza media delle parole in T, in quanto, banalmente, |T | è uguale alla somma delle frequenze di tutte le parole di
VT e |VT| ce ne dà la grandezza. Si noti che f (|T |) è un indice inverso
di ricchezza lessicale: a parità di lunghezza |T |, quanto più piccolo
sarà il numero di parole diverse in T, tanto più grande sarà la loro
1
è uguale
frequenza media. A riprova di questo, si osservi che
f (|T |)
al rapporto tipo/unità ([5.4]).
Ma come varia f (|T |) al crescere di T? Prima di verificare l’andamento dinamico di f (|T |), è utile fare alcune considerazioni generali
sul suo comportamento atteso. Nelle prime i parole di T, la probabile
mancanza di parole ripetute determina l’uguaglianza tra i e |VT(i)|:
pertanto, f (i) = 1, dove f (i) è il valore di frequenza media calcolato
sulle prime i parole di T. Non appena il testo comincia a ripresentare
parole già usate, tuttavia, f (i) > 1: la lunghezza i del testo continua
infatti a crescere a fronte di |VT(i)| che resta costante. In un testo dal
contenuto omogeneo, l’andamento tendenziale è quello di una funzione non decrescente, con f (k) ≤ f (k + 1), sebbene si possano registrare
occasionali inversioni di questa tendenza, con f (k + h) < f (k), dovute
a un incremento significativo del ritmo di crescita del lessico nelle
ultime h parole. Questa inversione è spesso indice di una discontinuità di contenuto tra la nuova porzione di testo e quella vecchia. Per
converso, f (k + h) > f (k) indica una sostanziale omogeneità di contenuto tra porzioni di testo contigue, determinata dal ripetersi delle
6. I risultati di questo esperimento sono stati ottenuti grazie alla batteria di programmi di elaborazione statistica del testo acclusi al testo di R. Harald Baayen Word
Frequency Distributions, Kluwer, 2001.
146
5.
PAROLE E NUMERI
5.8
L’andamento della frequenza media per parola in Pinocchio
densità
frequenza media
FIGUR A
10
1
0
10.000
20.000
30.000
40.000
50.000
0,1
0,01
lunghezza del testo
stesse parole. Nel limite, f (i) tende ad avere un andamento strettamente crescente, in corrispondenza dell’atteso rallentamento progressivo della crescita di |VT|.
La crescita tuttavia non è mai lineare, a causa del costante “attrito” causato da un vocabolario che continua a espandersi, come abbiamo visto, molto lentamente. Nella parte superiore del grafico di
FIG. 5.8 abbiamo riportato i valori di f (i) cadenzati secondo la successione dei capitoli di Pinocchio. In generale, il grafo presenta l’atteso andamento crescente, con alcuni “gradini” che congiungono i capitoli nei quali il valore di f (i) varia di meno. Sono questi i capitoli
nei quali rileviamo una qualche discontinuità di contenuto rispetto al
passato, come testimonia l’aumento repentino della densità di parole
nuove per capitolo, riportato nella parte inferiore del grafico di FIG.
5.8 7. Si noti a questo riguardo la crescita costante di f (i) nei primi 8
capitoli del testo, in corrispondenza di un calo continuo della densità
di parole nuove. Alla relativa uniformità lessicale della parte iniziale
del romanzo, si contrappongono il CAP. 9 e in misura ancora maggiore il 10, dove il burattino esce finalmente di casa per iniziare le sue
avventure lontano da Geppetto.
7. La densità è uguale al rapporto tra il numero di parole nuove introdotte in
ciascun capitolo di Pinocchio (rispetto ai capitoli che lo precedono) e la lunghezza del
capitolo stesso.
147
TESTO E COMPUTER
5.7
Medie e inferenza statistica
Vogliamo ora approfondire il comportamento della frequenza media
confrontandolo con un altro caso di media trattato in precedenza: la
lunghezza media di parola in caratteri (cfr. PAR. 5.3.1). Torniamo
dunque a osservare il grafico di FIG. 5.1. La lunghezza media in caratteri della popolazione, pari a circa 4,65, si colloca tra i due “picchi” della distribuzione, ottenuti in corrispondenza delle lunghezze 2
e 5. L’alta concentrazione di frequenze su valori relativamente bassi
di lunghezza si spiega alla luce di alcune proprietà specifiche della
distribuzione di parole nel testo. Molte delle cosiddette parole grammaticali, infatti, tendono a essere mediamente corte; inoltre esse sono
anche, come sappiamo, le più frequenti in un testo.
Cosa succede se confrontiamo tra loro i valori della lunghezza media di parola in una serie di campioni di testo? Innanzitutto, per costruire questa curva dobbiamo:
1. estrarre dal testo un certo numero di campioni;
2. per ogni campione i, misurare la lunghezza media di parola l i;
3. raggruppare le medie ottenute per intervalli di larghezza costante
(ad esempio tutte le medie comprese tra i valori 3 e 3,5);
4. calcolare la cardinalità di tutti i raggruppamenti ottenuti al passo 3.
La FIG. 5.9 illustra il risultato di questa operazione, ottenuto utilizzando come campioni i 36 capitoli di Pinocchio. Si osservi che il
numero di capitoli i cui valori di l i si scostano da l (media della
popolazione), diminuisce all’aumentare dello scostamento. L’andamento complessivo della distribuzione di FIG. 5.9 ricorda la forma a
campana della curva normale (cfr. Scheda on line 5.2). La sagoma
della campana non è perfettamente simmetrica (a causa del numero
limitato di capitoli e della variabilità non casuale della loro lunghezza), ma la differenza tra quest’ultima e la distribuzione bimodale di
FIG. 5.1 è comunque sensibile. Calcolando i valori di l i nel primo
capitolo, nei primi due, nei primi tre, nei primi quattro e così via,
osserveremmo che questi valori oscillano intorno a una retta parallela
all’asse delle ascisse e che l’ampiezza delle oscillazioni diminuisce al
crescere della lunghezza del testo. A conferma di una tendenza verso
una graduale stabilizzazione di l i.
Questi risultati non sono inattesi, ma rispondono al Teorema del
Limite Centrale (TLC) che ci dice fino a che punto siamo autorizzati a
trarre conclusioni generali (valide cioè per l’intera popolazione) sulla
base dell’evidenza quantitativa fornitaci da un campione, cioè da
un’osservazione parziale dei dati. Secondo il TLC, infatti,
148
5.
PAROLE E NUMERI
5.9
La lunghezza media di parola nei capitoli di Pinocchio
FIGUR A
14
13
12
10
8
8
6
6
4
4
2
3
1
1
>4.95
4,85-4,95
4,75-4,85
4,65-4,75
4,55-4,65
4,45-4,55
<4,45
0
data una serie di campioni di ampiezza n estratti a caso a partire da una
stessa popolazione, le loro medie tendono a distribuirsi secondo una curva
normale definita dalla media m della popolazione e dalla sua deviazione standard s; l’approssimazione alla curva normale migliora al crescere di n ma è
indipendente da come la popolazione di partenza si distribuisce intorno alla
sua media.
Per il TLC, dunque, le lunghezze medie campionarie per parola l i si
distribuiscono, appunto, a campana intorno alla lunghezza media per
parola l della popolazione di riferimento. L’attendibilità di una singola l i dipenderà dunque, fondamentalmente, dall’ampiezza della
campana di FIG. 5.9, cioè da quanto le medie si disperdono intorno al
suo asse centrale: maggiore la dispersione, minore l’attendibilità. Il
TLC garantisce che è possibile ridurre arbitrariamente l’ampiezza della
campana aumentando la taglia del nostro campione; in questo modo,
la media di un campione sufficientemente grande sarà molto vicina
alla media della popolazione. Il TLC rappresenta pertanto una sorta di
porta di comunicazione tra la statistica descrittiva e l’inferenza statistica, in quanto ci dice a quali condizioni è legittimo fare delle inferenze statistiche sufficientemente corrette riguardo a una popolazione
a partire da un suo campione.
Sarebbe assai utile e interessante trasferire queste considerazioni
al caso delle distribuzioni lessicali. Se, infatti, anche la frequenza delle
149
TESTO E COMPUTER
parole si distribuisse come la loro lunghezza in caratteri, allora potremmo, con buona approssimazione, essere in grado di predire la
struttura lessicale di un intero testo sulla base di un suo campione.
Questo aprirebbe importanti prospettive per lo sviluppo di modelli
linguistici di tipo stocastico che, come vedremo nel dettaglio nel prossimo capitolo, sono in grado di calcolare la probabilità con la quale le
parole si combinano nel testo.
A questo proposito, è utile tornare a osservare il comportamento
della frequenza media delle parole. Il profilo della FIG. 5.8 suggerisce
che la frequenza media non si comporta come una media campionaria “normale”, in quanto i suoi valori non convergono su un valore
atteso al crescere della taglia del campionamento (come suggerirebbe
invece il teorema del limite centrale). La crescita della lunghezza del
testo (al numeratore di f (i)) è infatti lineare, cioè segue un andamento rettilineo, con incrementi sempre costanti (di una parola per volta). Pertanto, solo una crescita altrettanto lineare della cardinalità del
lessico (al denominatore di f (i)) renderebbe il loro rapporto costante.
Sappiamo, però, che il lessico non cresce per incrementi costanti.
Anzi, la sua crescita diventa progressivamente più lenta, man mano
che il testo aumenta, anche più lenta di quanto non ci autorizzerebbe
a ipotizzare la legge di Zipf (FIG. 5.7). La prima conseguenza pratica
di questa situazione è che non è corretto confrontare valori di frequenza media calcolati su testi di taglia diversa, in quanto si corre il
rischio di sottostimare seriamente la ricchezza lessicale del testo più
lungo: un testo più lungo non “aggiorna” infatti il suo vocabolario
allo stesso ritmo di un testo più corto. Meglio confrontare le dimensioni assolute di vocabolari calcolati su spezzoni di testo della stessa
lunghezza.
Possiamo pur sempre ipotizzare che il confronto tra le frequenze
medie di due testi di lunghezza diversa sia fuorviante perché non abbiamo aspettato abbastanza a lungo. È ragionevole nutrire la speranza
che un testo enormemente lungo finisca, prima o poi, per “esaurire”
il suo vocabolario? Sebbene la probabilità di incontrare parole nuove
in un testo diminuisca progressivamente all’aumentare della lunghezza del testo (pur con qualche oscillazione), non siamo tuttavia autorizzati ad aspettarci che questa probabilità si riduca a zero e che il
testo smetta di espandere il suo vocabolario. Spogli su corpora di
grandi dimensioni come il British National Corpus mostrano che anche campionando 90 milioni di parole, l’andamento di crescita del
vocabolario non dà segni di appiattimento! Da questo punto di vista,
la prospettiva, delineata nel CAP. 1, di creare un insieme finito di testi
150
5.
PAROLE E NUMERI
bilanciati che consenta di stimare con sufficiente accuratezza le frequenze lessicali di una popolazione linguistica di riferimento sembra
dunque condannata al fallimento. Di dati non ne avremo mai abbastanza!
È dunque alla fine davvero inutile selezionare i nostri testi sulla
base della loro natura, della loro struttura interna, del loro dominio
tematico e quant’altro e prendere tutto il testo che capita? Ci sono
buone ragioni per dubitare di questa conclusione. L’estrema selettività di un testo nell’espandere il suo vocabolario è certamente una conseguenza della bassa probabilità con la quale la stragrande maggioranza delle parole del lessico ricorre, ma si combina, come abbiamo
osservato, con altri fattori che è utile qui ricordare. Ciò di cui parla
un testo inevitabilmente (e banalmente) condiziona la distribuzione
del suo lessico: l’alta frequenza di una parola come Pinocchio nel testo omonimo si spiega solo con il ruolo centrale svolto dal burattino
nella fiaba di cui è protagonista. Allo stesso modo, fattori di coerenza
lessicale e di andamento narrativo condizionano la crescita del lessico,
inducendo fenomeni di “attrito” e “vischiosità” (cfr. PAR. 5.6.1). Se
ne conclude che il confronto tra le distribuzioni lessicali di due campioni testuali deve tenere sotto controllo più di un fattore: la loro
lunghezza, di cosa parlano i due spezzoni e in quale punto dello sviluppo narrativo del testo essi si collocano. Un testo coerente infinitamente lungo presenterà un andamento di crescita lessicale diverso da
una sequenza infinita di piccoli testi indipendenti.
In ultima analisi, dunque, la frequenza media di parola è uno
strano “animale”. Le particolarità del suo comportamento non evidenziano soltanto un problema di stima campionaria, ma puntano al
cuore di un problema cruciale delle distribuzioni lessicali: la loro dipendenza dal tempo (ad esempio costruzioni sintattiche, coerenza lessicale, sviluppo narrativo) e dallo spazio (ad esempio argomento, dominio tematico, registro ecc.). La creatività lessicale e la sua sensibilità rispetto alle situazioni comunicative concrete non sembrano adattarsi alla tendenza statistica verso una media stabile. La LC è in grado,
oggi, di offrire un quadro generale dei fattori che condizionano le distribuzioni lessicali, ma è ancora lontana dal proporre modelli predittivi precisi della loro interazione dinamica. È ragionevole prevedere che la sterminata disponibilità di testi sul web (cfr. PAR. 1.4.5) e la
possibilità di regimentarne il flusso attraverso forme anche rudimentali di strutturazione e accesso selettivo come i cataloghi per soggetto
(web directories), consentiranno nell’immediato futuro di gettare nuova luce su questi problemi.
151
TESTO E COMPUTER
Per saperne di più
BAAYEN R. H.
(2001), Word Frequency Distributions, Kluwer Academic Publishers, Dordrecht.
BARNBROOK G. (1996), Language and Computers: Practical Introduction to the
Computer Analysis of Language, Edinburgh University Press, Edinburgh.
MULLER C. (1977), Principes et méthodes de Statistique Lexicale, Librairie Hachette, Paris.
OAKES M. P. (1998), Statistics for Corpus Linguistics, Edinburgh University
Press, Edinburgh.
WOODS A., FLETCHER P., HUGHES A. (2000), Statistics in Language Studies,
Cambridge University Press, Cambridge.
152
6
Probabilità ed entropia
I testi sono prodotti dai parlanti secondo le regole della grammatica e
le convenzioni d’uso della lingua. Nel capitolo precedente abbiamo
visto che l’analisi della distribuzione delle frequenze delle parole nel
testo rappresenta una “sonda” importante per osservare l’organizzazione del testo e le dinamiche del suo vocabolario. In questo capitolo
faremo un passo ulteriore per cercare di rispondere a questa domanda: come è possibile utilizzare l’informazione quantitativa estraibile da
un testo per ricavare un modello della lingua del testo? Per far questo,
la semplice nozione di frequenza non basta. È necessario invece passare a un’altra nozione, la probabilità, anch’essa quantitativa e – come
vedremo – strettamente correlata alla frequenza. Interpretando i testi,
o qualsiasi produzione linguistica, come il risultato di un processo o
sistema probabilistico, il linguista può usare un corpus come campione di testi su cui analizzare la distribuzione delle parole e, a partire
da questa evidenza, elaborare un modello probabilistico della lingua
del corpus. Nelle sezioni che seguono, dopo una breve introduzione
al calcolo delle probabilità, approfondiremo la nozione di modello
probabilistico della lingua.
6.1
Il concetto di probabilità
Un evento che accade in maniera imprevedibile, o prevedibile solo
con un margine di incertezza, è detto aleatorio; un processo o sistema
aleatorio è un processo o sistema che produce eventi aleatori come
effetto del suo comportamento. Un tipico evento aleatorio è l’esito
del lancio di una moneta (testa o croce), o di un dado (una delle sei
facce), o ancora l’evenienza che un nome segua immediatamente l’articolo Un all’inizio di questo capoverso. In maniera analoga, il processo di lanciare una moneta è un processo aleatorio, così come una
macchina che estrae automaticamente i numeri del lotto ecc. La pro153
TESTO E COMPUTER
babilità di un evento aleatorio può essere definita come la misura del
grado di incertezza del verificarsi dell’evento. La probabilità è dunque uno strumento quantitativo che ci consente di ragionare in una
situazione di incertezza, facendo previsioni sul possibile verificarsi di
un evento. I valori della probabilità possono variare con continuità
tra 0, che quantifica l’impossibilità di un evento, e 1, il valore assunto
da un evento che accade con assoluta certezza.
6.1.1. Spazio campionario e distribuzione di probabilità
La definizione classica della probabilità passa attraverso la descrizione
di un esperimento (inteso come processo aleatorio) e dell’insieme di
tutti i suoi esiti semplici mutuamente esclusivi: ad esempio, testa e
croce nel lancio di una moneta o ciascuna delle sei facce di un dado.
Un insieme così definito è detto spazio campionario V dell’esperimento. La nozione di evento aleatorio ha una semplice definizione in termini insiemistici: dato un esperimento con uno spazio campionario
V, un evento aleatorio è un qualsiasi insieme di esiti dello spazio campionario V (ovvero un evento è un qualsiasi sottoinsieme di V). Si
distinguono due tipi di eventi:
1. eventi aleatori semplici, definiti da un insieme che contiene un solo
esito semplice dell’esperimento. Nel caso del lancio di un dado, sono
eventi semplici “ottenere un 6” o “ottenere un 2”, rispettivamente definiti dagli insiemi {6} e {2} 1. Gli eventi semplici coincidono dunque
esattamente con gli esiti che definiscono lo spazio campionario, ovvero
ci sono tanti eventi semplici quanti sono gli esiti che compongono V;
2. eventi aleatori complessi, definiti da un insieme che contiene più di
un esito semplice dell’esperimento. Nel caso del lancio di un dado,
sono eventi complessi “ottenere un numero pari” o “ottenere un numero minore di 5”, rispettivamente definiti dagli insiemi {2,4,6} e {1,2,3,4}.
L’insieme di tutti gli eventi definibili a partire da uno spazio campionario V viene detto spazio degli eventi di V 2. La probabilità è una
funzione che assegna un numero reale compreso tra 0 a 1 a ogni
evento definito su V e misura il grado di incertezza del verificarsi dell’evento. L’insieme delle probabilità di tutti gli eventi di V definisce
una distribuzione di probabilità sullo spazio di eventi di V.
Se tutti gli esiti semplici di V sono egualmente probabili (ad
1. Usiamo la normale convenzione algebrica di denotare un insieme tra parentesi
graffe.
2. Lo spazio degli eventi è dunque un insieme di insiemi, o insieme potenza di V.
154
6.
PROBABILITÀ ED ENTROPIA
esempio nel caso del lancio di un dado non truccato), allora la probabilità p(A) che si verifichi un evento A è definita nel modo seguente:
[6.1]
p(A) =
|A|
|V|
dove |V| = n è il numero totale di esiti esclusivi possibili o cardinalità
di V e |A| è invece la cardinalità dell’insieme A, ovvero il numero di
esiti che definiscono l’evento A. Una funzione di probabilità di questo tipo si dice uniforme, in quanto assegna a ciascun evento semplice
1
una probabilità uguale a
: nel caso del lancio di un dado non
|V|
truccato, gli eventi semplici “ottenere un 6” o “ottenere un 2” hanno
1
dunque entrambi probabilità . La probabilità dell’evento complesso
6
3 1
“ottenere un numero pari” è uguale a
= , poiché la cardinalità
6 2
dell’insieme definito dall’evento è 3; in maniera simile, la probabilità
4 2
dell’evento “ottenere un numero minore di 5” è = . Naturalmen6 3
te, se il dado è truccato la distribuzione di probabilità sarà non uniforme.
È facile verificare che la probabilità di un evento complesso come
“ottenere un numero pari” può essere ottenuta come la somma delle
probabilità degli eventi semplici “ottenere un 2”, “ottenere un 4” e
“ottenere un 6”:
[6.2] p({2,4,6}) = p({2}) + p({4}) + p({6}) =
1
6
+
1
6
+
1
6
=
3
6
=
1
2
Dal momento che ogni evento complesso può essere definito come l’unione 3 di eventi semplici (ad esempio l’evento complesso {2,4,6} è uguale a {2} ∪ {4} ∪ {6}), dalla [6.2] possiamo ricavare che p({2} ∪ {4} ∪ {6}) =
3. Si dice unione di due insiemi A e B l’insieme (indicato A∪B) costituito dagli
elementi che appartengono a (almeno) uno degli insiemi A e B: ad esempio, se A =
{2,4} e B = {3,4,5}, allora A∪B = {2,3,4,5}.
155
TESTO E COMPUTER
p({2}) + p({4}) + p({6}). Più in generale, vale che la probabilità dell’unione
di due eventi A e B è uguale alla somma delle loro probabilità ([6.3]) se
e solo se i due eventi A e B definiscono due insiemi disgiunti (cioè due
insiemi con intersezione vuota) 4.
p(A∪B) = p(A) + p(B)
[6.3]
Se invece i due eventi complessi presentano un’intersezione non
vuota, allora sommando le loro rispettive probabilità commetteremmo l’errore di contare l’intersezione due volte. Alla somma delle
probabilità va dunque sottratta la probabilità associata alla loro intersezione.
Dalla [6.3] consegue anche che la probabilità di un evento equivalente all’intero spazio campionario V (ovvero composto da tutti gli
esiti semplici) è uguale a 1: per tale motivo un evento siffatto, denotato con V, viene detto evento certo 5. Infatti l’evento certo è uguale a
{e1,...,en}, dove e1,...,en sono gli esiti semplici dello spazio campionario, e per la [6.3] vale la seguente equivalenza 6:
[6.4]
p(V) = p(e1) ∪...∪ p(en) =
p(e) = n ·
∀ e∈V
1
n
= 1
6.1.2. Eventi congiunti
Supponiamo ora di lanciare due volte un dado. Qual è la probabilità
di ottenere due 3 di fila? Questo equivale a calcolare la probabilità di
un evento congiunto, formato dagli eventi singoli “ottenere un 3 al
primo lancio” e “ottenere un 3 nel secondo lancio”. Lo spazio campionario V è definito questa volta dall’insieme di tutte le coppie (e1,
e2) di esiti possibili: 6·6 = 36. Se i due dadi non sono truccati, la probabilità associata all’occorrenza di una coppia specifica (e1 = 3, e2 = 3)
4. Si dice intersezione di due insiemi A e B l’insieme (indicato A∩B) costituito
dagli elementi che appartengono ad entrambi A e B: ad esempio, se A = {2,4} e B =
{3,4,5}, allora A∩B = {4}. Se A∩B = ∅ (insieme vuoto), allora A e B sono disgiunti.
5. L’opposto dell’evento certo è l’evento impossibile, uguale a ∅ (l’insieme vuoto). Qualunque sia V, p(∅) = 0.
6. Denotiamo con p(e) la probabilità dell’evento semplice costituito dall’esito e.
In [6.4] p(e) significa che vogliamo sommare i valori p(e) per ogni e che faccia
∀ e∈V
parte di V: “ ∀ e” vuol dire infatti “ogni evento e”, ed “e ∈V” si legge “e appartiene a V”.
156
6.
1
PROBABILITÀ ED ENTROPIA
1 1
· , la probabilità p(e1, e2) che e1
36
6·6 6 6
sia seguito da e2 è uguale al prodotto delle probabilità p(e1) e p(e2) dei
due eventi.
In generale, dati due eventi A e B, la probabilità dell’evento congiunto formato da A e B (convenzionalmente denotato con A, B) è
definita come segue:
sarà
[6.5]
. Dal momento che
1
=
p(A, B) = p(A) · p(B)
Si dimostra che l’uguaglianza in [6.5] vale solo nel caso in cui A e B
siano eventi statisticamente indipendenti. L’intuizione alla base del
concetto di indipendenza statistica è la seguente: se ogni evento si
può combinare con ogni altro evento, questo vuol dire che l’occorrenza del primo non influenza gli altri.
6.1.3. Probabilità e frequenza
La definizione in [6.1] permette di assegnare una probabilità a un
evento semplicemente mettendo in rapporto la cardinalità dell’evento
con la grandezza di V. Il problema è che questo modo di definire la
probabilità è appropriato solo se gli esiti di V sono equiprobabili. Se
sappiamo invece che il nostro dado è truccato, ovvero che i suoi numeri non hanno tutti uguale probabilità di uscire, sarebbe fuorviante
1
assegnare a ciascun evento semplice la stessa probabilità ( ). Come
6
facciamo dunque a quantificare la probabilità di un evento nel caso
non si possa assumere a priori che la distribuzione di probabilità sia
uniforme? Per risolvere questo problema ci viene in aiuto una nozione che abbiamo imparato a conoscere bene nel capitolo precedente,
la frequenza.
Immaginiamo di voler calcolare la probabilità di ottenere un 6
lanciando un dado che sappiamo essere truccato (ma non sappiamo
in che modo). Quello che possiamo fare è lanciare n volte il dado e
registrare per ogni lancio il numero che otteniamo. Sia f(6) la frequenza con cui è uscito il 6, ovvero il numero di volte che abbiamo
ottenuto 6; se dividiamo f(6) per n, il numero totale di lanci effettuati, otteniamo la frequenza relativa dell’evento. La definizione frequentista di probabilità ci dice che possiamo approssimare la probabilità di
un evento con la frequenza relativa del suo verificarsi in un certo numero di esperimenti. Supponiamo di aver effettuato 100 lanci del
157
TESTO E COMPUTER
dado e che per 23 volte sia uscito il 6; allora possiamo assumere che
23
= 0,23 approssima il valore della probabilità da assegnare all’e100
vento semplice “ottenere un 6”.
In questo caso la parola chiave è “approssimazione”: la definizione
frequentista di probabilità dice infatti che la probabilità di un evento
A può essere stimata come il valore a cui tende la frequenza relativa
di A, al crescere del numero delle volte in cui abbiamo eseguito l’esperimento. In termini più matematici, questo si esprime con la [6.6]
fA
, per n infiniche si legge “la probabilità di A è uguale al rapporto
n
tamente grande”.
[6.6]
p(A) = lim
n→∞
fA
n
La frequenza relativa di un evento A ci fornisce dunque una stima
empirica della probabilità di A, effettuata osservando il numero di volte in cui A si è verificato, stima la cui accuratezza dipende dal numero delle osservazioni fatte. Per tale motivo questa definizione di probabilità è anche detta a posteriori, mentre la definizione nella [6.1] è
detta a priori (o classica), perché la probabilità viene assegnata a un
evento indipendentemente da ogni osservazione empirica del suo effettivo verificarsi. È importante osservare che la definizione frequentista è solo un modo diverso per assegnare una probabilità a un evento: anche in questo caso, rimangono valide le proprietà della probabilità illustrate nelle sezioni precedenti, in particolare per quanto riguarda la probabilità di unioni di eventi e di eventi congiunti 7.
La definizione frequentista di probabilità ha un ruolo centrale in
tutti i tipi di indagini scientifiche, proprio perché permette di collegare la nozione di probabilità di un evento all’osservazione della frequenza con cui questo si verifica in una serie di esperimenti. Inoltre,
essa consente di fornire una stima della probabilità proprio nei casi
in cui non sia possibile assumere in partenza che la distribuzione di
probabilità è uniforme. In realtà, infatti, il linguaggio – come la mag7. Un altro modo di definire la probabilità è quello cosiddetto soggettivista o
bayesiano. In questa prospettiva la probabilità di un evento aleatorio può essere definita come una misura del nostro grado di fiducia (aspettativa) che l’evento in questione
si verifichi. L’incertezza è invece l’inverso dell’aspettativa. Maggiore è la probabilità di
un evento, minore è la quantità di incertezza che l’accadere dell’evento rimuove.
158
6.
PROBABILITÀ ED ENTROPIA
gior parte dei fenomeni naturali – si comporta un po’ come un “dado
truccato”: il linguista sa che c’è un “trucco”, perché le probabilità
degli eventi linguistici non sono uniformi, e il suo obiettivo è proprio
cercare di ricostruire dove il trucco risieda, ovvero costruire un modello di come si verificano gli eventi.
6.2
Lingua e probabilità
6.2.1. Modelli stocastici
Una metodologia comune in molti ambiti delle scienze (naturali e sociali) per comprendere e spiegare la dinamica di un certo fenomeno o
comportamento consiste nell’assumere che esso sia prodotto da un
processo o sistema aleatorio. In questo modo è possibile usare la nozione di probabilità per costruire un modello – appunto detto modello
probabilistico o stocastico – che descriva il comportamento del sistema
e dunque ci permetta di spiegarne, ed eventualmente predirne, certe
manifestazioni. Per fare un esempio di questo modo di procedere,
torniamo dal nostro scienziato naturalista, che nel PAR. 1.1.1 avevamo
lasciato intento a raccogliere dati o osservazioni per lo studio del
comportamento animale. Immaginiamo che l’oggetto specifico delle
sue ricerche siano le abitudini di caccia del leone. Il leone caccia vari
tipi di animali in periodi e in circostanze diverse, spesso in maniera
del tutto imprevedibile, almeno in apparenza. Obiettivo dello scienziato è vedere quale sia la “regola” sottostante a questo comportamento di caccia. Si tratta dunque di rispondere a domande del tipo:
da cosa dipende la scelta di una certa preda? È possibile prevedere
quale preda l’animale sceglierà in una data occasione?
Ciò che lo scienziato può fare per rispondere a questi interrogativi è assumere che il comportamento di caccia del leone sia regolato
da una sorta di sistema probabilistico (o stocastico): il singolo evento
in cui l’animale sceglie una particolare preda invece che un’altra può
essere dunque visto come il prodotto di questo sistema. Spiegare il
comportamento dell’animale significa allora costruire un modello di
come questo sistema probabilistico funziona e degli eventi che di volta in volta esso produce: in questo caso, la scelta delle prede.
Per costruire un tale modello lo scienziato si basa sulle osservazioni che ha compiuto sul comportamento di caccia del leone, registrando i tipi diversi di prede e le circostanze in cui vengono cacciate.
Così facendo, possono cominciare a emergere, dall’apparente caos
iniziale, delle chiare preferenze. Ad esempio, il leone osservato ha la
159
TESTO E COMPUTER
tendenza a cacciare gazzelle nella stagione secca e invece gnu nel periodo delle piogge, anche se ovviamente il nostro animale in realtà
non disdegna altre prede in caso di necessità. Il passo successivo è
dunque usare i dati osservati e la loro frequenza per stimare la probabilità (secondo la definizione frequentista del PAR. 6.1.3) che il leone
cacci un certo tipo di animale. Quello che lo scienziato ottiene è, a
questo punto, un modello probabilistico (o stocastico) del sistema che
regola la scelta della preda da parte del leone. Un modello probabilistico è un modello che assegna una certa probabilità agli eventi prodotti
da un sistema probabilistico. Nel nostro caso specifico, il modello assegna una probabilità alla selezione, da parte del leone, di un certo
tipo di animale come sua preda. Ad esempio, il nostro modello assegnerà alla gazzella la massima probabilità di essere scelta come preda
del leone nella stagione estiva, mentre assegnerà la probabilità massima allo gnu come preda nella stagione delle piogge. Così facendo, lo
scienziato ottiene un modello del sistema che regola la scelta della
preda, modello che gli consente di fare delle previsioni sul comportamento del leone in una particolare situazione. Se il modello è corretto potremo ad esempio prevedere che, nella stagione secca, davanti a
una gazzella e a uno gnu è molto più probabile che il leone scelga la
prima come suo pasto.
Generalizzando l’esempio, è possibile spiegare un fenomeno assumendo che esso sia il prodotto di un sistema aleatorio, di cui costruiamo un modello probabilistico partendo da un corpus di osservazioni del comportamento del sistema. Questo corpus di osservazioni prende generalmente il nome di corpus di addestramento (training
corpus), poiché i dati da esso estratti sono usati per addestrare il modello, ovvero stimare le probabilità del verificarsi degli eventi prodotti
dal sistema (nel caso del leone, le sue possibili prede). La bontà del
modello viene poi valutata in base alla sua capacità di prevedere in
maniera corretta il comportamento futuro del sistema, ovvero di prevedere in che forma si presenterà il fenomeno da spiegare. Un elemento chiave di questa metodologia è chiaramente il grado di generalità del modello: ciò a sua volta dipende dalla rappresentatività del
corpus di addestramento rispetto alla tipologia del fenomeno da spiegare (cfr. Scheda on line 1.1). Tornando al caso del leone, il modello
sviluppato dallo scienziato potrà essere generalizzato ad altri leoni in
maniera affidabile, solo se sono state usate come dati di partenza osservazioni effettivamente rappresentative del comportamento di caccia di questi animali.
Come si è detto all’inizio, tale metodologia è del tutto generale e
comune a vari settori della scienza e può essere, come tale, applicata
160
6.
PROBABILITÀ ED ENTROPIA
anche allo studio della lingua. Alla base di questa applicazione sta
l’assunzione che la lingua stessa possa essere vista come un sistema
probabilistico. Vediamo più in dettaglio cosa questo significhi.
6.2.2. Modelli linguistici stocastici
Da un punto di vista probabilistico, un testo (inteso come una qualsiasi produzione linguistica dei parlanti) può essere visto come una
sequenza e1, e2, ... ei ... eT di eventi aleatori semplici (non necessariamente indipendenti), ciascuno dei quali rappresenta l’occorrenza di
una parola specifica. Ad esempio, preso come testo di riferimento il
frammento (artatamente semplice) dell’esempio 6.1, avremo che
e1 = Il, e2 = cane, e11 = mangia e così via. Indichiamo con p(ei = v) – ad
esempio p(ei = cane), talvolta per semplicità abbreviata con p(cane) –
la probabilità che la parola tipo v ricorra come l’i-esimo evento del
testo.
ESEMPIO
6.1
Il1 cane2 dorme3 qui4 il5 cane6 dorme7 lì8 il9 cane10 mangia11 qui12 il13 gatto14 mangia15 lì16 un17 gatto18 dorme19 qui20 un21 gatto22 dorme23 lì24 un25
gatto26 mangia27 qui28 un29 gatto30 mangia31 lì32 il33 cane34 mangia35 qui36
un37 cane38 mangia39 lì40...
Il parlante/autore di un testo, con la sua grammatica e conoscenze
delle regole e convenzioni della lingua, può dunque essere visto come
il sistema probabilistico (o aleatorio) che ha prodotto la sequenza di
singoli eventi aleatori che costituiscono il testo. Più in generale una
lingua, come insieme dei testi prodotti dai suoi parlanti, è definibile
come una sequenza potenzialmente infinita di eventi generati da un
sistema aleatorio. Una descrizione della lingua come sistema probabilistico consiste così nella creazione di un modello linguistico stocastico
(o language model tout court) del sistema che genera le sequenze di
parole della lingua (per tale motivo questi modelli sono anche detti
generativi).
Dato un testo specifico T, un modello linguistico stocastico (MLS) è
in grado di associare a T una probabilità p(T) compresa tra 0 e 1. È
ragionevole interpretare questo valore come la probabilità di ritrovare, in una popolazione di testi potenzialmente infinita, esattamente la
sequenza di parole in T, o come una misura del nostro grado di fiducia che un parlante possa produrre proprio T. Le sequenze di parole
161
TESTO E COMPUTER
che troviamo nei testi non sono infatti prodotte a caso. Le parole si
susseguono una dopo l’altra secondo vincoli linguistici di varia natura: le regole sintattiche della lingua, le proprietà semantiche delle sue
espressioni, fino a includere convenzioni d’uso e circostanze pragmatiche. Le sequenze di parole non hanno dunque tutte la stessa probabilità di essere prodotte. Ad esempio, la sequenza Pinocchio è un burattino di legno ha sicuramente una probabilità maggiore di essere
prodotta della sequenza di parole un di Pinocchio legno burattino è
oppure della sequenza Pinocchio sono un burattini di legno oppure
della sequenza Pinocchio legge un burattino. Infatti, mentre la prima
soddisfa vincoli sintattici e semantici dell’italiano, le altre tre sequenze non sono grammaticalmente corrette (rispettivamente viene violato
l’ordine delle parole, l’accordo grammaticale e i principi di selezione
semantica).
Esiste quindi una relazione tra il grado di correttezza grammaticale di una frase e la probabilità che la stessa frase sia effettivamente
enunciata. Un campione rappresentativo di testi di una lingua può
dunque essere usato come corpus per addestrare un MLS del sistema
che ha generato il campione. Il modello sarà tanto più accurato quanto più sarà capace di fornirci delle previsioni corrette su quali sono le
sequenze di parole grammaticali della lingua dei testi del corpus, ovvero se assegnerà a esse una probabilità maggiore rispetto a sequenze
che non appartengono a quella lingua (in quanto violano le regole e i
vincoli che la governano). Ad esempio, un MLS dell’italiano dovrebbe
essere in grado di assegnare alla sequenza Pinocchio è un burattino di
legno una probabilità maggiore di quella che lo stesso modello assegna alla sequenza un di Pinocchio legno burattino.
Nella pratica, ricostruire il vero MLS responsabile della generazione di un testo o di un repertorio di testi è spesso un obiettivo difficile da raggiungere, perché il numero di informazioni necessarie per
definire il modello può essere così grande che i dati osservabili non
sono sufficienti a offrirle tutte. Questo vuol dire, innanzitutto, che l’evidenza che abbiamo a disposizione può essere inadeguata per sviluppare un particolare modello. In secondo luogo, dobbiamo avere
cura che la ricerca del migliore MLS compatibile con i dati osservati
avvenga per approssimazioni graduali. Infatti, il modello migliore non
è necessariamente quello che assegna la massima probabilità ai dati
osservati. Paradossalmente, un MLS in grado di generare i testi conosciuti di un certo autore con assoluta certezza (probabilità = 1), assegnerebbe probabilità zero a una nuova opera dello stesso autore, o a
un suo frammento inizialmente ritenuto disperso e poi ritrovato. Ana162
6.
PROBABILITÀ ED ENTROPIA
logamente a quanto accade con le grammatiche generative, l’adeguatezza di un MLS deve essere valutata sulla base della sua capacità di
generare un insieme molto grande di testi, con la più alta probabilità
possibile di generare i dati già noti. In altre parole, dobbiamo sempre
considerare l’insieme di testi su cui impostiamo un MLS come un campione di una popolazione potenzialmente infinita di testi. Un MLS che
assegni a un campione di frasi una probabilità molto vicina a 1 avrebbe altrettanto poco senso di una grammatica in grado di analizzare (o
generare) soltanto quel campione. Infatti, il valore del modello risiede
proprio nella sua generalità, ovverosia nella capacità di farci fare previsioni su nuovi dati, diversi da quelli su cui è stato addestrato.
6.3
Modelli markoviani
Com’è possibile assegnare una probabilità a una sequenza potenzialmente infinita di parole? In prima approssimazione, possiamo ipotizzare che la probabilità di generare un testo sia uguale al prodotto della probabilità di generare ognuna delle sue frasi (non diversamente
da come la probabilità di ottenere due 6 lanciando due volte un dado
è uguale al prodotto della probabilità di ottenere un 6 al primo lancio per la probabilità di ottenere un altro 6 al secondo lancio). A sua
volta, la probabilità di generare una singola frase può essere espressa
come una funzione della probabilità delle sue parole.
In questa sezione analizzeremo le proprietà di una famiglia di
MLS, noti come modelli markoviani o catene markoviane (dal nome
del matematico russo Andrei Markov, 1856-1922), che si distinguono
proprio per il modo in cui è definita questa funzione. In generale, i
modelli markoviani stimano la probabilità di una parola a partire da
un certo numero di parole che la precedono direttamente nel testo. Il
cosiddetto ordine del modello markoviano specifica il numero esatto
di parole che il modello prende in considerazione: nel caso di un modello del primo ordine solo la parola immediatamente precedente, nel
modello del secondo ordine le prime due, nel modello di terzo ordine le prime tre e così via. L’ordine definisce anche il grado di complessità del modello markoviano. Nei prossimi paragrafi vedremo
come sia possibile impostare l’MLS di un testo per approssimazioni
successive, passando da un modello markoviano di ordine inferiore a
uno di ordine superiore.
Adottando la definizione frequentista di probabilità, useremo la
frequenza relativa con cui le parole si distribuiscono nel testo campio163
TESTO E COMPUTER
ne per stimare le probabilità che il modello assegna agli eventi semplici. Si dimostra che questo equivale a rendere massimamente probabili le sequenze effettivamente osservate nel campione. Supponendo
che Le avventure di Pinocchio sia il nostro corpus di addestramento,
ad esempio, il fatto di usare la frequenza relativa di burattino nel libro di Collodi come stima della probabilità di trovare burattino in un
testo qualsiasi non vuol dire che questa stima sia la migliore possibile.
Tuttavia, essa è sicuramente la stima che rende più probabile il fatto
di trovare burattino 195 volte in un testo grande come Pinocchio. Il
metodo di stima appena descritto, noto come metodo di massima verosimiglianza, equivale ad addestrare un MLS su Pinocchio. Per ragioni
didattiche, tuttavia, invece di Pinocchio useremo per addestramento
un testo di laboratorio (l’esempio 6.1), il cui modello sottostante ci è
già noto in partenza.
6.3.1. Il modello base: l’urna lessicale
L’esempio in assoluto più semplice di modello markoviano si basa sull’ipotesi che la probabilità di una frase sia uguale al prodotto della probabilità di generare ciascuna delle sue parole in modo indipendente.
Siccome questa ipotesi equivale a rappresentare l’inserimento di una
parola nel testo come il risultato dell’estrazione di una “pallina lessicale” da un’urna, chiameremo l’MLS corrispondente modello a urna.
Immaginiamo di descrivere un testo come il risultato dell’estrazione ripetuta di parole da un’urna lessicale. A ogni istante, una singola
parola è estratta dall’urna. Il risultato dell’estrazione è una parola
specifica che viene registrata su un foglio, accanto ai risultati delle
estrazioni precedenti. La parola è poi reinserita nell’urna di partenza.
Secondo questo modello, un testo è dunque una sequenza di singole
parole statisticamente indipendenti l’una dall’altra. In LC, un modello
così fatto è anche noto come catena markoviana di ordine zero, a significare che l’evento che ricorre nell’istante i non ha memoria dell’evento incontrato nell’istante precedente (ipotesi di indipendenza). Proviamo ora a immaginare un’urna lessicale che possa aver generato il
testo dell’esempio 6.1.
Addestramento del modello
Ogni pallina lessicale ha la stessa probabilità di essere estratta. Tuttavia, la composizione dell’urna, e cioè il modo in cui le palline si associano a tipi lessicali diversi, non può essere uniforme. Le palline asso164
6.
PROBABILITÀ ED ENTROPIA
ciate a un tipo lessicale assai frequente nel testo (ad esempio di) dovranno essere più numerose di quelle associate a un tipo lessicale più
raro (ad esempio birichino). Questa intuizione si traduce nell’idea che
la composizione dell’urna è un parametro libero del modello, che va
stimato sulla base dell’evidenza distribuzionale delle parole nel corpus
di addestramento. In questo modo, la nostra stima della composizione dell’urna rende massimamente probabili le distribuzioni osservate
nel corpus (secondo il metodo di stima di massima verosimiglianza).
Naturalmente, è necessario che il testo sia effettivamente rappresentativo della sua popolazione e sufficientemente ampio da consentire stime affidabili. Supporremo che il testo dell’esempio 6.1 risponda a
questi requisiti.
Il testo contiene soltanto otto tipi diversi di parole: due nomi
(cane e gatto), due verbi (dorme e mangia), due articoli (il e un) e
infine due avverbi (qui e lì). Guardando alla distribuzione delle parole, notiamo che ogni parola tipo ha la stessa frequenza relativa. Ipotizziamo allora che anche nell’urna le parole tipo siano distribuite in
modo uniforme. Ecco un esempio di cosa potremmo generare con
queste ipotesi:
ESEMPIO
6.2
cane lì il il dorme gatto qui mangia mangia dorme lì cane gatto qui qui mangia il dorme cane lì cane il qui il gatto dorme lì ...
Il testo ottenuto è una brutta copia dell’originale. La probabilità di
ottenere una sequenza come il gatto dorme lì con questo modello è
infatti uguale al prodotto delle probabilità dei singoli eventi che la
compongono, 1/8·1/8·1/8·1/8 = 1/212, ed è quindi uguale alla probabilità di ottenere una qualsiasi permutazione delle stesse parole. Analogamente, il modello è in grado di produrre esattamente il testo dell’esempio 6.1 con probabilità uguale a
[6.7] p(T) = p(il) · p(cane) ·...· p(mangia) =
1
·
1
·...·
1
8 8
8
1442443
=
1
2120
40 volte
Questa probabilità è davvero molto piccola in rapporto alle dimensioni del lessico del modello.
165
TESTO E COMPUTER
6.3.2. Probabilità condizionate
e catene markoviane del primo ordine
Il risultato del paragrafo precedente non è sorprendente. Una sequenza di parole nel testo non è il risultato di una serie di estrazioni
casuali (con reinserimento) da un’urna lessicale. Le parole non si
combinano tra loro con la stessa probabilità, indipendentemente dal
contesto. La scelta di una parola modifica lo spazio di probabilità relativo alla scelta lessicale successiva. La probabilità di ottenere la sequenza il cane, ad esempio, è uguale al prodotto della probabilità di
estrarre il dalla nostra urna iniziale per la probabilità di estrarre cane
una volta che il sia già stato estratto. Questo tipo di probabilità si
esprime in modo generale come segue:
[6.8] p(ei = il , ei + 1 = cane) = p(ei = il) · p(ei + 1 = cane | ei = il)
Nella [6.8], p(ei + 1 = cane | ei = il) è chiamata probabilità condizionata e
la barretta verticale “|” si legge “dato l’evento”. L’uso degli indici relativi i e i + 1 ci ricorda che stiamo considerando la sequenza il cane
indipendentemente dal punto esatto in cui essa ricorre nel testo. Siamo cioè interessati a probabilità di coppie tipo di parole adiacenti, o
bigrammi tipo. Da questo punto di vista (e1 = il, e2 = cane), (e15 = il,
e16 = cane) e (e371 = il, e372 = cane) sono tutte unità dello stesso tipo di
bigramma 8.
Ritorniamo al nostro esempio 6.1, per osservare che il può essere
seguito soltanto da cane o gatto senza una particolare preferenza per
l’uno o per l’altro. Questo ci autorizza ad affermare che, dato il nostro
testo,
[6.9]
p(ei = il) · p(ei + 1 = cane | ei = il) =
1
8
·
1
2
=
1
16
Usando le probabilità condizionate, possiamo esprimere la probabilità
della successione di due parole in modo del tutto generale come la
probabilità non condizionata della prima parola moltiplicata per la
probabilità condizionata della seconda parola, data la prima:
8. L’ipotesi alla base di questo modo di contare è che la probabilità che il bigramma il cane ricorra in una certa posizione i del testo non è funzione di i. Una
distribuzione di probabilità che soddisfi questa ipotesi è detta stazionaria o indipendente rispetto al tempo.
166
6.
[6.10]
PROBABILITÀ ED ENTROPIA
p(ei = vk, ei + 1 = vj) ≡ p(ei = vk) · p(ei + 1 = vj | ei = vk),
dove vk e vj sono due parole tipo specifiche. Se le due parole in questione sono positivamente correlate, l’occorrenza della prima nel testo
aumenta la probabilità che la seconda segua. Pertanto, p(ei + 1 = vj |
ei = vk) > p(ei + 1 = vj). In caso di correlazione negativa, la prima tenderà a escludere l’occorrenza della seconda e quindi p(ei + 1 = vj | ei = vk)
< p(ei + 1 = vj). Infine, nell’ipotesi di indipendenza p(ei + 1 = vj | ei = vk) = p(ei + 1 = vj), la probabilità di due eventi indipendenti congiunti torna a essere uguale al prodotto delle probabilità dei singoli eventi. È
importante osservare che la [6.10] è una generalizzazione della definizione di probabilità congiunta data nella [6.5]. Si può infatti affermare
che dati due eventi qualsiasi A e B, vale sempre che:
[6.11]
p(A, B) = p(A) · p(B|A)
Otteniamo la [6.5] come caso particolare della [6.11] quando assumiamo che A e B sono indipendenti. Infatti, in questo caso, si ha che
p(B|A) = p(B), cioè A non ha influenza su p(B). Nel PAR. 7.4.1, sfrutteremo queste proprietà per ricercare nel testo coppie coese di parole.
Intuitivamente, la nozione di probabilità condizionata quantifica
quella porzione di incertezza di un evento che è indipendente (e dunque non prevedibile) rispetto all’occorrenza dell’evento che lo precede. Ad esempio, la presenza dell’articolo il ci consente di predire che
ciò che segue sarà (con buona probabilità) un nome, ma non di quale
nome si tratta. Nel nostro esempio, l’incertezza rimanente si divide in
parti uguali, 0,5 e 0,5, tra cane e gatto. Infine, la formula di scomposizione di due eventi congiunti può essere generalizzata al caso di n
eventi congiunti, dando origine allo sviluppo a catena della [6.12],
dove pMLS(ei, ei + 1, ..., ei + n) indica la probabilità che uno specifico MLS
assegna alla sequenza in questione. Questo sviluppo offre un MLS più
sofisticato di quello visto nel PAR. 6.3.1: una catena markoviana del primo ordine.
[6.12]
pMLS(ei + 1, ei + 2, ..., ei + n) ≡ p(ei + 1) ·
· p(ei + 2 | ei + 1) · ... · p(ei + n | ei + n–1)
Con l’aiuto della [6.12] siamo in grado di approssimare la probabilità
di un’intera sequenza di n parole come prodotto di probabilità condizionate di una parola, data la parola immediatamente precedente. Nel
caso del testo T dell’esempio 6.1, la [6.12] diventa
167
TESTO E COMPUTER
[6.13]
pMLS(T) = p(il)·p(cane | il) ·...· (lì | mangia) =
1
·
1
·...·
1
8 14243
2
2
=
1
242
39 volte
Si noti, per inciso, che il valore così ottenuto è significativamente
maggiore della probabilità di produrre lo stesso testo con il modello a
urna ([6.7]).
Addestramento del modello
Vediamo infine come possiamo stimare sul testo le probabilità condizionate p(ei + 1| ei). Iniziamo intanto a vedere che dalla [6.11] possiamo
definire la probabilità condizionata p(ei + 1| ei) come segue:
[6.14]
p(ei + 1 | ei) =
p(ei, ei + 1)
p(ei)
Per stimare la probabilità p(ei, ei + 1), usiamo la frequenza relativa del
bigramma tipo ei, ei + 1 (per tale motivo i modelli markoviani del primo ordine sono anche detti modelli a bigrammi), mentre per stimare
p(ei), usiamo la frequenza relativa di ei nel testo. La [6.14] può essere
poi riscritta e semplificata nel modo seguente:
f(ei, ei + 1)
[6.15]
p(ei + 1 | ei) ≈
|T|
f(ei)
=
f(ei, ei + 1)
f(ei)
|T|
Per calcolare p(ei + 1 = cane | ei = il), contiamo dunque innanzitutto
quante volte ricorre la sequenza il cane nell’esempio 6.1. Indichiamo
questa frequenza con f(ei = il, ei + 1 = cane) o, più semplicemente, f(il,
cane). Allo stesso modo, chiamiamo f(ei = il), o f(il), la frequenza di il
in tutto il testo. Una stima di massima verosimiglianza della probabilità condizionata p(ei + 1 = cane | ei = il) è uguale al numero di volte che
troviamo cane immediatamente dopo il, diviso per tutte le volte che
troviamo il, e cioè
168
6.
[6.16]
PROBABILITÀ ED ENTROPIA
p(ei + 1 = cane | ei = il) ≈
f(il, cane)
f(il)
=
1
2
.
Come anticipato, p(cane | il) > p(cane). La presenza di il nel testo fa
ovviamente aumentare la probabilità di trovare cane subito dopo. Si
noti, per inciso, che f(il) è uguale alla somma della frequenza di tutti
i bigrammi che contengono il come primo elemento e cioè
[6.17]
f(ei = il) = f(ei = il, ei + 1 = vx),
vx∈V
dove V è il vocabolario espresso dal testo di riferimento. Si noti infine che, in generale, il numero di bigrammi unità in un testo può essere reso uguale al numero complessivo di token T, se aggiungiamo
alla fine del testo un token “di chiusura”.
6.3.3. Oltre le catene del primo ordine
Nei paragrafi precedenti siamo passati da un modello probabilistico
del testo come sequenza di eventi indipendenti di estrazione lessicale,
a un modello più complesso, in cui la selezione di una parola è condizionata dal risultato della scelta lessicale compiuta al passo precedente. Nel modello markoviano del primo ordine, si deve registrare
soltanto l’ultimo evento in ordine di tempo, per poter ragionevolmente prevedere cosa succederà nell’istante successivo. Ha senso, dal
punto di vista linguistico, incrementare ulteriormente l’ordine di questa catena di parole per ricordarsi le ultime due, tre, quattro o n parole unità?
Il testo dell’esempio 6.1 è generato proprio da una catena di Markov del primo ordine. La scelta di un nome dipende solo dall’articolo
che lo precede immediatamente, quella di un verbo dal nome alla sua
sinistra e via dicendo. Ci aspettiamo pertanto che addestrare su questo testo una catena di Markov di ordine superiore al primo non porti alcun vantaggio apprezzabile in termini di stima della probabilità di
produrre l’esempio 6.1, come vedremo nel prossimo paragrafo. Qui,
invece, vogliamo porci la domanda se, in generale, un modello markoviano del primo ordine sia un buon modello stocastico dell’italiano. La risposta è no.
Per capire il perché, è sufficiente osservare che la correttezza delle
frasi nell’esempio 6.1 si deve all’interazione di due fattori: l’estrema
169
TESTO E COMPUTER
povertà del vocabolario del modello (solo 8 parole tipo) e l’arbitraria
semplicità della sua sintassi. Il modello infatti non è in grado di generare una sequenza perfettamente legittima di categorie grammaticali
come un verbo preceduto da un avverbio, come nella frase il cane
spesso dorme. Supponiamo allora di voler includere queste sequenze
nel nostro modello, assegnando loro probabilità non nulle. Supponiamo inoltre che il vocabolario del modello contenga, oltre alle forme
gatto, cane, dorme e mangia, anche le forme gatti, cani, i, dormono e
mangiano. Queste due semplici estensioni rendono un modello markoviano del primo ordine inadeguato a descrivere le frasi corrette.
Per la regola dell’accordo grammaticale, infatti, cane, in funzione di
soggetto, si può accordare a distanza con dorme (o mangia), ma non
con dormono (o mangiano). Interponendo un avverbio tra cane e dorme, un modello markoviano del primo ordine è costretto a predire la
forma del verbo sulla base dell’informazione relativa all’avverbio immediatamente precedente. Così facendo, a una sequenza come il cane
spesso mangia il modello assegna la stessa probabilità di *il cane spesso mangiano. Una mancanza di preferenza alquanto grave per un modello del linguaggio!
Addestramento del modello
Dimentichiamo per un attimo queste mancanze e proviamo ad addestrare un modello markoviano del secondo ordine sull’ESEMPIO 6.1.
Questo richiede che la probabilità di una parola nel testo sia stimata
sulla base delle due parole che la precedono. La formula [6.18] ci
dice come stimare le probabilità condizionate del secondo ordine sulla base di un testo di riferimento.
[6.18]
p(ei + 2 | ei, ei + 1) ≈
f(ei, ei + 1, ei + 2)
f(ei, ei + 1)
dove f(ei, ei + 1, ei + 2) indica la frequenza di una qualsiasi tripla di parole adiacenti o trigramma tipo. Infine, approssimare la probabilità di
una sequenza di parole nel testo con un modello markoviano del secondo ordine significa rimpiazzare l’equazione [6.12] con la seguente:
[6.19]
pMLS(e1, e2, ..., ei, ..., ek–1, ek) ≡ p(e1) · p(e2 | e1) ·
· p(ei | e1, e2) ·...· p(ek | ek–1, ek–2)
170
6.
PROBABILITÀ ED ENTROPIA
Se usiamo la [6.19] per produrre il testo dell’esempio 6.1, otteniamo
[6.20]
pMLS(T) = p(il) · p(cane | il) · p(dorme | il, cane)... · (lì | cane, mangia) =
=
1
8
·
1
2
·
1
·...·
1
2
2
14243
=
1
242
38 volte
con un risultato identico a quanto già ottenuto con la catena markoviana del primo ordine dello stesso testo ([6.13]).
Riassumendo, le catene di Markov definiscono una famiglia di
modelli linguistici di complessità crescente, in funzione della loro capacità di “memorizzare” le parole già viste del testo, ovvero di rappresentare nel modello probabilistico legami di dipendenza tra più
parole nel testo. Ciascuno di questi modelli presuppone uno spazio
di eventi semplici suo proprio: le singole parole per il modello di ordine 0; i bigrammi per il modello di ordine 1, i trigrammi per il modello di ordine 2 e via di questo passo. In teoria, non esistono limiti
alla lunghezza degli eventi semplici: è per questo che i modelli markoviani sono anche noti come modelli a n-grammi.
In pratica, tuttavia, diventa presto difficile ottenere una stima accurata delle distribuzioni degli n-grammi al crescere di n. Quanto più
lunghe sono le sequenze di parole, tanto più piccola è la probabilità
di trovarle, perché i loro tipi tendono a moltiplicarsi enormemente.
La stima di probabilità molto piccole rende dunque indispensabile il
ricorso a testi molto grandi, con i problemi noti di rarità del dato e
di code zipfiane (PARR. 1.4.4 e 5.5). Sebbene, a differenza del recente
passato, le risorse di calcolo automatico e di memoria di massa oggi
disponibili hanno ridotto l’impatto del problema, è in genere sempre
buona norma commisurare la complessità del modello alla quantità di
dati che il corpus di addestramento è in grado di offrire. Il rischio
che altrimenti si corre è quello di sviluppare un modello del tutto ad
hoc, che riflette soltanto le caratteristiche distribuzionali specifiche del
corpus sul quale il modello è addestrato.
6.4
Linguaggio ed entropia
Finora ci siamo limitati a una valutazione qualitativa e impressionistica della bontà del modello, basata sulla verosimiglianza linguistica del testo che il modello produce. È possibile stimare l’accuratez171
TESTO E COMPUTER
za dell’approssimazione del testo da parte dell’MLS in modo più rigoroso? Gli studi del matematico e ingegnere elettronico Claude
Shannon (1916-2001) sulla teoria dell’informazione e la nozione di
entropia ci consentono di dare una risposta affermativa a questa domanda. L’interesse che questa risposta ha per un linguista computazionale è soltanto secondariamente legato al rigore matematico sul
quale si fonda la teoria dell’informazione. Molto più rilevante, secondo noi, è la considerazione che la teoria dell’informazione ci
consente di collegare nozioni apparentemente distanti tra loro quali
la capacità predittiva di un MLS, la teoria della codifica e il cosiddetto rasoio di Occam.
L’entropia nasce come misura del valore informativo di una classe
di eventi esclusivi. Secondo una vecchia massima giornalistica, un
cane che morde un uomo non fa notizia, ma un uomo che morde un
cane fa notizia. Gli eventi rari contengono dunque maggiore informazione degli eventi più probabili. Periodicità, ripetizioni o correlazioni
di varia natura rendono gli eventi più prevedibili e quindi, in ultima
analisi, meno informativi 9. Quanto più piccola è la probabilità, tanto
più grande è dunque l’informazione. Nella sua espressione più generale, l’entropia è una media calcolata sulla distribuzione di probabilità
di un insieme di eventi aleatori mutuamente esclusivi. Più esattamente, è una media del logaritmo (in base 2) dell’inverso delle probabilità
della distribuzione.
Perché il logaritmo in base 2? Questo aspetto ha a che vedere
col legame profondo che esiste tra la nozione di entropia e la teoria
della codifica digitale in bit. Nel PAR. 2.3 abbiamo osservato che,
dati n bit, il numero k delle loro possibili combinazioni è uguale a
2n; dunque, dato un certo numero k di parole tipo da codificare in
bit, log2k è uguale al numero minimo n di bit necessari per codificare in modo univoco tutte le k parole, usando una codifica a lunghezza fissa. Più in generale, si dimostra che l’entropia esprime la
lunghezza media minima di una serie di messaggi in cui le parole
più frequenti ricevono una codifica più corta e quelle più rare una
codifica più lunga (codifica a lunghezza variabile, cfr. Scheda on line 6.1). Come tutte le medie, l’entropia ci consente, come vedremo,
di descrivere in modo sintetico il comportamento di un’intera distribuzione.
9. Per la stessa ragione, nel CAP. 5 abbiamo osservato che parole molto frequenti
come quelle grammaticali dicono poco o nulla del contenuto di un testo. Da questo
punto di vista, sono molto più utili le parole piene e, tra queste, quelle più rare.
172
6.
PROBABILITÀ ED ENTROPIA
6.4.1. Vocabolario ed entropia
Definiamo l’entropia puntuale h dell’evento “parola tipo v” in questo
modo:
h(v) = log2 [
[6.21]
1
p(v)
],
dove p(v) può essere interpretata come la probabilità di trovare v in
1
un testo T. Se, ad esempio, la parola cane ha probabilità 3 , allora
2
h(cane) = log2 23 = 3.
Tipicamente, non siamo interessati all’entropia di una singola parola v (con la v minuscola) ma piuttosto all’entropia media di una
classe V (con la V maiuscola) di parole: ad esempio, tutto il vocabolario VT di un testo T. Possiamo ottenere H(VT) calcolando una media
di ogni h(vi) in T:
f(vi) · h(vi)
H(VT) =
[6.22]
∀ vi∈VT
|T|
dove f(vi) è la frequenza con cui vi ricorre in T e la lunghezza |T| è la
f(vi)
approssima la p(vi) in
somma di tutte le f(vi). Se assumiamo che
|T|
T, allora la [6.22] si può riscrivere come segue:
[6.23]
H(VT) =
p(vi) · h(vi),
∀ vi∈VT
che è la formula classica dell’entropia. Applicando la [6.22] all’esem1
pio 6.1, avremo pertanto, nell’ipotesi di equiprobabilità p(vi) = ,
8
8
[6.24]
p(vi) · h(vi) = ∀ vi∈V
i=1
1
8
8
· h(vi) = i=1
1
8
·3 =
8
8
·3 = 3
L’entropia del vocabolario è, in questo caso, identica all’entropia di
ogni singola parola, in quanto la distribuzione delle singole parole nel
testo è uniforme.
173
TESTO E COMPUTER
Supponiamo ora che una parola tipo del vocabolario sia più probabile delle altre e che ricorra in media una volta ogni 2 parole (pro1
babilità
), mentre le altre rimangono equiprobabili (probabilità
2
1
). L’entropia di un vocabolario di 8 parole con questa distribuzio14
ne sarebbe dunque
[6.25]
p(vi) · h(vi) =
∀ vi∈V
1
2
7
· (log22) + i=1
1
14
· h(vi) =
1
2
+
1
2
· (log214) < 3
L’entropia di un vocabolario con distribuzione non uniforme è dunque inferiore all’entropia di un vocabolario delle stesse dimensioni in
cui le parole si distribuiscono in modo equiprobabile. Questo risultato è valido in generale: a parità di numero di eventi, l’entropia ha
valore massimo quando gli eventi sono equiprobabili (cfr. Scheda on
line 6.2). In altre parole, una distribuzione uniforme di probabilità
crea la situazione di massima incertezza. A parità di vocabolario, il
testo in assoluto più imprevedibile è quello in cui, a ogni istante, ogni
parola può apparire con la stessa probabilità di ogni altra, senza alcun tipo di vincoli o restrizioni. Da un punto di vista linguistico, l’entropia è dunque tanto più grande quanto meno numerosi sono i vincoli che condizionano la distribuzione delle parole.
6.4.2. Testo ed entropia
Nel paragrafo precedente, abbiamo imparato a calcolare l’entropia di
parole avulse dal contesto (o entropia del vocabolario). Un testo, tuttavia, è tipicamente formato da sequenze di parole. Dal punto di vista
statistico, la nozione di sequenza di parole si traduce, come abbiamo
visto, in quella di evento congiunto: ad esempio, un bigramma, un trigramma, un quadrigramma e così via. Passando da eventi singoli a
eventi congiunti, il nostro evento diventa multidimensionale. Ad
esempio, se ci concentriamo su sequenze di due parole alla volta, la
classe di eventi alla quale siamo interessati è definita da tutte le coppie ammissibili di parole: una specie di vocabolario di bigrammi. Ma
come si passa dall’entropia di eventi singoli all’entropia di eventi
congiunti?
174
6.
PROBABILITÀ ED ENTROPIA
Entropia di eventi indipendenti
Per l’ipotesi di indipendenza statistica (PAR. 6.1.2), la probabilità dell’esito del lancio di n monete è uguale al prodotto delle probabilità di
1
ogni singolo lancio: n . A partire da questa premessa, sfruttando le
2
proprietà del logaritmo rispetto al prodotto (cfr. Scheda on line 5.1)
si arriva facilmente a dimostrare che l’entropia di n lanci di una moneta è uguale alla somma delle entropie di ogni singolo lancio:
[6.26]
H(Ei, Ei + 1, ..., Ei + n) = H(Ei) + H(Ei + 1) + .... + H(Ei + n)
dove le E maiuscole stanno a indicare, nuovamente, che ci stiamo occupando della classe di esiti possibili di ogni lancio (testa e croce) e
non di un singolo esito specifico. Se dunque l’entropia del lancio di
una moneta è uguale a log2 2 = 1, l’entropia di n lanci è uguale a n.
L’entropia, cioè, aumenta linearmente col numero di lanci. Per rendere confrontabile l’entropia delle classi di n lanci con l’entropia del singolo lancio è sufficiente dividere la prima per n. Così facendo, verifichiamo che l’entropia per lancio di una classe di sequenze di n lanci è
uguale all’entropia del singolo lancio:
[6.27]
H(Ei, Ei + 1, ..., Ei + n)
n
=
nH(Ei)
n
= H(Ei) = 1
La [6.27] vale per qualunque sequenza di eventi indipendenti, anche
se la loro distribuzione non è uniforme.
Entropia di eventi non indipendenti
Nell’ESEMPIO 6.1 ognuna delle 8 parole si distribuisce con probabilità
1
uniforme p(v) = . Se le parole si distribuissero come eventi indipen8
denti, la probabilità p(vi, vi + 1) di trovare il bigramma (vi, vi + 1) nello
1 1
1
stesso testo sarebbe
· =
e l’entropia dell’insieme dei bigram8 8 64
mi tipo, espressa come H(Vi, Vi + 1), sarebbe uguale a 6. L’esempio
6.1, tuttavia, documenta la presenza di soli 16 tipi diversi di bigram175
TESTO E COMPUTER
6.1
La distribuzione di bigrammi, trigrammi e quadrigrammi in Pinocchio
FIGUR A
10.000
8.000
6.000
4.000
2.000
×
0
0
×
×
2.000
tetragrammi
×
× ×
4.000
? trigrammi
×
×
×
×
6.000
8.000
× parole
bigrammi
mi, ciascuno con probabilità uniforme p(vi, vi + 1) =
1.0000
1
. L’entropia as16
sociata all’insieme dei bigrammi tipo attestati è dunque uguale a
log216 = 4. Questo valore è maggiore dell’entropia del vocabolario
H(VT) = 3, ma minore di H(Vi, Vi + 1). Cosa insegna questo risultato?
L’entropia della distribuzione di singole parole nel testo tende a
essere più piccola dell’entropia della distribuzione di coppie di parole
(i bigrammi). La ragione è semplice: il numero di bigrammi tipo di
un testo è generalmente maggiore del numero di parole tipo dello
stesso testo. Ad esempio, con due parole come cane e vero possiamo
formare almeno tre coppie: vero cane, cane vero, vero vero (la sequenza cane cane è decisamente poco plausibile!). Analogamente, i trigrammi tipo sono più numerosi dei bigrammi tipo e così via (cfr. FIG.
6.1). Questo incremento, tuttavia, può essere più o meno grande.
Tutto dipende dal grado di indipendenza statistica tra le parole che
formano i nostri eventi congiunti semplici. A parità di numero di bigrammi, infatti, l’entropia della loro distribuzione è massima quando
la distribuzione è uniforme (tutti i bigrammi hanno la stessa probabilità). Inoltre, maggiore sarà il numero di bigrammi, maggiore è l’entropia della loro distribuzione (in quanto si abbassa la probabilità associata a ciascun bigramma).
Cosa succede nel nostro esempio? Abbiamo visto che l’occorrenza
di una parola riduce in maniera consistente i gradi di libertà nella
176
6.
PROBABILITÀ ED ENTROPIA
selezione della parola successiva (PAR. 6.3.2). L’effetto di questa riduzione è che alcuni bigrammi (ad esempio cane qui) hanno probabilità
0 di ricorrere in T. Questo porta l’entropia della distribuzione dei
bigrammi in T a rimanere ben al di sotto del suo limite massimo (valore corrispondente all’ipotesi di indipendenza statistica tra parole).
Passando dall’intuizione alle formule, dall’equazione [6.10] ricaviamo che
[6.28]
H(Vi, Vi + 1) = H(Vi) + H(Vi + 1 | Vi) ≤ H(Vi) + H(Vi + 1),
dove H(Vi + 1|Vi) rappresenta l’entropia associata alla probabilità condizionata di una qualsiasi parola vi + 1 data una qualsiasi parola vi che
la precede nel testo. H(Vi + 1 | Vi) quantifica dunque l’informazione
nuova associata a vi + 1, che non è prevedibile a partire da vi. Riscrivendo la [6.28] come differenza, l’incremento entropico H(Vi,Vi + 1) –
H(Vi) che si ottiene passando da una distribuzione di parole singole a
una distribuzione di coppie di parole è proprio uguale a H(Vi + 1 | Vi).
La formula [6.28] si estende al caso generale, in quanto è sempre
vero che
[6.29]
H(Vi, Vi + 1, ..., Vi + n) = H(Vi, Vi + 1, ..., Vi + n–1) + H(Vi + n | Vi, Vi + 1, ..., Vi + n–1)
La [6.29] ci dice che passando dalla distribuzione di una multipla di
n – 1 parole alla distribuzione di una multipla di n parole, l’entropia
aumenta di una quantità pari all’informazione media della parola vi + n
che non è prevedibile dalle n – 1 parole che la precedono nel testo.
Che andamento segue H(Vi + n | Vi, Vi + 1, ..., Vi + n–1) al crescere di
n? La sua tendenza è verso una graduale diminuzione. Più lungo è il
contesto, maggiore è infatti il suo condizionamento sulla parola che
segue e minore il grado di incertezza che rimane. Immaginiamo, ad
esempio, un gioco in cui ci sia chiesto di indovinare una parola x nel
testo scoprendo il contesto alla sua sinistra una parola per volta: ad
esempio, ... una x, ... volare una x, ... sentiva volare una x, ... si sentiva volare una x, ... non si sentiva volare una x ecc. Dopo aver scoperto la terza parola a sinistra, un parlante nativo italiano dovrebbe
avere forti sospetti che x = mosca. Allargando la nostra finestra di
contesto, la quantità di informazione che il contesto ci fornisce riguardo alla x non può diminuire, ma non può nemmeno aumentare
all’infinito, perché da un certo punto in poi le parole che precedono
non ci danno più alcuna informazione sulla x. In termini di entropia,
177
TESTO E COMPUTER
questo vuol dire che da un certo n in poi H(Vi + n | Vi + 1, ..., Vi + n–1) e
H(Vi + n + 1 | Vi, Vi + 1, ..., Vi + n) avranno valori non nulli identici.
Quale impatto hanno queste proprietà sulla nostra analisi della distribuzione di multiple di parole in un testo di riferimento? Molto
semplicemente, possiamo andare a calcolare nel testo l’entropia di parole singole, di bigrammi, di trigrammi, di quadrigrammi e così via,
per osservare come crescono i valori di queste entropie. Ciascuna di
queste classi di eventi di crescente complessità definisce infatti un insieme di eventi aleatori mutuamente esclusivi. Da un certo punto in
poi, ci aspettiamo che lo scarto tra l’entropia calcolata su sequenze di
n parole e l’entropia calcolata su sequenze di n + 1 parole non diminuisce più. Per quanto detto finora, questo vuol dire che allargare la
nostra finestra di contesto non serve. La catena di condizionamenti
che ci consente di predire l’occorrenza della parola corrente ha avuto
termine. Diventa superfluo guardare ancora più indietro.
Torniamo al nostro esempio 6.1. L’entropia del vocabolario del
testo è, come abbiamo visto, uguale a 3. Passando all’entropia delle
coppie di parole (bigrammi), si arriva a 4. Lo scarto tra le due entropie è 1. Calcoliamo ora l’entropia sulle triple di parole attestate nell’esempio 6.1: il risultato sarà 5. Ma, un momento! Lo scarto H(Vi + 2
| Vi, Vi + 1) tra l’entropia dei trigrammi e quella dei bigrammi è identico allo scarto H(Vi + 1 | Vi) tra l’entropia di bigrammi e quella del vocabolario! Passando da coppie a triple di parole non abbiamo migliorato la nostra capacità di predire la parola corrente sulla base delle
parole che la precedono. Questo andamento è confermato se proviamo a calcolare anche l’entropia di sequenze di parole più lunghe di
3. Possiamo dunque fermarci tranquillamente alla distribuzione di
coppie di parole.
Il risultato conferma quanto avevamo osservato nel PAR. 6.3.3. Il
modello markoviano del secondo ordine, basato sulla distribuzione
dei trigrammi (PAR. 6.3.3), assegna infatti all’esempio 6.1 la stessa probabilità della catena del primo ordine ([6.13]), e non, come ci aspetteremmo in astratto, una probabilità maggiore. La ragione è, come
abbiamo appena mostrato, che il testo non contiene restrizioni o condizionamenti che travalichino coppie di parole. Dal momento che il
modello a bigrammi è anche quello che richiede di misurare il numero minimo di eventi mutuamente esclusivi, in base al principio del
rasoio di Occam, secondo il quale entia non sunt multiplicanda praeter
necessitatem, dobbiamo preferirlo ad altri modelli che, pur assegnando la stessa probabilità al testo, fanno affidamento su un numero
maggiore di eventi esclusivi (trigrammi, quadrigrammi ecc.).
178
6.
PROBABILITÀ ED ENTROPIA
6.5
Considerazioni conclusive
Il testo contiene struttura linguistica e questa struttura si manifesta
nel modo in cui le parole si co-selezionano in sequenze ricorrenti. I
modelli linguistici stocastici sono meccanismi generativi che associano
a ogni sequenza grammaticalmente corretta di parole, comunque lunga, una probabilità maggiore di zero. La probabilità è stimata per approssimazione, combinando tra loro le probabilità di sequenze elementari (o eventi semplici) più piccole. Sequenze elementari corte
possono catturare solo relazioni strutturali tra parole vicine tra loro.
Maggiore la lunghezza delle sequenze elementari, più ampie e ricche
sono le strutture che il modello riesce a descrivere.
L’entropia è un indice (inverso) della quantità di struttura presente in un testo. Il valore di massima entropia si raggiunge quando
le parole formano un flusso caotico, in cui ogni nuova parola ha probabilità costante, indipendentemente dal contesto che la precede.
Questo flusso è simulato dall’MLS più semplice: il modello a urna.
Aumentando l’ordine del modello markoviano, siamo in grado di catturare condizionamenti di ampiezza crescente tra parole. Ma quando
siamo autorizzati a fermarci?
Banalmente, se un testo di n parole fosse il solo testo possibile di
quella lunghezza, allora l’MLS più accurato sarebbe un modello markoviano di ordine n – 1 che assegna probabilità 1 al testo in questione! Il problema è che qualsiasi testo può essere modificato in modo
tale da ottenere un altro testo grammaticalmente corretto della stessa
lunghezza. La creatività del linguaggio consiste nella possibilità di generare frasi sempre nuove combinando in modo diverso un numero
finito di schemi ricorrenti di lunghezza finita. Se questo è vero, allora
è fondata la speranza che, analizzando un testo sempre più lungo, si
riesca a stimare con sufficiente accuratezza la distribuzione di tutti gli
schemi ricorrenti nel testo. Sulla base di questa stima, la probabilità
del testo di partenza può essere approssimata da una combinazione
specifica di schemi di cui è nota la probabilità.
Questo excursus può essere tradotto in una serie di istruzioni per
l’uso. Primo, volendo stimare l’MLS di un testo, è consigliabile che il
testo in questione sia il più lungo possibile. Secondo, dobbiamo partire dal modello più semplice, per complicarlo gradualmente. Terzo,
per ogni modello che consideriamo, calcoliamo l’entropia degli eventi
semplici alla base del modello dopo aver stimato la loro distribuzione
di probabilità sul testo (addestramento). Quarto, confrontiamo questa
179
TESTO E COMPUTER
entropia con l’entropia alla base del modello precedente in ordine di
complessità e calcoliamo la loro differenza. Quinto, se questa differenza smette di decrescere, per il rasoio di Occam potremo accordare
la nostra preferenza al modello markoviano di ordine di complessità
precedente a quello corrente. Con un avvertimento però: se una mancata riduzione dello scarto tra entropie di ordini successivi ci dà la
prova che possiamo fermarci al modello di ordine precedente, un’effettiva riduzione dello scarto potrebbe essere il prodotto distorto di
un campione troppo piccolo, che non offre dati in numero sufficiente
per le nostre stime di probabilità.
Gli MLS che abbiamo descritto in questo capitolo si basano su
due assunzioni di fondo. La prima è che esista un modello markoviano di ordine finito che sia in grado di rappresentare tutta la struttura
linguistica che troviamo nel testo. La seconda assunzione è che, avendo a disposizione un testo sufficientemente lungo, saremo in grado di
osservare tutte le distribuzioni osservabili (ad esempio tutte le multiple grammaticalmente corrette o tutto il vocabolario esprimibile). Entrambe queste assunzioni sono però dubbie. In primo luogo, ci sono
buone ragioni teoriche per dubitare che le proprietà di combinazione
delle parole nel testo siano esprimibili attraverso modelli markoviani
di un qualsiasi ordine finito. Inoltre, alla luce di quanto detto nel
CAP. 5, anche la seconda assunzione sembra infondata. La coda zipfiana di un vocabolario si allunga infatti al crescere della lunghezza
del testo. D’altra parte, la stima delle probabilità condizionate richiede il conteggio di sequenze di parole anche molto rare. Più rare sono
queste sequenze, più difficile diventa distinguerle da sequenze che
non sono attestate o perché linguisticamente sgrammaticate, o perché
non legate a convenzioni d’uso, o perché non rispondono a vincoli
semantici di un qualche tipo. Dobbiamo rassegnarci a una conclusione del tutto negativa?
Il successo di cui hanno goduto negli ultimi 20 anni, nonostante i loro indiscutibili limiti, i modelli linguistici stocastici ci autorizza a essere più ottimisti. Alcuni di questi modelli sono infatti
stati sviluppati a partire dalla distribuzione di classi di tipi lessicali,
come ad esempio le categorie grammaticali. Categorie grammaticali
astratte come il nome o l’aggettivo presentano una distribuzione
più stabile delle parole pescecane e birichino. Mentre l’occorrenza
di pescecane può essere dunque soggetta a oscillazioni casuali, dovute all’argomento o all’andamento della narrazione, possiamo sperare che, aggregando la distribuzione di tutti i nomi, questi fattori
di imprevedibilità possano essere ridimensionati (cfr. FIG. 6.2).
180
6.
PROBABILITÀ ED ENTROPIA
6.2
La distribuzione di nomi, verbi e preposizioni in Pinocchio
FIGUR A
frequenza relativa
25,00
20,00
15,00
10,00
5,00
0,00
0
2.000
4.000
nomi
verbi
6.000
8.000
10.000
preposizioni
Inoltre, sostituire ciascuna parola del testo con la sua categoria
grammaticale appropriata porta a una riduzione assai consistente
della cardinalità del vocabolario del testo, cioè del numero di tipi
di unità attestati e, in ultima analisi, dello spazio campionario degli
eventi attesi.
Naturalmente passare da una nozione di testo come pura sequenza di parole alla sua analisi in termini di sequenze di categorie
linguistiche astratte solleva tutta una serie di interrogativi: quali
sono queste categorie? Come vengono apprese dai parlanti? Come
si combinano in strutture complesse? Esistono strutture o categorie
innate? È legittimo ipotizzare che gli strumenti della statistica e
della teoria della probabilità possano gettare luce su questi problemi, ad esempio raggruppando parole e sequenze di parole rispettivamente in classi astratte e in sequenze ricorrenti di classi astratte,
la cui distribuzione si presti a essere stimata a sua volta con accuratezza sempre maggiore. Questo ciclo incrementale, che si compone dei passi stima → generalizzazione → nuova stima, definisce una
famiglia di algoritmi, detti in letteratura di bootstrapping, finalizzati
a distillare dai testi informazione linguistica sempre più astratta.
Una prospettiva assai concreta di indagine scientifica è dunque
quella di usare questi algoritmi come strumenti esplorativi dei processi cognitivi legati alle dinamiche della comprensione e dell’apprendimento del linguaggio.
181
TESTO E COMPUTER
Per saperne di più
CHARNIAK E.
(1993), Statistical Language Learning, The MIT Press, Cambridge
(MA).
COVER T., THOMAS J. A. (1991), Elements of Information Theory, John Wiley
& Sons, USA.
MANNING C. D., SCHÜTZE H. (1999), Foundations of Statistical Natural Language Processing, Cambridge (MA).
SHANNON C. E. (1948), A Mathematical Theory of Communication, in “Bell
System Technical Journal”, vol. 27.
182
Parte terza
Esplorazione e annotazione del testo
7
Esplorare il testo
Il testo è una fonte di dati da cui acquisire informazioni linguistiche
per estendere le nostre conoscenze sulla lingua. In questa terza parte
del libro, concentreremo la nostra attenzione proprio sul contributo
offerto dalla LC per potenziare la ricerca e la rappresentazione dell’informazione linguistica nei testi. La LC ha messo a punto una ricca serie di metodi che consentono di effettuare esplorazioni avanzate del
testo allo scopo di individuare tratti e costruzioni rilevanti per una
particolare indagine linguistica, e soprattutto di osservare e analizzare
il comportamento delle espressioni della lingua nei loro contesti d’uso, ai fini di una possibile classificazione. Questo capitolo è dedicato
a una rassegna dei principali metodi di esplorazione automatica del
testo, che consentono di sfruttare al meglio la ricchezza dei testi in
quanto fonte di dati linguistici “ecologici”. Esplorare il testo permette
di raccogliere informazioni sul modo in cui le espressioni linguistiche
si distribuiscono e sui loro schemi ricorrenti di combinazione, ottenendo così evidenza preziosa per elaborare modelli di spiegazione
delle proprietà delle espressioni linguistiche e dell’organizzazione del
linguaggio.
Un fattore fondamentale che condiziona i modi e i risultati delle
nostre esplorazioni testuali è la possibilità di disporre di un testo linguisticamente annotato. Infatti, alla dimensione lineare di un testo, relativa all’ordine nel quale le forme lessicali si dispongono all’interno
della frase, si accompagna una dimensione verticale di analisi, in stretto rapporto con i livelli di struttura linguistico-testuale (cfr. CAP. 2).
[7.1]
Il1 povero2 burattino3 rimase4 lì5 , come6 incantato7
La parola burattino non occupa soltanto la posizione 3 nella sequenza
dell’esempio [7.1], ma rappresenta anche la forma maschile singolare
dell’esponente lessicale BURATTINO, che è, a sua volta, un nome che
svolge il ruolo sintattico di soggetto nella frase in questione. Un testo
185
TESTO E COMPUTER
annotato, a differenza del testo grezzo in [7.1], contiene al suo interno alcuni di questi livelli verticali di analisi, rappresentando così in
maniera esplicita (e dunque interpretabile ed esplorabile dal calcolatore) il modo in cui il linguista classifica le forme lessicali concrete in
categorie astratte (ad esempio esponente lessicale, categoria grammaticale e via dicendo) o assegna ai legami sintattici del testo una struttura appropriata. Le necessità dell’analisi linguistica richiedono spesso
di indagare il testo alla ricerca di classi linguistiche astratte o di relazioni di tipo strutturale e funzionale. Il tema dell’annotazione linguistica – discusso in dettaglio nel CAP. 8 – svolge un ruolo centrale in
questa prospettiva, proprio perché la possibilità di disporre di un testo nel quale alcune informazioni linguistiche sono già esplicitamente
codificate (ad esempio in XML) esercita una forte influenza sull’efficacia delle esplorazioni qualitative e quantitative del testo, sia per quanto riguarda il tipo di generalizzazioni cui è possibile pervenire, che
per l’accuratezza delle nostre ricerche.
Prima di addentrarci nell’esplorazione del testo è utile però soffermarci su due questioni preliminari di metodo. Il modo in cui il
linguista classifica parole o sequenze di parole riflette il loro comportamento linguistico tipico e dunque, in ultima analisi, la loro distribuzione nel testo. Al livello morfologico, possiamo definire un esponente lessicale, con i dovuti caveat, come la classe di tutte le forme flesse
che condividono la stessa radice. A livello sintattico, queste stesse forme tendono ad accompagnarsi a contesti ricorrenti, selezionando non
solo lo stesso tipo sintattico di complementi (ad esempio un soggetto,
un oggetto diretto o una frase introdotta dalla congiunzione CHE) ma
anche classi di parole omogenee dal punto di vista semantico. Gli oggetti diretti tipici del verbo MANGIARE, ad esempio, sono solitamente
etichettabili come cibo, e i suoi soggetti come esseri animati. Da questo punto di vista, una classe linguistica astratta delinea il profilo
comportamentale tipico dei suoi membri nel testo. Come vedremo
meglio nel corso di questo capitolo, le nozioni di esplorazione e annotazione del testo sono strettamente legate tra loro in quanto la dimensione distribuzionale (o sintagmatica) e quella classificatoria (o paradigmatica) delle unità linguistiche sono strettamente interdipendenti.
Entrambe possono riguardare tanto singole parole quanto unità altamente strutturate, il cui modo di combinarsi deve essere specificato
in termini di vincoli grammaticali complessi.
In secondo luogo, i livelli di analisi morfologica, sintattica e semantica consentono di scandagliare la dimensione verticale di un testo per gradi di profondità crescente. Ciascun livello offre evidenza
linguistica che può essere utilizzata a un livello successivo per acqui186
7.
ESPLORARE IL TESTO
sire ulteriori generalizzazioni. Da questo punto di vista, non bisogna
enfatizzare la contrapposizione tra testo grezzo e testo annotato. Esiste piuttosto una cascata incrementale di livelli di analisi linguistica
sempre più astratti, che possiamo attraversare in diversi modi, anche
partendo dal testo nudo e crudo, se disponiamo di strumenti di
esplorazione testuale adeguati. A un certo livello di astrazione, quest’analisi a cascata rappresenta una “simulazione” del processo attraverso cui il lettore umano giunge alla comprensione del testo.
7.1
Modi di esplorazione
I metodi di esplorazione del testo che si avvalgono dell’uso del calcolatore possono essere qualitativi o quantitativi. I primi rispondono all’obiettivo di individuare esemplari linguistici che illustrino un particolare uso o fenomeno della lingua; non importa quante volte ricorra
una costruzione nel testo, ma solo quanto è rilevante per le nostre
finalità di ricerca. I metodi quantitativi, al contrario, cercano di definire la rilevanza di un tratto linguistico stimando la probabilità con
cui esso ricorre in un corpus rappresentativo.
Entrambi questi metodi di esplorazione si basano sulla possibilità
di recuperare dati linguistici all’interno del testo, isolandoli da tutto
ciò che non è rilevante o, come si suol dire, costituisce potenziale
“rumore” per un determinato obiettivo di ricerca. A tale scopo, le
espressioni regolari (cfr. PAR. 4.2) sono uno strumento fondamentale
per l’esplorazione testuale, in quanto consentono di impostare ricerche testuali mirate e complesse. D’altro canto, i metodi statistici permettono di definire criteri quantitativi per la selezione di costruzioni
linguisticamente interessanti e per la verifica di ipotesi complesse sulla struttura della lingua.
Nella rassegna che segue, per comodità di esposizione, abbiamo
diviso i metodi qualitativi di ricerca testuale (concordanze ed espressioni regolari) dai metodi quantitativi (indici di associazione). Per ciascuna di queste due famiglie siamo partititi dal caso più semplice, in cui
ipotizziamo di avere a disposizione nient’altro che il testo grezzo, segmentato in parole unità. Vedremo come, a mano a mano che gli
obiettivi di ricerca diventano più articolati, aumenta di pari passo il
livello di conoscenze linguistiche che le funzioni di ricerca presuppongono. Questo approccio espositivo ci consentirà di mettere in
luce sia la natura incrementale dell’esplorazione linguistica, sia la naturale convergenza tra l’approccio quantitativo e quello qualitativo all’analisi del testo.
187
TESTO E COMPUTER
7.2
Le parole e il loro habitat: le concordanze
In Pinocchio, la forma buono ricorre complessivamente 11 volte. Per
quanto utile a comprendere come si distribuisca il vocabolario del testo, questa informazione non dice niente riguardo a come venga usata
la parola buono in Pinocchio. Si tratta dell’aggettivo buono o del
nome buono? Quale dei sensi dell’aggettivo buono compare in Pinocchio? Quale di questi significati è maggiormente attestato? In quali
contesti sono usati i diversi sensi? L’aggettivo ricorre con funzione
attributiva o predicativa? Ci sono differenze nel significato della parola a seconda dell’una o dell’altra funzione sintattica? Un modo per
rispondere a simili interrogativi è quello di analizzare le concordanze
della forma buono in Pinocchio.
Le concordanze sono una lista delle occorrenze di una parola tipo
nel testo, ciascuna presentata nel suo contesto linguistico. Esse permettono di esplorare l’uso di una parola nei singoli “habitat” linguistici in cui ricorre. Di fatto, la compilazione di concordanze ha motivato storicamente le prime applicazioni di strumenti informatici all’analisi testuale (cfr. Introduzione).
Il modo standard in cui vengono presentate le concordanze di
una forma lessicale specifica detta parola chiave (o keyword) è il formato KWIC (KeyWord In Context), di cui la FIG. 7.1 riporta un esempio per il caso della parola buono in Pinocchio. Le concordanze KWIC
contengono tante righe quante sono le occorrenze della parola chiave
nel testo. Ciascuna riga è centrata sulla parola chiave, che è preceduta e seguita da un numero prefissato di caratteri di contesto. I numeri
incolonnati alla sinistra di FIG. 7.1 identificano la riga di testo in cui
si trova una data occorrenza della parola.
FIGURA 7.1
Concordanze di buono in Pinocchio
103
112
326
329
543
1129
1285
1304
1372
1413
2480
cattiva, un letto poco
allora cominciò a lavorare a
, – che da oggi in poi sarò
altri ragazzi! Io sono piu’
e mettermi a studiare a
? Povera bestia! Era tanto
il mare diventò tranquillissimo e
? – Gli è il babbo più
promette alla Fata di essere
che tu avevi il cuore
Oh! Babbino mio, come siete
188
buono
buono
buono
buono
buono
buono
buono
buono
buono
buono
buono
e un tavolino tutto rotto
, e gli fece subito i
– Tutti i ragazzi,
di tutti e dico sempre
. – Guarda me! – disse
! ...Ma giudicandoti
come un olio. Allora
del mondo, come io sono
e di studiare, perché
: e dai ragazzi buoni di
! ... e pensare che io,
7.
ESPLORARE IL TESTO
7.2
Esempio di inverted index per Pinocchio
FIGURA
buonissima
buono
<1>
< 11 >
buonumore
<3>
781
103, 112, 326, 329, 543, 1129, 1285, 1304, 1372,
1413, 2480
2396, 2552, 2759
Come passo intermedio per la generazione delle concordanze, i programmi compilano di solito un indice del testo detto inverted index
(cfr. FIG. 7.2), una struttura dati che contiene, per ogni parola tipo, la
sua frequenza (il numero tra parentesi angolari in FIG. 7.2) e l’indicazione dei punti nel testo (generalmente i numeri di riga) in cui la parola ricorre.
Questo tipo di struttura dati consente di velocizzare il processo di
compilazione delle concordanze. Quando l’utente immette una parola
chiave, il programma cerca un’entrata corrispondente nell’indice,
usando i numeri delle righe di testo come coordinate per recuperare i
contesti della parola.
Diamo un rapido sguardo alle concordanze di buono riportate
nella FIG. 7.1. In 7 occorrenze su 11 (righe 326, 329, 1.129, 1.304,
1.372, 1.413 e 2.480), questa forma corrisponde all’aggettivo BUONO
nel suo senso morale, di qualcuno che possiede bontà d’animo o che
è ubbidiente, ed è usata come attributo o come predicato di esseri
animati. L’occorrenza di riga 103 è ancora aggettivale, ma con un
senso diverso, che designa un oggetto di qualità soddisfacente o ben
fatto: questo uso è attestato come attributo di letto. Nella riga 1.285
buono ricorre invece come predicato di mare, con il senso di calmo,
non tempestoso. Le righe 112 e 543 ci riservano una sorpresa interessante: la parola ricorre nella forma preposizionale a buono, una locuzione avverbiale il cui significato corrisponde a quello di sodo nelle
espressioni lavorare sodo, studiare sodo ecc. Il fatto rilevante è che
questo uso di buono non risulta essere attestato nell’italiano standard
contemporaneo (ad esempio, il Dizionario della lingua italiana De
Mauro non lo riporta tra i sensi di BUONO). Si tratta di un uso regionale, in parte obsoleto, coerente con lo stile di Pinocchio.
Questo semplice esempio è sufficiente a mostrare come si possa
usare una lista di concordanze per acquisire dati linguistici non banali riguardo a un testo. Come tali, le concordanze sono uno strumento
fondamentale per il lavoro lessicografico, in quanto consentono di ancorare la descrizione del lessico di una lingua all’evidenza “ecologica”
dell’uso reale. Allo stesso modo, il linguista può ottenere dati qualita189
TESTO E COMPUTER
tivi importanti per orientarsi sulla fisionomia di un particolare registro linguistico o per convalidare ipotesi sulla struttura sincronica e
su quella diacronica della lingua in esame.
7.2.1. Tipi di concordanze
Sono moltissimi i programmi per la compilazione di concordanze oggigiorno reperibili, alcuni dei quali liberamente scaricabili dal web.
Esistono anche agenti, programmi simili ai motori di ricerca che usiamo quotidianamente per reperire informazioni sulle pagine web di
tutto il mondo, che producono concordanze in formato KWIC di una
parola chiave, usando come corpus enormi collezioni di pagine web.
Tutti i maggiori corpora sono generalmente accompagnati da software per la loro esplorazione attraverso concordanze (ad esempio
SARA per il British National Corpus). È però anche possibile ottenere
le concordanze di un testo in maniera più artigianale. Il comando
grep nei sistemi operativi Unix/Linux, ad esempio, restituisce tutte le
righe di testo in cui compare una stringa corrispondente a una particolare espressione regolare, e può dunque essere utilizzato per generare una forma semplice ma efficace di concordanze. Inoltre, poche righe di codice di un linguaggio di programmazione come Perl sono in
genere sufficienti per scrivere piccoli programmi in grado di fornirci
le concordanze di una parola.
Tipicamente, i programmi di concordanze prendono in input un
documento elettronico in formato solo testo, cui si applicano tutti i
caveat del CAP. 2 relativamente al problema della codifica dei caratteri.
È sempre opportuno raccogliere informazioni su quali siano i set di
caratteri che il programma è in grado di riconoscere, per evitare sorprese sgradite con insiemi di caratteri non appartenenti al repertorio
ASCII standard. Inoltre, è importante verificare se il programma distingue i caratteri maiuscoli da quelli minuscoli (ovvero se è case-sensitive),
in quanto questo parametro può incidere notevolmente sui risultati
della ricerca. In genere, i programmi esistenti (soprattutto quelli più
sofisticati) eseguono una rudimentale forma di segmentazione del testo,
che usano come base per compilare l’inverted index. È però preferibile,
in generale, usare un testo già preventivamente segmentato in token,
per essere sicuri che le concordanze vengano eseguite su unità linguistiche rilevanti, evitando i problemi relativi a segni di punteggiatura,
sigle, date, espressioni multilessicali ecc. (cfr. PAR. 4.1.1).
Le funzioni principali dei programmi di concordanze sono quasi
sempre le stesse, anche se differenze importanti esistono per quanto
riguarda la velocità di compilazione delle concordanze, la quantità dei
190
7.
ESPLORARE IL TESTO
FIGURA 7.3
Alcune concordanze di burattino ordinate rispetto al contesto sinistro
2374 qui? – No, – rispose il
1119 chiamo Melampo, – rispose il
2616 e senza tetto, – rispose il
541
Prima di tutto, – rispose il
1181 PINOCCHIO Come rimanesse il
931
una storia lunga, – disse il
2550 la spiaggia, – disse il
912
buona, Fata mia, – disse il
burattino
burattino
burattino
burattino
burattino
burattino
burattino
burattino
,
.
.
,
,
,
.
,
– ci sono altre
– O dunque chi sei
– Girate la chiave
– voglio comprare
quand’ebbe
– e ve la
– Per vostra
asciugandosi gli
dati testuali che possono essere gestiti e i modi in cui le concordanze
stesse possono essere esplorate dall’utente. Rispetto a quest’ultimo
punto, i programmi specializzati rendono solitamente possibile modificare alcuni parametri della ricerca, in particolare per quanto riguarda la modalità di presentazione delle concordanze e i criteri con cui
può essere specificata la parola chiave.
È solitamente possibile, ad esempio, definire la lunghezza del contesto (in numero di caratteri) che accompagna la parola chiave. Contesti troppo corti nel formato KWIC possono non essere sufficienti per
un’analisi accurata delle concordanze. È possibile, ad esempio, che
l’analisi del comportamento di un verbo renda necessario individuare
i suoi soggetti anche a diverse parole di distanza dal verbo. Determinare la lunghezza appropriata del contesto dipende soprattutto dal
tipo di analisi da effettuare: in alcuni casi può essere necessario passare a formati di concordanze in cui il contesto è rappresentato dall’intera frase, oppure da un intero capoverso.
Un secondo parametro modificabile riguarda l’ordine di presentazione delle concordanze. L’opzione predefinita è generalmente quella
di presentare le concordanze in ordine di apparizione nel testo. È il
caso riportato nella FIG. 7.1, come si può notare dall’ordine strettamente crescente dei numeri di riga. L’ordine di apparizione è utile
per esplorare come l’uso di una parola muti all’interno di un testo o
di una particolare sezione del corpus. In molti casi, però, l’obiettivo
dell’analisi delle concordanze è esplorare in quali contesti tipici tende
a ricorrere una parola. A tale scopo, è utile ordinare le concordanze
alfabeticamente rispetto alle parole del contesto sinistro (cfr. FIG. 7.3)
o del contesto destro (cfr. FIG. 7.4).
Questo tipo di ordinamento si dimostra assai utile soprattutto con
parole chiave ad alta frequenza, poiché tende a raggruppare contesti
simili, offrendo così una preclassificazione dei dati estratti. Ordinare
le concordanze di burattino rispetto al contesto sinistro (FIG. 7.3) ci
191
TESTO E COMPUTER
FIGURA 7.4
Alcune concordanze di burattino ordinate rispetto al contesto destro
1717
2350
2358
1847
2339
2750
57
2045
2536
1286
, che pareva diventato un
nell’acqua sei diventato un
Sappiate dunque che io ero un
- Domani finirai di essere un
un’anguilla. Vedendo quel
accorse che non era più un
di fabbricarmi da me un bel
via maestra, gli parve al
di fare il gran salto, il
come un olio. Allora il
burattino
burattino
burattino
burattino
burattino
burattino
burattino
burattino
burattino
burattino
di gesso. Poi lo
di legno?... di legno come sono
di legno, e
di legno, il pover’
di legno: ma che
di legno; ma un
di sentire una voce
disse al suo babbo:
distese i suoi panni
consente, ad esempio, di ricavare informazioni interessanti riguardo ai
verbi di cui burattino è soggetto postverbale. Simmetricamente, l’ordinamento delle concordanze della stessa parola rispetto al contesto
destro (FIG. 7.4) ci permette di analizzare i modificatori postnominali
di burattino. Confrontando gli esempi d’uso di FIG. 7.3 e FIG. 7.4,
salta inoltre agli occhi la tendenza di burattino a ricorrere come soggetto postverbale di verbi come RISPONDERE e DIRE nel contesto di un
discorso diretto. Che si tratti di più di un’impressione è confermato
da un’analisi quantitativa effettuata sul corpus italiano TRESSI (cfr.
CAP. 8) che conferma la tendenza di questi verbi a ricorrere con il
soggetto postverbale (circa nel 60% dei casi).
Queste riflessioni illustrano bene l’idea che un semplice ordinamento di contesti sintagmatici è alla base di generalizzazioni di tipo
paradigmatico. Sebbene le concordanze siano basate su un metodo di
esplorazione testuale essenzialmente qualitativo e lineare, il loro ordinamento rispetto al contesto permette di avere una visione sinottica
delle potenzialità combinatorie di una parola chiave. Questa visione
ci consente da un lato di raggruppare la parola chiave con altre parole che selezionano contesti simili e dunque di pervenire a una loro
classificazione, dall’altro di quantificare la tendenza di una parola a
ricorrere in costruzioni specifiche. Torneremo su aspetti di analisi
quantitativa più avanti nel capitolo.
7.3
Funzioni di ricerca avanzate
I programmi di concordanze più sofisticati spesso offrono la possibilità di effettuare ricerche sul testo attraverso l’uso di espressioni regolari (ER, cfr. PAR. 4.2). Queste permettono infatti di esprimere criteri di
ricerca complessi e articolati, velocizzando il processo di estrazione,
192
7.
ESPLORARE IL TESTO
ma anche migliorando la qualità dei dati estratti, sia in termini di accuratezza che di generalità. Le ER sono dunque uno strumento molto
efficace per esplorazioni avanzate dei dati testuali. Ad esempio, le
concordanze di tutte le forme flesse di uno stesso lemma possono essere facilmente individuate utilizzando la possibilità offerta dalle ER di
cercare classi di stringhe. Se i testi in input non sono lemmatizzati,
specificando buono come parola chiave otteniamo infatti solo le occorrenze di questa stringa. L’espressione in [7.2] ci aiuta invece a trovare anche le forme plurali e femminili di BUONO:
[7.2]
/buono|buona|buoni|buone/
Il problema più evidente della [7.2] è che la ER funziona per un solo
esponente lessicale, per quanto la conoscenza linguistica alla base della [7.2] sia del tutto generale. Per trovare nel testo le forme di un
altro aggettivo regolare a quattro uscite, ad esempio CATTIVO, dobbiamo ricorrere a un’espressione del tutto diversa, a riprova del fatto
che abbiamo perso di vista un’ovvia generalizzazione morfologica. In
alternativa, possiamo costruire una ER che sfrutti le nozioni morfologiche di radice e terminazione nel modo indicato in [7.3], dove appaiono, tra l’altro, il carattere jolly “.”, il moltiplicatore “ + ” e l’ancora “\b” che segnala un confine di token. La [7.3] consente di trovare alcune forme verbali dell’infinito italiano.
[7.3]
/\b. + ?(are|ere|ire)\b/
Le ER permettono di fare ricerche anche su più forme in sequenza. Ad
esempio l’espressione in [7.4] può essere usata per trovare tutte le
forme verbali del passato prossimo che selezionano l’ausiliare AVERE:
[7.4]
/\b(ho|hai|ha|abbiamo|avete|hanno)\s. + ?
(ato|uto|ito|eso |sto|rso|tto)\b/
La seconda parte della [7.4], alla destra del “ + ?”, contiene le principali terminazioni del participio passato italiano, che possono essere
ulteriormente arricchite per tenere conto di altre forme irregolari,
come discusso ed espulso.
In generale, non è sempre facile formulare una ER in modo tale
da trovare tutti e soltanto i dati rilevanti. Spesso succede che l’espressione ci restituisca erroneamente molti più contesti di quelli che effettivamente cerchiamo, oppure che alcune delle strutture cui siamo interessati manchino all’appello. In altri casi, l’uso delle ER può rendere
193
TESTO E COMPUTER
molto involuta la definizione di uno schema di ricerca appropriato o
ci costringe a ricorrere a più ER per esprimere la stessa generalizzazione linguistica. Il prossimo paragrafo è dedicato a una rapida rassegna
di questi problemi e delle possibili soluzioni.
7.3.1. Problemi e soluzioni
Prendiamo, come primo esempio, lo schema di ricerca in [7.3]. Sebbene questa ER sia in grado di trovare la stragrande maggioranza delle forme verbali infinitive dell’italiano (con alcune eccezioni, come gli
infiniti contenenti le radici TRARRE, *DURRE e PORRE), essa è anche
soddisfatta da forme come podere, mare o lire che verbi non sono.
Per escludere questo tipo di falsi infiniti è necessario limitare la nostra ricerca testuale alle sole forme verbali: ma come?
[7.5]
< pm cat = “art” > il < /pm > < pm cat = “n” > coniglio < /pm > < pm
cat = “v” > voleva < /pm > < pm cat = “v” > attraversare < /pm > < pm
cat = “prep” > a < /pm > < pm cat = “n” > nuoto < /pm > < pm
cat = “n” > nuoto < /pm > < pm cat = “art” > il < /pm > < pm
cat = “n” > mare < /pm >
Esistono due strade possibili. La prima è usare un testo annotato a
livello morfo-sintattico, che contenga, per ogni parola unità, l’indicazione esplicita della sua categoria grammaticale. Per rendere più concreta questa strategia, si immagini di avere a disposizione un testo annotato come quello in [7.5], relativo alla frase il coniglio voleva attraversare a nuoto il mare. Nell’esempio, le parole del testo sono rappresentate come elementi XML di tipo pm cui è associata l’informazione relativa alla categoria grammaticale (cat). In questo modo, gli infiniti in -are nel testo possono essere trovati con una semplice ER che
restringa la ricerca agli elementi il cui l’attributo cat abbia come valore “v”, come illustrato dalla [7.6]:
[7.6]
/ < pm cat = “v” > . + ?are < \/pm > /
La forma della [7.6] dipende dal fatto che adesso il “pattern matching” viene effettuato su un testo arricchito di codici che rendono
esplicite le categorie grammaticali delle sue parole. I codici linguistici
con cui è annotato il testo possono quindi essere usati direttamente
nella ER per rendere più precisa la ricerca.
194
7.
ESPLORARE IL TESTO
In mancanza di un testo annotato, la nostra ER dovrà necessariamente contenere la conoscenza linguistica necessaria per escludere
dalla ricerca i falsi infiniti. Questa strategia, per quanto teoricamente
praticabile, si scontra, tuttavia, con la difficoltà di esprimere classi linguistiche astratte, tra cui la categoria grammaticale, come insiemi di
radici lessicali. Ad esempio, nella frase il coniglio voleva attraversare a
nuoto il mare possiamo evitare di cadere nella trappola del falso infinito mare imponendo la restrizione che la forma in -are non possa
essere preceduta dall’articolo il (cfr. [7.7]).
[7.7]
/\w*[^i][^l]\s\w*are\ > /
Questo escamotage presenta tuttavia diversi limiti. Il primo è che alcuni infiniti (i cosiddetti infiniti sostantivati) possono in realtà essere
preceduti dall’articolo. La ER in [7.7], erroneamente, li escluderebbe
tutti. In secondo luogo, la sintassi delle ER introdotta nel CAP. 4 non
consente di negare la presenza di una sequenza di caratteri. L’espressione /[^i][^l]/ in [7.7], infatti, non nega solo la forma il dell’articolo, ma anche le stringhe al, el, io, ia ecc., cioè qualsiasi coppia ordinata di caratteri che contenga una i in prima posizione o una l in
seconda. Definire un contesto con la restrizione che un’intera stringa
di caratteri non vi ricorra è molto problematico se si usano le ER. Di
solito, si deve trasformare una condizione negativa in una positiva o
ricorrere a qualche altro espediente. Questa osservazione ci porta al
terzo e probabilmente più grave limite della soluzione in [7.7]. Mentre è relativamente poco dispendioso elencare tutte le forme dell’articolo, se vogliamo condizionare la nostra ER rispetto alle categorie
grammaticali di classi lessicali aperte, come ad esempio l’aggettivo, ci
troviamo costretti a ricorrere a una lista di radici aggettivali, equivalente a una porzione rilevante di tutto il lessico italiano. La questione
centrale, a questo punto, non è soltanto che una ER che incorpori una
fetta consistente del lessico italiano è complicata da scrivere e da leggere. Il problema vero è che questa stessa ER diventa uno strumento
assai poco efficiente per le nostre ricerche testuali. Ogni volta che una
ER richiede la presenza di un aggettivo, il computer scorre il testo per
verificare se la parola corrente è contenuta nell’elenco di forme che
definiscono la classe aggettivo nella ER. Non solo l’elenco deve essere
scorso da cima a fondo, ma per ogni nuova ricerca che includa le
stesse restrizioni, la stessa verifica deve essere ripetuta ex novo per
tutte le forme del testo!
195
TESTO E COMPUTER
7.4
Collocazioni
Le parole hanno la capacità di combinarsi in espressioni sintatticamente complesse. Questa capacità non è però illimitata e le parole
variano considerevolmente per il grado di libertà con cui si combinano. Alcune potenzialità combinatorie sono determinate da tratti morfo-sintattici e semantici generali delle parole stesse, in quanto membri
di una classe linguistica astratta. Si consideri ad esempio la frase
Gianni ha visto un topolino grigio. La parola un si combina con topolino in quanto la prima è un articolo e la seconda un nome. A sua
volta grigio si combina con topolino in virtù del fatto che il primo è
un nome che designa un’entità concreta e il secondo è un aggettivo
di colore. In entrambi i casi queste combinazioni sono legittimate da
principi generali che regolano la struttura del sintagma nominale italiano. I legami tra le parole di questa frase sono definibili in termini
di tratti generali (sintattici o semantici) condivisi da ampie classi di
espressioni linguistiche che possono essere sostituite alle parole della
frase originaria per ottenere nuove frasi grammaticalmente e semanticamente coerenti: Gianni ha visto il cane marrone, La mucca ha divorato l’erba verde, Gianni ha notato la macchina rossa ecc.
Esistono però nella lingua altri tipi di combinazione lessicale che
si basano su legami non riconducibili a classi linguistiche generali. Si
pensi a frasi del tipo: A notte fonda c’era la luna piena, Gli alberghi
sono cari in alta stagione, Gianni ha la vista lunga. Esse contengono
combinazioni del tipo “nome + aggettivo” strutturalmente equivalenti al caso di topolino grigio, ma al tempo stesso fondamentalmente
diverse. In espressioni come notte fonda, luna piena, alta stagione e
vista lunga l’aggettivo e il nome sono legati da un tipo di associazione
che riguarda due forme lessicali specifiche. Se proviamo a sostituire
queste parole con altre simili, notiamo che qualcosa del legame originario si rompe, fino a raggiungere risultati anomali:
Gianni ha la vista {AMPIA, ESTESA ecc.}.
A notte {SCURA, PROFONDA ecc.} c’era la luna {TONDA, CHIARA ecc.}.
Gli alberghi sono cari in {ELEVATA, AVANZATA ecc.} stagione.
Espressioni come notte fonda, luna piena, vista lunga, alta stagione
ecc. sono note in letteratura come collocazioni (collocations), cioè sequenze di due o più parole caratterizzate da un forte legame di associazione reciproca. In realtà non è facile dare una definizione precisa di
collocazione, né stabilire con esattezza i confini di questa tipologia di
196
7.
ESPLORARE IL TESTO
strutture linguistiche. All’interno di questa classe sono spesso compresi termini tecnici (sistema operativo, corte d’assise, legge delega, regime alimentare ecc.), costruzioni a verbo supporto (fare attenzione,
dare manforte, prendere posto, prendere un caffè ecc.), nomi propri
composti (Stati Uniti d’America ecc.), fino a vere e proprie costruzioni
idiomatiche (tagliare la corda, tirare le cuoia, gatta morta, acqua cheta
ecc.) e complementi tipici di un verbo (infrangere le regole). Il forte
legame di associazione reciproca si manifesta in alcune proprietà che
le collocazioni in generale condividono, sebbene in misura diversa:
1. elevata convenzionalità: le collocazioni sono tendenzialmente
espressione di usi convenzionali o stereotipati, tipici di particolari varietà linguistiche (come nel caso, ad esempio, dei termini tecnici);
2. ridotta composizionalità semantica: il significato di una collocazione è molto spesso non immediatamente ricavabile dalla composizione
del significato delle parole che la formano. Mentre, conoscendo il significato di topolino e di grigio possiamo interpretare senza problemi
topolino grigio, lo stesso non si può dire di alta stagione o di legge
delega;
3. forte rigidità strutturale: spesso le collocazioni sono resistenti a
modificazioni aggettivali o avverbiali, o possono ricorrere solo in particolari forme flesse e contesti sintattici. È interessante osservare, ad
esempio, che l’anomalia di a notte profonda (invece di a notte fonda)
non è ascrivibile a una qualche incompatibilità semantica tra il nome
e l’aggettivo, come testimonia l’esistenza dell’espressione nel profondo
della notte. Il problema è piuttosto che in a notte fonda le parole si
selezionano a vicenda in una sequenza così rigida da rendere quasi
impossibile ogni minima alterazione.
Sinclair (1991, p. 110) considera le collocazioni l’espressione tipica di un principio di combinazione linguistica non riconducibile a
vincoli di grammaticalità generali: «l’utente di una lingua ha a disposizione un grande numero di strutture semi-preconfezionate che rappresentano delle scelte unitarie, sebbene possano sembrare internamente analizzabili». Questa strategia di combinazione è chiamata dallo stesso Sinclair idiom principle, in opposizione all’open choice principle che regola la costruzione di strutture complesse in base a vincoli combinatori generali validi per classi aperte di parole (come nel
caso di topolino grigio). Le collocazioni sono rimaste per lungo tempo ai margini del dibattito linguistico teorico, proprio per il loro carattere speciale, strettamente ancorato alle convenzioni d’uso e difficilmente riconducibile a principi generali della grammatica. Un merito indiscusso della linguistica dei corpora è stato quello di aver restituito alle collocazioni pieno diritto di cittadinanza nell’analisi della
197
TESTO E COMPUTER
lingua. Invero, lo studio delle collocazioni ha un ruolo cruciale per
molti aspetti della ricerca linguistica: indagini lessicografiche, studi
sulla traduzione, modelli dell’apprendimento di una lingua, analisi
dei processi di lessicalizzazione e grammaticalizzazione ecc. Più in
generale, lo studio delle collocazioni permette di esplorare la vasta
gamma di strutture linguistiche che si collocano nello spazio semantico esistente tra la piena composizionalità di topolino grigio, e la totale idiomaticità di tirare le cuoia. Questo spazio, che potremmo definire di composizionalità debole, è molto variegato e la sua indagine
può fornirci indicazioni interessanti sull’organizzazione, la struttura e
l’uso della lingua.
7.4.1. Alla ricerca di collocazioni
I corpora testuali – in quanto raccolte di prodotti dell’uso linguistico
– sono vere e proprie miniere di collocazioni. La loro esplorazione ci
permette di acquisire dati importanti sulla portata di questo fenomeno linguistico pervasivo. A tale scopo, le concordanze sono sicuramente uno strumento utile, ma non sufficiente, a garantirci procedure
di ricerca soddisfacenti. In effetti, i limiti di questo tipo di esplorazione sono dovuti proprio alla vaghezza della nozione di collocazione,
alla varietà di strutture che ne fanno parte e dunque alla difficoltà di
stabilire dei criteri qualitativi per la loro selezione. Un problema che
si pone è quindi come rendere più precisa la nozione di associazione
tra parole che sembra essere l’unico vero comune denominatore tra i
membri della famiglia delle collocazioni.
La LC può venire in aiuto, fornendo metodi di analisi automatica
del testo che consentono di trasformare la nozione intuitiva di associazione lessicale in un indice quantitativo e misurabile. La LC ha infatti messo a punto una serie di misure di associazione che servono a
quantificare la forza del legame tra due o più parole nel testo. Il principio su cui si basano le misure di associazione è molto semplice: se
due o più parole formano una collocazione in una certa varietà linguistica, è molto probabile che nei testi rappresentativi di quella varietà esse ricorrano insieme in maniera statisticamente significativa.
Questa ipotesi è giustificata dal fatto che, secondo l’idiom principle, le
collocazioni sono strutture prefabbricate che i parlanti tendono a usare come blocchi linguistici tendenzialmente unitari e fissi. Per identificare le collocazioni in un corpus basta, dunque, analizzare il modo
in cui si distribuiscono le sue parole.
Limitiamoci per semplicità al caso delle collocazioni formate solo
da due parole (ad esempio alta stagione). In questo caso, è possibile
198
7.
ESPLORARE IL TESTO
identificare automaticamente tutti i bigrammi di un corpus, calcolare
per ogni bigramma tipo la sua frequenza nel corpus e usare questo
dato per ricavare un indice quantitativo di associazione per ogni bigramma. Possiamo poi ordinare i bigrammi per forza di associazione
decrescente e selezionare come potenziali collocazioni i bigrammi il
cui indice superi una certa soglia. In questo modo, l’analisi automatica del testo permette di costruire rapidamente una mappa delle potenziali collocazioni di un testo, che possiamo utilizzare come punto
di partenza per ulteriori analisi.
Misure di associazione
Lo studio di misure di associazione lessicale per l’identificazione di
collocazioni occupa un posto importante nella ricerca linguisticocomputazionale recente. L’obiettivo è individuare indici quantitativi
affidabili in grado di assegnare un valore alto di associazione a buoni
esemplari di collocazioni.
In prima battuta, ipotizziamo che la frequenza assoluta di un bigramma in un corpus sia un indicatore affidabile di questo tipo. Calcoliamo dunque la distribuzione di frequenza dei bigrammi in Pinocchio. La TAB. 7.1 riporta i bigrammi più frequenti, fatta esclusione
per i bigrammi che contengono un segno di punteggiatura.
TABELLA 7.1
I bigrammi più frequenti in Pinocchio
il burattino
e il
e di
e la
per la
di legno
a casa
110
82
77
62
54
54
50
Tra i bigrammi di TAB. 7.1, tuttavia, non vi è traccia di collocazioni.
Per ironia della sorte, troviamo soltanto “anticollocazioni”, cioè legami, come quello tra il e burattino, sicuramente dettati da vincoli generali di grammaticalità della lingua, secondo lo spirito dell’open choice principle. Ne concludiamo che la frequenza assoluta di un bigramma non quantifica il grado di associazione lessicale tra due parole: è
dunque necessario rendere più complessa la relazione tra associazione
lessicale e frequenza.
È plausibile ipotizzare che due parole siano tanto più fortemente
199
TESTO E COMPUTER
associate quanto più spesso si presentano insieme rispetto alle volte in
cui ricorrono l’una indipendentemente dall’altra. In Pinocchio, la frequenza del bigramma il burattino è 110, ma la frequenza assoluta di
il è 925. Il numero di volte in cui il ricorre con una parola diversa da
burattino è molto più alto del numero di volte in cui il e burattino
ricorrono insieme. Questa disparità suggerisce che non c’è un legame
di associazione lessicale diretta tra il e burattino, poiché il tende a
combinarsi con una classe molto più ampia di parole.
Tra le misure di associazione che sfruttano metodi statistici per
quantificare il grado di associazione tra due parole sulla base della
tendenza che queste hanno a presentarsi insieme in un corpus, la mutua informazione (MI) è certamente una delle più note. Introdotta
come misura di associazione lessicale da Church e Hanks (1990), è
presto diventata uno strumento standard per l’analisi delle collocazioni nei corpora. Date due parole tipo v1 e v2, la MI confronta la probabilità di osservare il bigramma tipo v1, v2 con la probabilità di osservare v1 e v2 l’una indipendentemente dall’altra:
[7.8]
MI(v1,
v2) = log2
p(v1, v2)
p(v1) · p(v2)
dove p(v1, v2) è la probabilità associata al bigramma v1, v2 e p(vi) è la
probabilità della parola vi. Originariamente elaborata nella teoria dell’informazione, dove è conosciuta come mutua informazione puntuale
(pointwise mutual information), la MI tra due eventi aleatori ei ed ej
misura la quantità di informazione (nel senso del CAP. 6) che l’occorrenza di ei fornisce relativamente all’occorrenza di ej. Nel nostro caso,
MI(v1, v2) è una misura di quanto sia indicativa la presenza di v1 nel
testo per prevedere che v2 appaia subito dopo, e viceversa.
La formula [7.8] ha una semplice giustificazione in termini probabilistici. Se due eventi e1 ed e2 sono statisticamente mutuamente indipendenti, allora la loro probabilità congiunta p(e1, e2) = p(e1) · p(e2)
(cfr. PAR. 6.1). Nel nostro caso i due termini di questa uguaglianza
appaiono rispettivamente al numeratore e al denominatore della frazione in [7.8]. Sebbene due parole in un bigramma non siano mai del
tutto indipendenti, possiamo tuttavia ragionevolmente ipotizzare che
maggiore è il valore della frazione in [7.8], più alto è il grado di dipendenza tra v1 e v2, e dunque più forte la loro associazione lessicale.
Un ragionamento analogo può essere usato per giustificare la formula
[7.8] in termini di probabilità condizionate (cfr. PAR. 6.2). Se v1 e v2
sono mutamente indipendenti, p(v2 | v1) = p(v2). Possiamo dunque sti200
7.
ESPLORARE IL TESTO
mare il grado di dipendenza tra v2 e v1 sulla base del rapporto
p(v2 | v1)/p(v2). Poiché infine p(v2 | v1) = p(v1, v2)/p(v1), allora otteniamo che
p(v2 | v1)
[7.9]
p(v2)
=
p(v1, v2)
p(v1) p(v2)
.
Rinviamo al PAR. 6.4 per una spiegazione del ruolo del logaritmo in
base 2 nella formula della MI in [7.8].
Calcolare la MI tra due parole è relativamente semplice. Stimiamo
innanzitutto le probabilità delle singole parole sulla base della loro
frequenza relativa in un corpus C. Analogamente, la probabilità del
bigramma può essere stimata come il rapporto tra la sua frequenza
assoluta in C e il numero totale dei bigrammi unità in C. In questo
modo, la formula [7.8] può essere riscritta come in [7.10], dove Nbig
è il numero dei bigrammi unità in C e |C| è la lunghezza totale di C
in parole.
f (v1, v2)
[7.10]
log2
p(v1, v2)
p(v1) p(v2)
= log2
Nbig
f (v1)
|C|
·
f (v2)
|C|
Se poi assumiamo Nbig = |C| 1, la [7.10] si semplifica come segue:
[7.11]
f (v1, v2)
log2
Nbig
f (v1)
|C|
·
f (v2)
= log2
f (v1, v2)
|C|
·
|C|2
f (v1) f (v2)
= log2
f (v1, v2) · |C|
f (v1) f (v2)
|C|
Applichiamo la [7.11] ad alcuni dei bigrammi in Pinocchio. Un ben
noto personaggio del testo è la fata dai capelli turchini e il bigramma
1. Come si è detto nel PAR. 6.3, se assumiamo che l’ultima parola di un testo T
sia seguita da un simbolo speciale che segna la fine di T, allora il numero dei bigrammi di T è uguale al numero delle parole.
201
TESTO E COMPUTER
TABELLA 7.2
Frequenza e
MI
di tre bigrammi in Pinocchio
il burattino
capelli turchini
maestro ciliegia
f(v1, v2)
f(v1)
f(v2)
|C|
MI(v1, v2)
110
14
7
925
22
17
195
14
9
48770
48770
48770
4,89
11,11
11,12
capelli turchini sembra un buon candidato a entrare tra le collocazioni del libro. I dati relativi alla frequenza del bigramma e delle singole
parole in TAB. 7.2 sono usati nella [7.12] per calcolare la MI tra capelli
e turchini:
[7.12]
MI(capelli,
turchini) = log2
= log2
f (capelli, turchini) · |C|
f (capelli) · f (turchini)
14 · 48770
22 · 14
=
= 11,11
È utile confrontare il risultato della [7.12] con la MI calcolata per il
bigramma il burattino: 4,89. La MI sembra riflettere l’intuizione che il
e burattino siano di fatto molto meno associati lessicalmente rispetto
a capelli e turchini, nonostante che il primo bigramma ricorra in Pinocchio, in termini di frequenze assolute, quasi 10 volte più del secondo. Le stesse considerazioni valgono per il bigramma maestro ciliegia, anch’esso premiato dalla MI in TAB. 7.2. Un basso valore di MI
non significa ovviamente che le parole del bigramma non formano
una struttura sintatticamente connessa, bensì che questa non ha quei
caratteri di convenzionalità d’uso richiesti dall’idiom principle.
Dopo aver valutato la congruenza tra la MI e le nostre intuizioni
sullo status di collocazione di bigrammi specifici, proviamo a usare la
MI per scoprire le collocazioni di un testo. A questo scopo, calcoliamo
la MI per tutti i bigrammi di Pinocchio e ordiniamo questi ultimi per
valori decrescenti di MI 2. I risultati così ottenuti sono in parte inattesi
(TAB. 7.3).
I bigrammi più fortemente associati non corrispondono affatto a
collocazioni (con le uniche, probabili eccezioni di iniqua frode e insa2. La MI per i bigrammi in Pinocchio è stata calcolata con Ngram Statistics Package
v.0.53 di Ted Pedersen, una raccolta di programmi Perl “open source” per il calcolo
delle misure di associazione.
202
7.
TABELLA 7.3
I bigrammi di Pinocchio con la
palio feroce
cartilagine ossea
cam mineremo pian
farteli sputare
sottoposta pianura
iniqua frode
insaziabile voracità
ESPLORARE IL TESTO
MI
più alta
MI
f(v1, v2)
f(v1)
f(v2)
15.5737
15.5737
15.5737
15.5737
15.5737
15.5737
15.5737
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
ziabile voracità), nonostante il loro valore di MI sia sensibilmente maggiore di quello assegnato a capelli turchini e maestro ciliegia. Si noti
che le coppie di TAB. 7.3 sono tutte bigrammi hapax formati da parole
hapax. La MI è infatti estremamente sensibile a eventi rari. In qualsiasi
corpus, i bigrammi con frequenza 1 formati da hapax avranno sempre valori massimi di MI. Per capire il perché, è sufficiente ricordare
che, dato un bigramma v1, v2, il caso di associazione massima si ha
quando v1 e v2 ricorrono sempre insieme nel corpus. In questo caso
vale che f (v1, v2) = f (v1) = f (v2) = f, e dunque la formula [7.11] si può
riscrivere come:
[7.13]
log2
f (v1, v2) · |C|
f (v1) · f (v2)
= log2
f · |C|
f2
dove f 2 è sempre più grande di f: inoltre, al crescere di f, il loro rapporto
inverso diventa sempre più piccolo. Da ciò segue che se due parole v1 e
v2 ricorrono una volta sola in C, il bigramma v1, v2 avrà una MI comunque maggiore di qualsiasi altro bigramma vi, vj con frequenza maggiore
di 1, anche qualora vi e vj apparissero sempre insieme in C. Ad esempio,
in un corpus di 10.000 unità, se f (v1) = f(v2) = 1, MI(v1, v2) = 13,28, mentre se f (v1) = f (v2) = 10, MI(v1, v2) = 9,96.
In realtà, il fatto che due hapax ricorrano una sola volta insieme
nel corpus ci dice molto poco riguardo al loro grado di associazione:
la loro appartenenza allo stesso bigramma può essere del tutto accidentale. Inoltre sembra naturale assumere che se due parole ricorrono in un corpus sempre una accanto all’altra, il loro grado di associazione è direttamente proporzionale alla loro frequenza. Ne concludiamo che la MI non è molto indicativa quando calcolata su bigrammi
rari. Questo limite è aggravato dal ben noto problema della rarità dei
dati linguistici, ovvero dell’enorme numero di eventi rari che registria203
TESTO E COMPUTER
TABELLA 7.4
I dieci bigrammi di Pinocchio con la
gambero rosso
mastr’ antonio
mostro marino
dar retta
ce n’
pover’ uomo
pur troppo
maestro ciliegia
capelli turchini
grillo parlante
MI
più alta e frequenza ≥ 6
MI
F(v1, v2)
f(v1)
f(v2)
12.5737
12.2518
11.5737
11.5440
11.5148
11.1883
11.1814
11.1237
11.1143
10.8188
6
9
6
6
6
10
6
7
14
17
6
9
16
7
10
11
6
17
22
27
8
10
6
14
10
19
21
9
14
17
mo in qualsiasi corpus (cfr. PAR. 5.5). In Pinocchio, ad esempio, i bigrammi hapax sono 18.780 su 24.990 bigrammi tipo. I bigrammi tipo
che ricorrono meno di 5 volte sono invece 23.884! Questo significa
che per la stragrande maggioranza dei bigrammi di un corpus la MI
non è in grado di offrire una stima affidabile del loro grado di associazione.
Per attenuare questa debolezza intrinseca della MI, è sensato stabilire una soglia di frequenza k, in modo da escludere dal computo della forza di associazione tutti i bigrammi con frequenza inferiore a k,
dove k può variare in funzione della lunghezza del testo e del tipo di
analisi. In TAB. 7.4 sono riportati i dieci bigrammi con la MI più alta
in Pinocchio e frequenza ≥ 6.
Oltre ai casi già citati di maestro ciliegia e capelli turchini, troviamo qui la costruzione a verbo supporto dar retta, e i gruppi nominali
mostro marino e grillo parlante. Quest’ultimo bigramma, nell’edizione
originale di Pinocchio, ricorre nella forma grillo-parlante. Nel computo dei bigrammi del testo abbiamo volutamente ignorato il trattino,
considerando dunque il nome come formato da due parole distinte.
È interessante notare che la MI è stata comunque in grado di identificare grillo parlante come uno dei bigrammi più fortemente associati
in Pinocchio, coerentemente con la scelta di Collodi di collegare i costituenti del nome con un trattino. Un caso speculare rispetto a grilloparlante è quello di pur troppo, una variante ortografica di purtroppo
ormai obsoleta, ma correttamente classificata come collocazione nella
tabella. Il bigramma gambero rosso, infine, apparentemente simile al
nostro topolino grigio, indica in realtà il nome dell’osteria in cui Pinocchio si reca a mangiare con il Gatto e la Volpe, e ci ricorda che la
nozione di collocazione deve essere sempre valutata in relazione a un
204
7.
ESPLORARE IL TESTO
particolare uso linguistico. L’applicazione di metodi quantitativi per
la ricerca di associazioni lessicali deve dunque sempre tener presente
il tipo di corpus che viene esplorato e il suo grado di rappresentatività rispetto alla varietà linguistica oggetto di indagine (cfr. PAR. 1.3).
Stabilire una soglia di frequenza per i bigrammi ha lo svantaggio
di ridurre drasticamente la quantità di candidati individuati. Un gran
numero di bigrammi tipo vengono ignorati semplicemente perché ricorrono troppo di rado. Una soluzione alternativa è quella di cercare
di ridurre la “rarità” dei dati ampliando il corpus da cui sono estratti
i bigrammi. Poiché anche i corpora più estesi presentano comunque
un grande numero di eventi linguistici rari, una possibilità ulteriore è
quella di esplorare il web per ottenere stime della probabilità dei bigrammi. Le dimensioni del web permettono di registrare valori di frequenza significativi per un numero molto più alto di bigrammi, tali
da consentire una misura affidabile della loro forza di associazione.
Infine, i limiti della MI possono essere risolti semplicemente ricorrendo ad altre misure di associazione, come la log-likelihood proposta da
Dunning (1993), che si dimostra assai meno sensibile della MI al rumore introdotto da parole rare.
Bigrammi astratti
Un’altra estensione rilevante per il calcolo di associazione lessicale riguarda il modo in cui sono definiti i bigrammi. L’assunzione più comune è di considerare come bigrammi solo coppie di parole adiacenti
nel testo. Questo ci permette di trovare collocazioni come luna piena
o capelli turchini, ma non ad esempio collocazioni formate da più di
due unità: capitano di ventura, ferro da stiro, tirare le cuoia ecc. Per
estendere la tipologia di collocazioni possiamo dunque ampliare la
nozione di bigramma, selezionando, ad esempio, tutte le coppie di
parole che ricorrono all’interno di una stessa finestra di contesto, formata da un numero predefinito di parole. La TAB. 7.5 riporta alcune
collocazioni individuate in Pinocchio usando la MI applicata a bigrammi estratti con una finestra di contesto di tre parole:
TABELLA 7.5
Esempi di collocazioni in Pinocchio calcolate estraendo bigrammi con finestra di
contesto di tre parole
campo miracoli
paese balocchi
MI
f(p1, p2)
f(p1)
f(p2)
9.7157
8.5673
10
7
58
90
20
20
205
TESTO E COMPUTER
TABELLA 7.6
I trigrammi strutturali di Pinocchio con la
MI
più alta e frequenza ≥ 2
(berretto (di midolla di pane))
(osteria (del gambero rosso))
(direttore (di una compagnia di pagliacci))
(ramo (della quercia grande))
(bambina (dai capelli turchini))
(fata (dai capelli turchini))
MI
f(v1, v2)
5.7944
4.2095
5.2095
4.7944
3.0940
3.0940
2
6
3
4
9
9
Il primo caso corrisponde a campo dei miracoli, il nome del campo in
cui Pinocchio seppellisce le monete d’oro. In effetti, in questa espressione il vincolo associativo riguarda le due parole piene campo e miracoli, e lo stesso vale per il secondo esempio, il famigerato paese dei
balocchi. Se si amplia ulteriormente la finestra di testo usata per calcolare i bigrammi, è possibile individuare parole associate a distanze
diverse, esplorando così varie tipologie di relazioni lessicali. Un problema che può sorgere in questo caso (e di cui è importante essere
consapevoli) è che le coppie di parole che fanno parte della stessa
finestra possono anche non essere collegate tra loro. Non è sempre
facile ricostruire il contesto sintattico originario a partire da coppie
non adiacenti così definite.
Una possibile via di uscita passa attraverso la ridefinizione della
nozione di finestra di contesto: non più come sequenza di parole, ma
come porzione di struttura sintattica. Per illustrare concretamente
questa idea, si considerino le locuzioni dare un contributo, dare un
importante contributo e dare un significativo contributo. Se segmentassimo ciascuna locuzione in coppie di parole adiacenti (ad esempio
dare un, un significativo, significativo contributo, nel caso di dare un
significativo contributo), e confrontassimo tra loro le sequenze di bigrammi così ottenute, ci accorgeremmo che le tre espressioni condividono soltanto la coppia dare un. D’altra parte, tutti e tre gli esempi
presentano la stessa struttura sintattica: un verbo seguito da un costituente nominale. Inoltre, il verbo ha esponente lessicale DARE in
tutti e tre i casi. Analogamente, i tre costituenti nominali condividono, come testa lessicale piena, la parola CONTRIBUTO. Se dunque calcoliamo i nostri bigrammi sulla base delle teste lessicali DARE e CONTRIBUTO, scopriamo che le tre locuzioni di partenza si riducono allo
stesso identico bigramma “strutturale”.
I dati di TAB. 7.6 ci mostrano le collocazioni ottenute applicando
la MI a bigrammi strutturali (con frequenza ≥ 2) formati da costituenti
sintattici. È interessante notare che queste espressioni complesse han206
7.
ESPLORARE IL TESTO
no tutte un alto valore di salienza all’interno del libro, per quanto
non tutte possano essere classificate come nomi propri o altamente
convenzionali.
7.5
Conclusioni
L’esplorazione mirata di un testo offre l’opportunità di sondarne
quella che abbiamo chiamato dimensione verticale o strutturale. Ricerche mirate sui contesti linguistici tipici di una parola o di una classe
di parole ci consentono di raccogliere evidenza per ulteriori generalizzazioni, in un processo incrementale che passa attraverso livelli di
analisi linguistica via via più astratti, per pervenire a una rappresentazione, al momento ancora necessariamente parziale, del contenuto del
testo.
Sarebbe comunque riduttivo assegnare all’esplorazione automatica
del testo un ruolo puramente strumentale. È un errore comune ritenere che l’uso di procedure di ricerca automatica risponda al solo
fine di raccogliere tanti dati in pochissimo tempo. Come è accaduto
per altre imprese scientifiche, è ragionevole aspettarsi che l’uso di
strumenti di analisi automatica abbia un grosso impatto sul nostro
modo di guardare alle nozioni di base della linguistica. Abbiamo evidenziato che l’uso congiunto di tecniche automatiche di analisi qualitativa e quantitativa del testo consente di caratterizzare con precisione una classe sfuggente di espressioni linguistiche come le collocazioni, ottenendo così informazioni utili a indagare principi importanti
dell’organizzazione del linguaggio. L’approccio può essere generalizzato ed esteso. Non è vero, ad esempio, che i membri di una classe
linguistica astratta sono tutti ugualmente rappresentativi della stessa.
Osservando la loro distribuzione nel testo è possibile individuare
comportamenti più o meno tipici della classe di appartenenza. Ad
esempio, sebbene due verbi come DECIDERE e OTTENERE siano entrambi classificabili come transitivi, lo studio del loro uso in contesti
linguistici concreti evidenzia una differente propensione a selezionare
un oggetto diretto: DECIDERE manifesta infatti un comportamento
transitivo meno spesso di quanto non faccia OTTENERE 3. A loro volta,
questi comportamenti possono subire l’influenza di altri livelli di
astrazione, in quanto la stessa parola, nella stessa frase, può essere
oggetto di più classificazioni simultanee. Analizzare questa rete com3. Questa differenza è supportata da un’analisi quantitativa effettuata sul corpus
annotato dell’italiano TRESSI (cfr. CAP. 8).
207
TESTO E COMPUTER
plessa di interazioni è un compito che spesso travalica l’intuizione del
linguista. Per quanto le ricerche testuali debbano essere necessariamente guidate da ipotesi formulate su base intuitiva, la verifica empirica di queste ipotesi non può non avvalersi di strumenti di ricerca
automatici e di metodi di analisi quantitativa delle distribuzioni nel
testo.
Questo capitolo ha anche evidenziato come esista una profonda
interdipendenza tra esplorazione e rappresentazione astratta del testo.
Le espressioni regolari sono uno strumento prezioso per definire in
modo formale le istruzioni necessarie all’identificazione di un insieme di contesti da ricercare nel testo. Tuttavia, esse presentano limiti
vistosi nella loro capacità di rappresentare le generalizzazioni linguistiche necessarie per aumentare la precisione della ricerca. Applicare le espressioni regolari un testo annotato permette invece di amplificare in maniera sostanziale le loro potenzialità come strumento
di esplorazione testuale. Anche nel caso delle collocazioni, l’applicazione delle misure di associazione a bigrammi di parole definiti sulla base di criteri linguistici astratti (invece che come semplici sequenze di parole) permette di aumentare la precisione del processo
di estrazione e anche la complessità delle strutture identificate.
Questo però presuppone che si possano applicare le stesse misure a
un corpus che sia stato preventivamente annotato a livello morfologico o sintattico. Le necessità dell’analisi linguistica richiedono spesso di indagare il testo alla ricerca di macrostrutture o di relazioni di
dipendenza strutturale e funzionale; inoltre la nozione stessa di contesto linguistico di una parola non è riducibile a semplici sequenze
lineari di token che la circondano, ma deve tener conto delle relazioni strutturali in cui la parola è inserita. La possibilità di disporre
di un testo annotato su cui le informazioni linguistiche siano esplicitamente codificate non solo consente di rendere più efficaci i metodi quantitativi e qualitativi per esplorarlo, moltiplicando le risposte
che il testo offre alle domande del linguista, ma influenza profondamente queste stesse domande, aprendo nuove prospettive di ricerca
e di analisi.
Per saperne di più
BARNBROOK G.
(1996), Language and Computers: Practical Introduction to the
Computer Analysis of Language, Edinburgh University Press, Edinburgh.
MANNING C. D., SCHÜTZE H. (1999), Foundations of Statistical Natural Language Processing, The MIT Press, Cambridge (MA).
208
7.
ESPLORARE IL TESTO
(2001), Corpus Linguistics, 2nd ed., Edinburgh
University Press, Edinburgh.
SINCLAIR J. (1991), Corpus, Concordance, Collocation, Oxford University
Press, Oxford.
SMADJA F. (1993), Retrieving Collocations from Text: Xtract, in “Computational Linguistics”, n. 19 (1), pp. 143-77.
MCENERY T. E., WILSON A.
Siti web
Computational Approaches to Collocations – http://www.collocations.de.
209
8
L’annotazione linguistica del testo
L’annotazione linguistica di un testo (o annotazione tout court) consiste nella codifica di informazione linguistica associata al dato testuale.
Ad esempio, nel frammento di frase Maestro Ciliegia, falegname, trovò un pezzo di legno possiamo voler rendere esplicito che Maestro Ciliegia è un nome proprio di persona; che pezzo è un nome; oppure
che la sequenza di parole un pezzo di legno è un sintagma nominale;
o ancora che legno, nel contesto specifico, è usato nel senso di materia prima. Possiamo anche voler annotare informazione relazionale:
ad esempio, che Maestro Ciliegia svolge il ruolo di soggetto del verbo
trovare mentre il sintagma nominale un pezzo di legno ne rappresenta
l’oggetto diretto; oppure che sussiste una relazione appositiva tra
Maestro Ciliegia e falegname e così via.
In LC, l’annotazione ha acquistato un ruolo centrale ormai indiscusso, in quanto permette di rendere esplicita, interpretabile ed
esplorabile dal computer la struttura linguistica implicita nel testo
(cfr. CAP. 7). Da questo punto di vista, l’annotazione del testo presenta numerose analogie con la codifica della struttura testuale in titoli, capitoli, capoversi ecc. (CAPP. 2 e 3). Tuttavia, il loro ordine di
complessità è assai diverso. Da un punto di vista linguistico, infatti, i
dati testuali si organizzano su più livelli, caratterizzati da gerarchie
multiple di tratti linguistici, talvolta non perfettamente allineate, in alcuni casi solo parzialmente definite. L’annotazione del testo è dunque
un processo delicato, aperto e incrementale, che investe direttamente
il linguista in più fasi successive e che può avere ripercussioni non
banali sulla sua comprensione dei fenomeni da annotare.
È dunque importante, dal nostro punto di vista, sfatare il pregiudizio diffuso che il ruolo del linguista nell’annotazione testuale si fermi alla definizione del contenuto dello schema di annotazione e che
le modalità della sua applicazione sul testo rappresentino un aspetto
contingente e puramente secondario rispetto alla fase di specifica linguistica. La codifica, secondo noi, è infatti parte integrante del lavoro
211
TESTO E COMPUTER
di specifica dello schema di annotazione e interagisce con quest’ultimo su almeno quattro livelli fondamentali:
– il grado di copertura dello schema, cioè la corrispondenza esatta
tra il novero di categorie e strutture che lo schema offre per annotare
una certa classe di fenomeni e la tipologia dei fenomeni stessi che si
osservano “sul campo”; non è infrequente che l’applicazione di uno
schema al testo evidenzi zone d’ombra nella teoria linguistica sottostante;
– la riproducibilità dell’annotazione, cioè la possibilità di applicarla
in maniera coerente e consensuale a tutti i fenomeni di interesse; la
situazione ideale è quella in cui i criteri di applicazione siano così
univoci e stringenti da consentire a due esperti di annotare in maniera indipendente lo stesso testo allo stesso modo: non sempre è così;
– l’interazione con altri livelli di descrizione; in questo caso evidenziare correlazioni tra due annotazioni relative a livelli differenti di
analisi linguistica è altrettanto significativo che osservare accavallamenti e potenziali contraddizioni; è possibile, in teoria, che un nuovo
livello di annotazione si possa interamente ricondurre all’interazione
di due livelli preesistenti;
– il grado di espressività dell’annotazione; la traduzione di uno schema in un linguaggio di marcatura (basato ad esempio su XML) pone
problemi ripetuti riguardo ai tipi di rappresentazione che devono essere impiegati affinché la traduzione sia formalmente corretta e rispondente agli scopi del linguista; questo processo non è mai banale e
può rivelare oscurità o ridondanze nello schema; in molti casi, il risultato è una formulazione più rigorosa dello schema stesso.
Quest’ultimo punto ci sembra particolarmente importante. Un testo, infatti, può essere descritto e caratterizzato da molteplici punti di
vista. Tipicamente, l’annotazione avviene in relazione ai tradizionali
livelli di descrizione linguistica: morfologia, sintassi, semantica ecc.
Come vedremo nella prossima sezione, ciascuno di questi livelli pone
effettivamente problemi specifici di rappresentazione dell’informazione sul testo. D’altro canto, però, descrivere l’annotazione linguistica
solo in termini dei livelli linguistici coinvolti rischia di far perdere di
vista importanti generalizzazioni. Alcuni tipi di informazione pongono
problemi di annotazione simili, anche se appartengono a livelli di descrizione linguistica diversi come la morfologia o la semantica; viceversa, altri tipi di informazione sollevano questioni di rappresentazione molto differenti, anche se questi tipi sono tradizionalmente accomunati sotto la stessa etichetta. È dunque quanto meno riduttivo affrontare il tema dell’annotazione come se si scorressero i capitoli di un
212
8.
L ’ ANNOTAZIONE LINGUISTICA DEL TESTO
manuale di linguistica. Per tale motivo, in questo capitolo vogliamo
trattare aspetti di annotazione ortogonali rispetto ai livelli linguistici,
per concentrarci sui problemi che tipi differenti di informazione linguistica pongono per la loro annotazione nel testo (cfr. PARR. 8.3 e 8.4).
8.1
Livelli di annotazione
Tratteggiamo di seguito le caratteristiche essenziali dei più comuni e
diffusi livelli di annotazione linguistica del testo. Coerentemente con
la nostra scelta di concentrarci su aspetti linguistici per quanto possibile neutrali rispetto a modalità comunicative specifiche (cfr. Introduzione), restano esclusi da questa sintesi quei livelli di annotazione che
si basano su trascrizioni non ortografiche del testo, come ad esempio
i diversi tipi di trascrizioni fonologiche del parlato o gli schemi di
annotazione prosodica.
8.1.1. Annotazione morfo-sintattica
L’annotazione morfo-sintattica rappresenta la forma basilare e più comune di annotazione linguistica, presupposta dalla maggior parte degli altri livelli di annotazione. Lo scopo dell’annotazione morfo-sintattica è l’assegnazione, a ogni parola (o token) del testo, dell’informazione relativa alla categoria grammaticale (o parte del discorso) che
la parola ha nel contesto specifico (ad esempio nome, verbo, aggettivo). Questa informazione viene talora integrata da ulteriori specificazioni morfologiche (ad esempio riguardanti categorie morfo-sintattiche come persona, genere, numero ecc.). È a questo livello che vengono risolte omografie riguardanti le parti del discorso. Ad esempio,
la forma omografa stato, quando considerata al di fuori del suo contesto di occorrenza, è suscettibile di due diverse classificazioni grammaticali, quella di nome e quella di verbo. Quando invece la forma
appare nel contesto Pinocchio è stato buono, l’omografia è risolta a
favore dell’accezione verbale, la sola possibile in questo contesto.
L’annotazione morfo-sintattica è spesso combinata con l’annotazione per lemma (o lemmatizzazione) che consiste nel ricondurre ogni
parola del testo al relativo esponente lessicale o lemma (tipicamente
l’infinito per i verbi, oppure il singolare maschile per gli aggettivi,
corrispondente approssimativamente all’esponente lessicale delle voci
di un dizionario). Si tratta di due livelli di annotazione distinti ma
strettamente correlati, in quanto l’identificazione del lemma rilevante
213
TESTO E COMPUTER
presuppone la classificazione grammaticale della parola nel contesto
specifico. Per questo motivo, la lemmatizzazione viene spesso trattata
come naturale estensione dell’annotazione morfo-sintattica.
L’informazione relativa alla categoria grammaticale delle parole
nel loro contesto di occorrenza rappresenta il prerequisito fondamentale per aumentare la precisione nel recupero delle informazioni da
un testo annotato (ad esempio è possibile recuperare tutte le occorrenze di stato come nome), e costituisce il prerequisito fondamentale
per ulteriori livelli di annotazione come quella sintattica e semantica
(cfr. infra). La lemmatizzazione permette invece di effettuare ricerche
che astraggono da variazioni di tipo morfologico, riguardanti sia la
morfologia flessionale sia quella derivazionale: ad esempio, a partire
dal lemma COSTRUIRE è possibile recuperare tutte le forme ad esso
riconducibili, flesse (ad esempio costruisco, costruito, costruiva ecc.) e
derivate (ad esempio costruzione, ricostruzione, ricostruibile).
8.1.2. Annotazione sintattica
Con il termine di annotazione sintattica ci riferiamo alla codifica di
informazione relativa all’analisi sintattica delle frasi di un testo. Questo tipo di annotazione risente fortemente dei diversi approcci teorici
alla sintassi, che spesso si correlano a modi differenti di rappresentare
la struttura di una frase. Al di là delle particolarità delle diverse teorie, è comunque possibile identificare due principali approcci alla
rappresentazione sintattica nei corpora:
– rappresentazioni a costituenti, basate sull’identificazione di costituenti sintattici (ad esempio sintagmi nominali, sintagmi verbali, sintagmi preposizionali ecc.) e delle loro relazioni di incassamento gerarchico;
– rappresentazioni a dipendenze o funzionali, che forniscono una descrizione della frase in termini di relazioni binarie di dipendenza tra
parole che indicano relazioni grammaticali come soggetto, oggetto diretto, modificatore ecc.
All’interno di questi due approcci, lo spettro di variazione nella
definizione di schemi di annotazione è comunque molto ampio: ad
esempio, può riguardare la tipologia di costituenti e/o relazioni sintattiche identificate così come la combinazione all’interno dello stesso
schema di informazione sintagmatica e funzionale.
Un testo annotato sintatticamente diventa suscettibile di molte
forme di esplorazione e analisi avanzata. È possibile interrogare il testo per acquisire informazioni sui contesti sintattici tipicamente sele214
8.
L ’ ANNOTAZIONE LINGUISTICA DEL TESTO
zionati da una parola: ad esempio possiamo cercare tutti gli usi transitivi del verbo DECIDERE, ovvero quando il verbo ricorre con un
complemento oggetto. Allo stesso modo, un testo annotato può anche essere esplorato alla ricerca di intere costruzioni sintattiche, come
le frasi pseudo-scisse (ad esempio ciò che desidero è un gelato), le frasi
relative introdotte da che, le frasi passive.
8.1.3. Annotazione semantica
L’annotazione semantica riguarda la codifica esplicita del significato o
contenuto semantico delle espressioni linguistiche di un testo. Le forme che può assumere l’annotazione semantica sono molteplici proprio in relazione alla complessità (e anche intrinseca vaghezza) inerente alla nozione di significato.
Un primo tipo di annotazione riguarda la classificazione delle parole lessicalmente piene di un testo rispetto a categorie semanticoconcettuali predefinite, che ne catturano tratti salienti del loro significato. Queste ultime possono spaziare da categorie generali come PERSONA, LUOGO, ASTRATTO, ANIMATO, EVENTO, DINAMICO ecc. fino a
classificazioni a grana molto più fine, per esempio corrispondenti alle
distinzioni di senso desunte da una risorsa lessicale di riferimento
(come un dizionario).
Un’altra modalità di annotazione semantica – che può anche combinarsi con la precedente – riguarda la marcatura nel testo dei ruoli
semantici (o ruoli tematici); questi descrivono la funzione semantica
svolta da un certo costituente nell’evento espresso dal predicato di
cui è argomento. Ad esempio, nella frase Pinocchio è stato ingoiato da
un pescecane, al nome Pinocchio può essere assegnato il ruolo semantico di Paziente dell’evento espresso dal predicato INGOIARE, mentre a
un pescecane può essere assegnato il ruolo di Agente dello stesso
evento. Oltre ad Agente e Paziente alcuni dei ruoli semantici più comunemente usati sono Tema, Destinatario, Esperiente ecc. Spesso,
però, l’annotazione avviene con categorie che descrivono ruoli semantici molto più specifici associati a classi ristrette di eventi (ad esempio
Compratore e Acquirente in verbi come COMPRARE, VENDERE ecc.).
L’annotazione semantica di un testo consente di aumentare la
precisione delle ricerche testuali, evitando il “rumore” causato da
eventuali ambiguità semantiche: ad esempio è possibile cercare in un
corpus tutte le occorrenze della parola borsa in quanto OGGETTO
CONCRETO, escludendo le occorrenze della stessa parola come ISTITUZIONE. Inoltre, l’annotazione semantica permette di studiare come i
215
TESTO E COMPUTER
sensi di una parola si distribuiscono in relazione a specifici contesti
sintattici; in maniera simile, la codifica dei ruoli semantici consente di
acquisire informazione utile a costruire modelli della struttura argomentale dei termini lessicali predicativi e dei vincoli semantici che
operano sui loro argomenti.
8.1.4. Annotazione pragmatica
Un livello ulteriore di codifica linguistica riguarda informazioni di
tipo pragmatico. L’annotazione pragmatica comprende sotto di sé fenomeni che riguardano la funzione comunicativa di una particolare
unità linguistica, oppure relazioni che coinvolgono strutture linguistiche spesso al di sopra della frase, costitutive della struttura del discorso o della macro-organizzazione linguistica del testo.
Uno dei principali tipi di annotazione pragmatica riguarda l’identificazione della funzione illocutoria (ad esempio richiesta, asserzione,
domanda, promessa ecc.) di un particolare segmento testuale. Questo
tipo di annotazione è applicata essenzialmente alle codifiche di trascrizioni di parlato, in particolare di tipo dialogico. Si consideri ad
esempio il seguente frammento di dialogo tra due parlanti:
A: Vuoi una sigaretta?
B: Ho smesso ieri.
In questo caso, l’annotazione pragmatica può assegnare la funzione
OFFERTA all’enunciato del parlante A, e la funzione di RIFIUTO all’enunciato del parlante B.
Un altro tipo di annotazione che si colloca al livello del discorso
riguarda la marcatura delle relazioni tra un aggettivo o un pronome e
il suo antecedente, di cui sono un esempio le relazioni anaforiche. Ad
esempio in Maestro Ciliegia regala il pezzo di legno al suo amico Geppetto, l’antecedente dell’aggettivo possessivo suo è il nome Maestro Ciliegia. L’annotazione di questo tipo di relazioni è molto importante
per lo studio dei meccanismi di mantenimento e gestione della coerenza testuale. Infine, vale la pena di segnalare l’annotazione delle frasi di un testo relativamente alla loro funzione retorica. Ad esempio,
una frase può avere la funzione di introduzione o conclusione di
un’argomentazione, può descrivere la causa di un evento o un suo
effetto. Arricchire un testo con tali informazioni lo predispone a
esplorazioni avanzate finalizzate allo studio dell’organizzazione del testo e della struttura del discorso.
216
8.
L ’ ANNOTAZIONE LINGUISTICA DEL TESTO
8.2
Corpora annotati
I corpora annotati sono collezioni di dati testuali arricchiti con uno o
più livelli di annotazione linguistica. Nella LC si è infatti affermata
sempre di più l’importanza di avere corpora non solo come fonti di
dati grezzi, ma come collezioni di testi riccamente annotati da usare
sia come risorsa di informazione per lo sviluppo di tecnologie linguistiche, sia per ricerche ed esplorazioni avanzate sulla lingua. L’annotazione morfo-sintattica rappresenta una sorta di annotazione di livello base, per molti aspetti quasi elementare. È stata la prima forma di
annotazione di corpora e ormai quella sicuramente più comune. Questo è anche legato all’esistenza di strumenti automatici (noti come
part-of-speech taggers o disambiguatori morfo-sintattici; cfr. PAR. 9.3)
che consentono di annotare porzioni estese di testo. Anche se questi
strumenti hanno un certo tasso di errore, la loro affidabilità è comunque molto alta e permette di ridurre l’intervento dell’annotatore
solo alla fase di revisione manuale. Il Brown Corpus è stato il primo
esempio di corpus annotato automaticamente a livello morfo-sintattico all’inizio degli anni settanta, usando il programma TAGGIT; anche
il British National Corpus è stato interamente annotato a questo livello, sempre automaticamente. Per l’italiano, vale la pena ricordare
che il corpus La Repubblica è anch’esso annotato a livello morfo-sintattico, così come lo è una porzione del corpus di Parole. In generale,
possiamo dire che l’annotazione a livello morfo-sintattico rappresenta
quasi uno standard per tutti i corpora più recenti sia di lingua scritta
che di parlato.
I corpora annotati a livello sintattico sono invece un prodotto più
recente. Questi tipi di corpora sono comunemente noti come treebanks (letteralmente, banche di alberi sintattici). Questo nome è dovuto al fatto che i primi corpora rappresentavano la struttura sintattica delle frasi come un albero a costituenti; ormai però il nome di
treebank è usato per qualsiasi corpus annotato a livello sintattico, indipendentemente dal tipo di schema di annotazione usato. Le prime
treebank, sono nate in Inghilterra nella metà degli anni ottanta, ma
hanno acquistato rapidamente fortuna in tutta la comunità della LC.
Una delle treebank, più note è la Penn Treebank, realizzata a partire
dalla seconda metà degli anni ottanta all’università della Pennsylvania
(USA). In origine, comprendeva il Brown Corpus annotato con una
struttura a costituenti sottospecificata (detta skeleton parsing); la
quantità di materiale annotato è successivamente aumentata, anche
con tipologie diverse di testi (ad esempio il “Wall Street Journal”).
217
TESTO E COMPUTER
Inoltre nella seconda versione di questo corpus, PennTreebank-II, anche lo schema di annotazione è cambiato per consentire la rappresentazione di aspetti della struttura predicativa della frase. La Bank of
English è stata invece annotata a livello sintattico secondo uno schema a dipendenze. Per l’italiano la più grande treebank attualmente
disponibile è TRESSI (Treebank sintattico-semantica dell’italiano): si
tratta in realtà di un corpus annotato sia a costituenti che a dipendenze, dove l’annotazione è articolata su livelli distinti ma interrelati.
La TUT (Turin University Treebank) è invece interamente annotata secondo uno schema a dipendenze, ma è di dimensioni più limitate.
Nel caso dei corpora annotati a livello sintattico i metodi di annotazione differiscono molto: si va da realizzazioni completamente manuali, a tentativi di automatizzare l’annotazione usando programmi
per l’analisi sintattica automatica (o parser). A differenza però del livello morfo-sintattico, il livello di intervento richiesto all’annotatore è
sempre sostenuto, a causa del maggior tasso di errori compiuto dai
parser. Il numero di lingue per le quali sono disponibili treebank e
anche la tipologia di queste è in continuo aumento: ad esempio, per
il tedesco possiamo citare il corpus NEGRA, per lo spagnolo la UAM
Spanish Treebank, per il ceco la Prague Dependency Treebank. Per ulteriori dettagli, rimandiamo il lettore interessato ad Abeillé (2003),
che rappresenta una delle più complete rassegne delle treebank attualmente disponibili per varie lingue e delle problematiche connesse
a questo tipo di corpus annotato.
Ancora più nuova è l’idea dei corpora annotati a livello semantico. L’apripista in questo caso è stato SemCor, ovvero una porzione
del Brown Corpus in cui nomi, verbi e aggettivi sono stati annotati
con il loro senso, usando come risorsa di riferimento WordNet, un
lessico computazionale per l’inglese americano sviluppato a Princeton
(USA). Per l’italiano, TRESSI ha anche un livello di annotazione semantica, con sensi desunti da ItalWordNet, un lessico computazionale italiano costruito secondo i principi di WordNet. Sempre per l’italiano,
possiamo citare MultiSemCor, un corpus multilingue annotato a livello semantico. Per quanto riguarda l’annotazione con ruoli semantici,
il primo e più famoso esempio è FrameNet, in cui un sottoinsieme
del British National Corpus è stato annotato con informazione relativa
ai ruoli semantici. Nonostante la creazione di corpora annotati al livello semantico non possa allo stato dell’arte che essere condotta manualmente, la loro importanza sta crescendo velocemente. Esistono
infatti molte iniziative internazionali per la creazione di risorse testuali annotate con vari tipi di informazione semantica: ad esempio, classi
semantiche generali (come persona, luogo, istituzione ecc.), oppure
218
8.
L ’ ANNOTAZIONE LINGUISTICA DEL TESTO
informazione di tipo temporale ecc. Ancora più pionieristica è l’annotazione a livello pragmatico. Per l’italiano possiamo citare i corpora
dialogici del progetto SI-TAL, annotati a più livelli (anche sintattico e
semantico) e comprensivi di un livello di annotazione pragmatica per
quanto riguarda l’assegnazione della funzione illocutoria agli enunciati. È comunque impossibile fare una lista esaustiva delle iniziative in
corso nel campo della costruzione di corpora annotati. Il campo si sta
estendendo rapidamente con una molteplice sfida: costruire corpora
testuali sempre più riccamente annotati, generalmente con informazione multi-livello; velocizzare e automatizzare per quanto possibile i
meccanismi di annotazione per ridurre i tempi e i costi di sviluppo di
questi corpora, che rimangono in molti casi comunque molto elevati;
adottare, ove possibile, rappresentazioni standardizzate (cfr. PAR.
8.6).
8.3
“Anatomia” di uno schema di annotazione
Abbiamo visto che i livelli di annotazione corrispondono, con buona
approssimazione, ai livelli di descrizione linguistica. Per ciascun livello, i caratteri peculiari di uno schema di annotazione sono determinati da fattori diversi quali: i. gli scopi della ricerca e/o applicazione per
la quale il corpus annotato è progettato; ii. la teoria linguistica di riferimento per la rappresentazione di un certo tipo di informazione linguistica; iii. la modalità (ad esempio manuale, semiautomatica ecc.)
con cui l’annotazione viene effettuata e le risorse umane e temporali
disponibili per l’attività di annotazione; iv. la “granularità” della descrizione linguistica che intendiamo codificare nel testo; v. le caratteristiche stesse della lingua dei testi da annotare ecc. La conseguenza
immediata di questi “gradi di libertà” è l’esistenza di molteplici schemi di annotazione linguistica per ciascuno dei livelli discussi nel PAR.
8.1. Ad esempio, nel caso della morfo-sintassi gli schemi di annotazione possono differire per il numero di categorie grammaticali o per
la caratterizzazione dei tratti morfologici. Inoltre, a seconda della lingua, i tratti morfologici rilevanti possono essere diversi, o richiedere
livelli di granularità differenti nella loro definizione (ad esempio si
pensi al ruolo diverso che il tratto morfo-sintattico di caso svolge nella descrizione di una lingua come il finnico e in una lingua come l’italiano). Simili considerazioni si applicano naturalmente anche alla sintassi, alla semantica e alla pragmatica.
Nonostante il panorama dell’annotazione linguistica e dei corpora
annotati appaia dunque improntato alla più ampia variabilità, tuttavia
219
TESTO E COMPUTER
è possibile fare astrazione dagli aspetti peculiari di un particolare
schema di annotazione per concentrare la nostra attenzione su alcuni
tratti invarianti. A un attento esame, infatti, si scopre che al di là dei
tratti di variabilità individuale, ciascuno schema di annotazione può
essere in realtà visto come la risultante della combinazione di un ristretto insieme di tipi di informazione linguistica di base, che sono anche trasversali ai livelli di analisi linguistica. Questi tipi di informazione sono gli elementi portanti della “struttura anatomica” di uno schema di annotazione, ciò che ne identifica per così dire i tratti essenziali, la sua “fisionomia” e la sua “espressività” come strumento per la
codifica di informazione linguistica. Gli “ingredienti di base” dell’annotazione possono essere identificati nei seguenti tipi di informazione
linguistica:
– informazione categoriale: l’assegnazione di categorie alle unità e relazioni linguistiche identificate in un testo (ad esempio verbo, sintagma nominale, soggetto ecc.);
– informazione strutturale: l’identificazione nel testo di strutture che
possono o essere interne a un particolare token (ad esempio la sua
articolazione in morfermi) o raggruppare più token (ad esempio i costituenti dell’annotazione sintattica);
– informazione relazionale: la definizione di relazioni tra le unità linguistiche identificate, come le relazioni di dipendenza sintattica (ad
esempio soggetto e oggetto diretto), oppure le relazioni anaforiche o i
ruoli semantici.
Concentrarsi su questi tipi di base e sul modo in cui essi si combinano ci fornisce una chiave di lettura importante delle caratteristiche di uno schema di annotazione. Per valutare l’adeguatezza di uno
schema di annotazione per i propri scopi, è necessario che il linguista
lo analizzi proprio rispetto a questi tratti costituivi essenziali, e lo
confronti con altri schemi concentrandosi su similarità e differenze
sostanziali, e non basandosi su somiglianze o differenze superficiali.
8.3.1. Annotazione e informazione categoriale
Nell’annotazione linguistica, l’informazione categoriale è tipicamente
espressa nella forma di etichette che associano categorie o tratti linguistici alle unità identificate nel testo, così come alle loro relazioni.
Vediamo il ruolo di questo tipo di informazione nei vari livelli di
annotazione.
L’annotazione morfo-sintattica, si basa primariamente sull’informazione categoriale. Si consideri l’esempio seguente:
220
8.
[8.1]
L ’ ANNOTAZIONE LINGUISTICA DEL TESTO
Maestro_Ciliegia/N ,/PUN falegname/N ,/PUN trovò/V un/ART
pezzo/N di/PREP legno/N
dove ogni token è seguito dalla categoria grammaticale rilevante nel
contesto specifico (N sta per nome, V per verbo, ART per articolo,
PREP per preposizione e PUN per punteggiatura).
Il repertorio di categorie usato per l’annotazione può variare per
il dettaglio di informazione convogliata, che è a sua volta funzionale
agli scopi della ricerca e agli usi prospettati per il testo annotato. Ad
esempio, l’informazione relativa alla categoria grammaticale può venire integrata da ulteriori specificazioni morfologiche, riguardanti tratti
linguistici quali genere, numero, persona, tempo, modo ecc. che possono essere espresse in modi diversi: ad esempio tramite un’etichetta
sintetica che combina i diversi tipi di informazione oppure separatamente (cfr. PAR. 8.4.1). Analogamente, le categorie grammaticali di
base selezionate possono essere articolate in sottoclassi: ad esempio,
la categoria dei sostantivi può essere suddivisa in nomi propri e nomi
comuni, quella dei pronomi in pronomi personali, possessivi, indefiniti, dimostrativi, clitici ecc. Riproponiamo di seguito la frase in [8.1]
con un’etichettatura basata su una classificazione a grana più fine:
[8.2]
Maestro_Ciliegia/NP_MS ,/PUN falegname/NC_MS ,/PUN
trovò/V_ S3IR un/ARTI_MS pezzo/NC_MS di/PREP legno/NC_MS
dove NP sta per nome proprio, NC sta per nome comune e ARTI per articolo indefinito e dove le categorie grammaticali sono integrate da specificazioni relative alle categorie morfo-sintattiche (MS significa maschile
singolare e S3IR passato remoto indicativo terza persona singolare).
Anche l’annotazione del lemma (o lemmatizzazione) è riconducibile a questo tipo di informazione: il lemma si presenta come la categoria lessicale astratta che accomuna tutte le forme flesse a esso riconducibili. Al tipo di informazione categoriale può essere anche ricondotto il caso dell’annotazione semantica, intesa come classificazione delle parole in base al loro significato in un contesto specifico. In
questo caso l’etichetta può essere costituita da categorie che vanno da
classi generali come CONCRETO, ASTRATTO ecc. fino all’indicazione del
senso lessicale così come appare in un dizionario di riferimento. Ad
esempio, alla parola legno in [8.2] può essere semplicemente assegnata l’etichetta CONCRETO, oppure il senso 2 dell’entrata legno nel Dizionario della lingua italiana De Mauro Paravia, glossato come «materia
prima fornita dagli alberi, usata come materiale da costruzione, per
lavori di falegnameria, come combustibile ecc.».
221
TESTO E COMPUTER
L’informazione di tipo categoriale entra in gioco anche per altri
livelli di annotazione linguistica. Si ricorre a essa per la categorizzazione dei costituenti sintattici (ad esempio sintagma verbale, sintagma
nominale ecc.), così come per la classificazione delle relazioni di dipendenza sintattica in soggetto, oggetto diretto ecc. e dei ruoli semantici.
8.3.2. Annotazione e informazione strutturale
L’informazione strutturale riguarda l’identificazione delle unità strutturali del testo (sia internamente al singolo token sia tra token diversi) e la loro organizzazione in strutture gerarchiche.
Ad esempio, possiamo annotare un testo segmentando le sue parole in morfemi: in questo caso si parla di annotazione morfemica. La
forma verbale trovò può essere segmentata nella radice trov (portatrice del significato del lemma TROVARE) seguita dalla terminazione
flessionale ò (portatrice dell’informazione morfo-sintattica “prima persona singolare del passato remoto indicativo”).
Lo stesso tipo di informazione strutturale può essere usata per
rappresentare token che inglobano al loro interno due o più unità
morfo-lessicali. Ad esempio all’interno di una forma verbale con clitico come mangiarlo possono essere identificate un’unità riconducibile
al lemma verbale MANGIARE e un’altra corrispondente al pronome clitico LO. Analogo trattamento può essere ipotizzato per una preposizione articolata come al che può essere analizzata come risultante dalla combinazione di una preposizione semplice (A) con un articolo definito (IL).
Un primo esempio di raggruppamento di più token in unità strutturalmente complesse riguarda l’annotazione delle espressioni multilessicali che non siano già state trattate come unità complesse al momento della tokenizzazione del testo (cfr. PAR. 4.1.1). Le espressioni
multilessicali sono costituite da sequenze di più parole che formano
un’unità di annotazione o a livello morfo-sintattico o a livello semantico. Esempi tipici sono i composti nominali come carta di credito o
camera oscura, caratterizzati da una parziale, talora totale, non composizionalità semantica, alla quale si affianca un elevato grado di variabilità al livello morfologico.
Le strutture definite per la rappresentazione delle espressioni multilessicali sono “piatte”, essendo semplicemente costituite da sequenze
di token. Ma la tipologia di strutture che vanno “oltre” i token del
testo può essere ben più complessa e includere strutture con incassa222
8.
L ’ ANNOTAZIONE LINGUISTICA DEL TESTO
menti multipli. Ciò si verifica tipicamente nel caso dell’annotazione
sintattica a costituenti.
Nell’annotazione a costituenti le sequenze di token in una frase
sono raggruppate in strutture progressivamente più ampie o costituenti sintattici. Una rappresentazione sintattica a costituenti si basa
sull’identificazione di costituenti e sulle loro relazioni di incassamento
gerarchico, come esemplificato di seguito:
[8.3] [ [[Maestro Ciliegia]
[falegname]]
[[trovò]
[[un pezzo]
[di [legno]]]]]
dove le strutture linguistiche identificate – i costituenti sintattici –
sono racchiuse tra parentesi quadre e le relazioni di incassamento gerarchico sono rappresentate attraverso l’inclusione di un segmento
più piccolo all’interno di un segmento più grande fino ad arrivare al
costituente che racchiude l’intera frase.
8.3.3. Annotazione e informazione relazionale
L’informazione relazionale collega tra loro unità linguistiche previamente identificate (ad esempio token, unità morfo-lessicali, costituenti
sintattici). È attraverso questo tipo di informazione che possono essere annotate relazioni di dipendenza (ad esempio soggetto, oggetto diretto ecc.) e i ruoli semantici (come agente, paziente ecc.). Lo stesso
tipo di informazione è anche alla base della rappresentazione di costituenti discontinui (ad esempio espressioni multilessicali discontinue) e di tutte quelle relazioni tra unità linguistiche che si fondano
sul meccanismo della “coindicizzazione” (ad esempio la relazione tra
un pronome e il suo antecedente, cfr. infra).
Consideriamo la rappresentazione sintattica di FIG. 8.1, nella
8.1
Rappresentazione a dipendenze
FIGUR A
Maestro Ciliegia,
falegname, trovò
223
un
pezzo
di
legno
TESTO E COMPUTER
quale la frase viene descritta in termini di relazioni binarie asimmetriche di dipendenza tra una parola, che svolge il ruolo di testa, e
una parola, che ne costituisce il dipendente. Nella figura le relazioni
di dipendenza sono rappresentate come frecce che vanno dal dipendente alla testa. Ad esempio, Maestro Ciliegia e pezzo sono dipendenti della testa verbale trovò. Lo stesso tipo di informazione è alla
base della rappresentazione dei ruoli semantici tra parole o costituenti. Ad esempio, attraverso informazione relazionale si può rendere conto del fatto che pezzo (o un pezzo di legno) si correla a trovò come Paziente.
Si ricorre abitualmente a informazione di tipo relazionale anche
per rappresentare unità linguistiche discontinue, ovvero quando si voglia ricondurre a una stessa unità token che nel testo non appaiono
uno di seguito all’altro. Prendiamo ad esempio la frase Fra tutti i mestieri del mondo non ce n’è che uno solo, che mi vada veramente a
genio: possiamo osservare che l’avverbio veramente è inserito all’interno dell’espressione multilessicale vada a genio. Per poter annotare
che l’espressione vada a genio costituisce un’unità semantica, abbiamo bisogno di poter stabilire delle relazioni a distanza tra le sue sottoparti.
È basata su informazione relazionale anche la rappresentazione di
tutti quei fenomeni e costruzioni che nella letteratura linguistica sono
trattati attraverso il meccanismo della coindicizzazione. In termini
molto generali, possiamo dire che due o più elementi della struttura
linguistica (più precisamente sintattica) si dicono coindicizzati quando
si riferiscono alla stessa entità; ciò viene rappresentato esplicitamente
associando lo stesso indice ai singoli elementi. La coindicizzazione interviene a rappresentare costruzioni e fenomeni alquanto diversi.
Consideriamo a scopo esemplificativo il caso delle relazioni tra un
pronome o un aggettivo e il suo antecedente nel seguente frammento
di testo, dove gli elementi sottolineati e seguiti dallo stesso indice si
riferiscono alla stessa entità.
[8.4]
Maestro Ciliegia h regala il pezzo di legno i al suo h amico Geppetto j , il quale j lo i prende per fabbricarsi un burattino maraviglioso k che k sappia ballare, tirar di scherma e fare i salti mortali.
La relazione sussistente tra un riferimento anaforico (ad esempio un
pronome clitico) e il suo antecedente rientra nella classe di informazioni relazionali che possono essere annotate nel testo.
224
8.
L ’ ANNOTAZIONE LINGUISTICA DEL TESTO
8.3.4. Tipi di informazione di base e schemi di annotazione
Raramente questi tipi di informazione si presentano allo stato puro
all’interno di uno schema di annotazione. Molto più frequentemente
avviene che uno schema di annotazione sia la risultante della combinazione di più tipi. Il luogo ideale per osservare questo tipo di “contaminazione” è il caso dell’annotazione sintattica.
Al cuore dell’annotazione sintattica a costituenti c’è informazione
di tipo strutturale, che riguarda l’identificazione dei costituenti e delle
loro relazioni di incassamento gerarchico. Tuttavia l’informazione di
tipo strutturale non è sufficiente, da sola, a descrivere in modo adeguato la struttura sintattica di una frase. A questa deve affiancarsi informazione di tipo categoriale che assegna a ogni costituente identificato la corrispondente categoria sintattica. Riportiamo di seguito il risultato di questa combinazione per la frase strutturata in costituenti
in [8.3]:
[8.5]
F[ SN[ SN[Maestro Ciliegia]SN SN[falegname]SN ]SN
[
[trovò]
SV V
V SN[ SN[un pezzo]SN SP[di SN[legno]SN ]SP ]SN ]SV ]F
dove a ogni costituente è associata un’etichetta: SN per sintagma nominale, SP per sintagma preposizionale, SV per sintagma verbale, V
per verbo e F per frase. Questo è il tipo di rappresentazione sintattica
adottata in TRESSI.
Vi sono schemi di annotazione dove la categorizzazione dei costituenti può includere altra informazione. Questo è il caso della
Penn Treebank-II dove, per quanto le relazioni grammaticali siano codificate attraverso la struttura a costituenti della frase 1, viene fatto
ricorso a informazione di tipo categoriale per la codifica di alcune
funzioni grammaticali (talora non facilmente rintracciabili nella struttura della frase) come, ad esempio, quella di soggetto “logico”, di
complemento predicativo o di soggetto “superficiale” (Marcus et al.,
1994). Secondo questo approccio, la frase annotata in [8.5] verrebbe
rappresentata come segue:
1. Il soggetto è il sintagma nominale immediatamente dominato dal nodo di frase; l’oggetto diretto è il sintagma nominale immediatamente dominato dal sintagma
verbale.
225
TESTO E COMPUTER
[8.6] F[ SN_SOGG[ SN[Maestro Ciliegia]SN SN[falegname]SN ]SN_SOGG
SV[ V[trovò]V SN[ SN[un
pezzo]SN SP[di
SN[legno]SN
]SP ]SN ]SV ]F
dove la funzione di soggetto del sintagma nominale Maestro Ciliegia
falegname è marcata attraverso l’etichetta funzionale SOGG accodata
alla categoria sintattica SN. In altri corpora annotati a costituenti,
come ad esempio il corpus tedesco NEGRA, l’informazione relativa alle
funzioni grammaticali è sistematicamente codificata con etichette funzionali associate ai costituenti della frase; ciò è legato al fatto che una
lingua come il tedesco è caratterizzata da un’alta variabilità al livello
dell’ordine dei costituenti della frase, per cui una rappresentazione
delle relazioni grammaticali in termini configurazionali appare difficilmente praticabile. La stessa combinazione di informazione strutturale (relativa ai costituenti sintattici) e informazione categoriale (questa volta relativa ai ruoli semantici, cfr. PAR. 8.1.3) si ritrova nello
schema di annotazione semantica di FrameNet.
Uno schema di annotazione a costituenti può anche includere informazione relazionale. Consideriamo di nuovo il caso della Penn
Treebank-II, che ricorre a informazione relazionale per rappresentare
una varietà di fenomeni e costruzioni sintattiche tra le quali il soggetto non foneticamente espresso di costruzioni infinitivali. Una frase
come Pinocchio cominciò a camminare da sé secondo lo schema della
Penn Treebank-II verrebbe annotata come segue:
[8.7]
F[ SN_SOGG_1[Pinocchio]SN_SOGG_1 SV[ V[cominciò]V F[
a
[]
[
[camminare]
[da
sé]
]
]
]
SN_SOGG_1
SN_SOGG_1 SV V
V SP
SP SV F SV ]F
dove la posizione vuota di soggetto della frase infinitiva è coindicizzata con il soggetto della frase che regge l’infinitiva. Ciò indica che la
posizione vuota e l’SN coindicizzato si riferiscono alla stessa entità
(ovvero Pinocchio).
Abbiamo visto che un’alternativa alla rappresentazione sintattica a
costituenti è data da una rappresentazione a dipendenze o funzionale.
Uno schema di annotazione a dipendenze “puro”, ovvero in cui le
dipendenze sono stabilite tra parole, si fonda su informazione relazionale tipicamente integrata da informazione categoriale che assegna un
tipo alle relazioni identificate tra le parole del testo. Schemi di annotazione di questo tipo sono alla base dell’annotazione sintattico-funzionale dei corpora dell’italiano TRESSI e TUT, così come della Prague
Dependency Treebank.
226
8.
L ’ ANNOTAZIONE LINGUISTICA DEL TESTO
8.4
Tipi di informazione e rappresentazione
XML
Gli esempi della sezione precedente mostrano come i tipi di informazione categoriale, strutturale e relazionale possono essere variamente
combinati nella definizione di un singolo schema di annotazione. Ciascun tipo di informazione pone però specifici problemi di rappresentazione quando lo schema di annotazione debba essere tradotto in un
linguaggio di marcatura basato su XML.
8.4.1. Rappresentazione
XML
di informazione categoriale
Sulla base di quanto illustrato nel CAP. 3, il modo più intuitivo offerto da XML per la rappresentazione di informazione categoriale è rappresentato dalla sua codifica attraverso attributi associati all’elemento
che descrive l’unità linguistica che si vuole categorizzare.
Prendiamo il caso dell’annotazione morfo-sintattica. Supponiamo
di voler associare la categoria grammaticale ai token del testo e di
volerla rappresentare come attributo XML. Illustriamo questo caso in
relazione alla parola legno:
[8.8]
< pm pos = ”nome” >
< orto > legno < /orto >
< /pm >
In [8.8] < pm > è l’elemento che rappresenta la parola morfologica
e include al suo interno un elemento di tipo < orto > , che contiene a sua volta la forma lessicale associata a < pm > . L’attributo pos
fornisce l’informazione relativa alla categoria grammaticale (nome).
Abbiamo visto in precedenza che una stessa parola morfologica
può essere descritta anche in modo più ricco e articolato, come riportato di seguito per la stessa parola legno, dove i tratti linguistici
selezionati per la sua descrizione (il lemma, i tratti di genere e numero e il tipo di nome) sono tutti rappresentati in termini di attributi XML:
[8.9]
< pm pos = ”nome” sottotipo = ”nome_comune” num = ”sing”
gen = ”masc” lemma = ”legno” >
< orto > legno < /orto >
< /pm >
227
TESTO E COMPUTER
Una possibile alternativa a [8.8] è quella di rappresentare l’informazione categoriale in termini di elementi, come mostra l’esempio
[8.10], dove l’informazione relativa alla categoria grammaticale è codificata attraverso un sottoelemento di < pm > , l’elemento < pos > , il
cui contenuto è rappresentato dalla categoria grammaticale nome.
[8.10]
< pm >
< orto > legno < /orto >
< pos > nome < /pos >
< /pm >
È naturale a questo punto chiedersi se gli stili di rappresentazione
illustrati in [8.8] e [8.10] siano del tutto equivalenti dal punto di vista espressivo. La risposta è no. Nel CAP. 3 abbiamo visto che a un
attributo XML non può essere assegnata una struttura complessa, ovvero che non può contenere al suo interno altri attributi. Supponiamo di voler includere gli attributi num(ero) e gen(ere) in una struttura complessa, chiamata accordo, che include tutti i tratti morfo-sintattici alla base dell’accordo grammaticale. Un modo per rappresentare questa struttura all’interno della [8.10] è il seguente:
[8.11]
< pm >
< orto > legno < /orto >
< pos > nome < /pos >
< accordo >
< num > sing < /num >
< gen > masc < /gen >
< /accordo >
< /pm >
dove gli elementi < num > e < gen > sono incassati all’interno dell’elemento padre < accordo > . Naturalmente sarebbe possibile combinare gli stessi tratti in un solo attributo XML, usando valori complessi
come ad esempio “masc-sing”. Questo avrebbe però due controindicazioni: da una parte, la moltiplicazione del repertorio di valori necessari, dall’altra, una rappresentazione non adeguata dei ruoli distinti
che i tratti di persona, genere e numero svolgono nell’accordo grammaticale (ad esempio le voci verbali semplici non richiedono in italiano l’accordo del genere, così come gli aggettivi non richiedono l’accordo della persona ecc.).
228
8.
L ’ ANNOTAZIONE LINGUISTICA DEL TESTO
8.4.2. Rappresentazione
XML
di informazione strutturale
In questa sezione esemplificheremo possibili rappresentazioni XML
della tipologia di strutture linguistiche illustrate nel PAR. 8.3.2 2.
Cominciamo dalla rappresentazione di token morfologicamente
complessi illustrata di seguito:
[8.12]
< struct >
< orto > al < /orto >
< struct lemma = ”A”/ >
< struct lemma = ”IL”/ >
< /struct >
In [8.12] l’elemento < struct > rappresenta una qualsiasi unità
strutturale. La preposizione articolata al viene così scomposta in due
sottocostituenti, i cui lemmi sono rispettivamente A e IL. La struttura
è ricorsiva, in quanto l’elemento < struct > include al proprio interno altri elementi di tipo < struct > . Si noti che l’informazione relativa alla forma ortografica, codificata attraverso l’elemento < orto > ,
è associata in questo caso all’elemento < struct > padre 3.
Procediamo ora alla rappresentazione di strutture che vanno “oltre” il singolo token testuale. Consideriamo il caso di espressioni multilessicali continue (ad esempio il nome composto Maestro Ciliegia) la
cui rappresentazione XML è riportata di seguito:
[8.13]
< struct >
< struct >
< orto > Maestro < /orto >
< /struct >
< struct >
< orto > Ciliegia < /orto >
< /struct >
< /struct >
2. Per fare ciò, ci siamo liberamente ispirati al metamodello strutturale per la
rappresentazione dell’annotazione linguistica di corpora proposto nell’ambito dello
standard ISO/TC 37/SC 4 (cfr. PAR. 8.6).
3. L’elemento < orto > è stato introdotto per semplificare l’illustrazione della
rappresentazione XML. In realtà, in un approccio distribuito all’annotazione (cfr. PAR.
8.5) esso corrisponde a un elemento vuoto che punta alla porzione del dato testuale
primario alla quale si applica l’annotazione.
229
TESTO E COMPUTER
In questo caso, la sequenza di token che compongono l’espressione
multilessicale è annotata come un’unica struttura. La struttura in
[8.13] è assimilabile a quella del token morfologicamente complesso
in [8.12]: anche in questo caso abbiamo una struttura binaria, con la
differenza che l’informazione relativa alla forma ortografica (codificata da < orto > ) è associata agli elementi terminali della struttura gerarchica.
Abbiamo visto che la tipologia di strutture da annotare può essere
ben più complessa e includere strutture ricorsive con incassamenti
multipli: ciò si verifica, ad esempio, nell’annotazione sintattica a costituenti. La rappresentazione sintattica riportata in [8.5] può essere
riformulata in termini di XML come segue:
[8.14]
< struct > < cat > F < /cat >
< struct > < cat > SN < /cat >
< struct > < cat > SN < /cat >
< orto > Maestro < /orto >
< orto > Ciliegia < /orto >
< /struct >
< struct > < cat > SN < /cat >
< orto > falegname < /orto >
< /struct >
< /struct >
< struct > < cat > SV < /cat >
< struct > < cat > V < /cat >
< orto > trovò < /orto >
< /struct >
< struct > < cat > SN < /cat >
< struct > < cat > SN < /cat >
< orto > un < /orto >
< orto > pezzo < /orto >
< /struct >
< struct > < cat > SP < /cat >
< orto > di < /orto >
< struct > < cat > SN < /cat >
< orto > legno < /orto >
< /struct >
< /struct >
< /struct >
< /struct >
< /struct >
230
8.
L ’ ANNOTAZIONE LINGUISTICA DEL TESTO
L’elemento < struct > radice racchiude la descrizione sintattica della frase e contiene al suo interno altri elementi di tipo < struct > a
loro volta costituiti da elementi di tipo < struct > e così via fino ad
arrivare ai nodi terminali, corredati dell’informazione relativa al dato
testuale primario (codificata da < orto > ). Si può notare che un elemento < struct > di tipo SN può contenere al suo interno altri elementi < struct > dello stesso tipo (definendo così strutture linguistiche ricorsive). Per la rappresentazione dell’informazione categoriale,
qui codificata mediante l’elemento < cat > , si rinvia al PAR. 8.4.1.
8.4.3. Rappresentazione
XML
di informazione relazionale
La rappresentazione XML di informazione relazionale presuppone che
a ogni elemento della struttura XML sia associato un identificatore
univoco, ovvero un attributo XML di tipo ID (cfr. PAR. 3.3.2). La rappresentazione della relazione consisterà dunque nello stabilire un collegamento tra diverse unità linguistiche (ad esempio token, parole
morfologiche, costituenti, unità semantiche) attraverso i loro identificatori.
Supponiamo di voler codificare in XML una rappresentazione a dipendenze “pura” dove le relazioni sono stabilite tra parole. In particolare, vogliamo rappresentare le dipendenze sintattiche relative alla
testa verbale TROVARE nel frammento di frase Maestro Ciliegia, falegname, trovò un pezzo di legno. Da un punto di vista logico, la descrizione di relazioni di dipendenza si articola in due blocchi: uno
che descrive i partecipanti alla relazione [8.15] e l’altro che rappresenta la relazione stessa [8.16].
[8.15]
< pm id = ”pm_1” >
< orto > Maestro < /orto > < orto > Ciliegia < /orto > < /pm >
< pm id = ”pm_2” > < orto > falegname < /orto > < /pm >
< pm id = ”pm_3” > < orto > trovò < /orto > < /pm >
< pm id = ”pm_4” > < orto > un < /orto > < /pm >
< pm id = ”pm_5” > < orto > pezzo < /orto > < /pm >
...
[8.16]
< rel tipo = ”sogg” testa = ”pm_3” dipendente = ”pm_1”/ >
< rel tipo = ”ogg_diretto”
testa = ”pm_3” dipendente = ”pm_5”/ >
231
TESTO E COMPUTER
La relazione è rappresentata mediante un elemento vuoto di tipo
< rel > ed è descritta da una serie di tratti che, oltre a specificarne il
tipo (soggetto o oggetto diretto), identificano la testa e il dipendente della relazione attraverso attributi di tipo IDREF (cfr. PAR.
3.3.2), che rappresentano gli identificatori univoci degli elementi a cui
si fa riferimento 4.
Quello appena illustrato non è l’unico modo per rappresentare
informazione relazionale. Una possibile alternativa è riportata in [8.17]:
[8.17] < pm id = ”pm_1” deprel = ”sogg” testa = ”pm_3” >
< orto > Maestro Ciliegia < /orto > < /pm >
< pm id = ”pm_3” > < orto > trovò < /orto > < /pm >
< pm id = ”pm_5” deprel = ”ogg_diretto” testa = ”pm_3” >
< orto > pezzo < /orto > < /pm >
dove la relazione di dipendenza viene rappresentata come un insieme
di attributi associato alla descrizione del dipendente 5: gli attributi
coinvolti sono deprel, che specifica il tipo di relazione, e testa che
identifica la testa della relazione.
La stessa tipologia di rappresentazioni XML illustrata sopra può
essere adottata per la codifica, ad esempio, di espressioni multilessicali discontinue come nel caso di andare veramente a genio. Esemplifichiamo di seguito uno dei possibili modi di rappresentarle, basato
sulla creazione di un’unità semantica corrispondente all’espressione
multilessicale:
[8.18]
< pm
< pm
< pm
< pm
[8.19]
< us pos = ”verbo” parti = ”pm_1 pm_3 pm_4”/ >
id = ”pm_1” > < orto > andare < /orto > < /pm >
id = ”pm_2” > < orto > veramente < /orto > < /pm >
id = ”pm_3” > < orto > a < /orto > < /pm >
id = ”pm_4” > < orto > genio < /orto > < /pm >
4. L’indice numerico facente parte dell’identificatore univoco dei partecipanti
alla relazione (ad esempio 5 in pm_5) si riferisce alla posizione della parola nella sequenza delle parole morfologiche della frase (la forma verbale trovò è la quinta parola
morfologica della frase).
5. Il motivo per cui è preferibile codificare l’informazione sulla relazione grammaticale tra gli attributi del dipendente risiede nel fatto che, mentre una stessa testa
può avere più dipendenti, un dipendente (a parte casi particolari, come costruzioni
ellittiche o costruzioni “a controllo” e “a sollevamento”) si correla solitamente ad una
sola testa.
232
8.
L ’ ANNOTAZIONE LINGUISTICA DEL TESTO
In [8.19], l’elemento < us > (che sta per unità semantica) descrive
l’espressione multilessicale, alla quale è stata associata la categoria
grammaticale di verbo e che, attraverso l’attributo parti di tipo
IDREFS, punta alle sue parole costitutive.
Nelle esemplificazioni proposte fin qui le unità linguistiche di
base sono rappresentate da parole. In realtà, può essere necessario
anche stabilire relazioni tra strutture più complesse, ad esempio tra
costituenti sintattici. Abbiamo riportato di seguito una versione abbreviata della rappresentazione a costituenti discussa nel PAR. 8.4.2,
dove viene rappresentata l’informazione relativa al soggetto in termini
relazionali:
[8.20]
< struct id = ”s_1” >
< cat > F < /cat >
< struct id = ”s_2” >
< cat > SN < /cat >
Maestro Ciliegia
< rel tipo = ”sogg” testa = ”s_5”/ >
[...]
< /struct >
< struct id = ”s_5” >
< cat > SV < /cat > trovò un pezzo di legno
[...]
< /struct >
< /struct >
che viene codificata attraverso un elemento vuoto di tipo < rel > (associato al costituente dipendente) all’interno del quale viene specificato il tipo di relazione (attributo tipo) e la testa (attributo testa).
8.5
Annotazione stand-off
Il modo più semplice di immaginare l’annotazione linguistica di un
testo è come una “griglia” di etichette metatestuali intercalate al dato
testuale primario. In realtà, non c’è nessuna ragione forte che motivi
la coesistenza fisica del dato testuale primario e dell’annotazione nello
stesso file. Anzi, ci sono ottime ragioni per sostenere il contrario: cioè
che i dati e le loro annotazioni siano mantenuti il più possibile indipendenti. In quanto segue, affronteremo brevemente l’argomento di
come l’annotazione linguistica possa rapportarsi al dato testuale primario e di come diversi livelli di annotazione possano essere correlati
tra di loro.
233
TESTO E COMPUTER
Nel momento in cui ci predisponiamo ad annotare un testo, è
bene tener presenti i seguenti aspetti:
– lo stesso testo può essere annotato a diversi livelli di descrizione
linguistica;
– per uno stesso livello di annotazione, più annotazioni alternative
(ad esempio, diverse versioni di annotazione morfo-sintattica realizzate sulla base di diverse specifiche e finalizzate a scopi diversi) possono coesistere, così come devono poter convivere versioni diverse dello stesso tipo di annotazione;
– nello stesso testo devono potersi integrare diverse prospettive di
analisi, offerte da diversi livelli di annotazione: ad esempio, un’annotazione di tipo sintattico con un’annotazione semantica.
Tutti questi aspetti trovano una loro naturale collocazione all’interno della cosiddetta annotazione stand-off o annotazione distribuita
(Leech, 1993; Thompson, McKelvie, 1997). In essa, il dato testuale
primario è fisicamente separato dall’annotazione, così come ogni livello di annotazione è separato da eventuali altri livelli di annotazione
o versioni alternative dello stesso livello. Ciò coincide con le indicazioni fornite da XCES (cfr. PAR. 3.6.2) per l’annotazione linguistica.
L’annotazione è associata al dato testuale primario mediante collegamenti ipertestuali; possono essere stabiliti collegamenti ipertestuali
anche tra i diversi livelli di annotazione. In questo modo, l’annotazione viene virtualmente aggiunta al dato testuale primario: se da un lato
il dato testuale primario rimane integro e leggibile, dall’altro la rete
di rimandi e relazioni che collega il dato testuale primario e la sua
annotazione distribuita su uno o più livelli può essere vista come un
unico testo (o meglio “ipertesto”), che contiene il dato di partenza e
l’informazione interpretativa a esso associata.
Questo approccio distribuito all’annotazione linguistica presenta
numerosi vantaggi:
– il dato testuale primario si mantiene leggibile, scevro da appesantimenti legati alla presenza di molteplici livelli di annotazione, ed è
dunque sempre disponibile nella sua versione originale;
– il dato testuale primario rimane stabile e permanente, e non viene
modificato in alcun modo dal processo di annotazione;
– si rendono possibili annotazioni su diversi livelli che strutturano
gli stessi dati secondo gerarchie “disallineate” o “incompatibili”, gerarchie cioè non propriamente contenute l’una nell’altra, e che non
sono, come tali, riconducibili a un unico livello di organizzazione dei
dati (cfr. Scheda on line 8.1);
– si creano i presupposti per ricerche linguistiche basate sull’intera234
8.
L ’ ANNOTAZIONE LINGUISTICA DEL TESTO
zione di più livelli di annotazione (ad esempio sull’interfaccia tra sintassi e semantica);
– sul versante pratico, si rende possibile lo sviluppo di annotazioni
parallele e distribuite nello spazio e nel tempo in relazione allo stesso
testo.
Grazie all’uso dell’annotazione stand-off, il testo e la sua annotazione si presentano come un ipertesto organizzato in una serie di moduli: il modulo base, che includerà il dato testuale primario con la sua
marcatura e un modulo extra indipendente, corredato della relativa
DTD, per ogni ulteriore livello di annotazione linguistica. Ogni modulo extra conterrà le informazioni relative all’annotazione vera e propria, più i dispositivi di puntamento necessari per “ancorare” l’annotazione alla porzione di testo rilevante 6.
8.6
Standard e annotazione linguistica
La comunità scientifica e quella industriale nella LC hanno a disposizione sistemi di codifica standard per la rappresentazione del dato testuale, che vanno dalla rappresentazione degli insiemi di caratteri per
una miriade di lingue diverse, a linguaggi di marcatura come TEI e
XCES per la descrizione e strutturazione del testo (cfr. PAR. 3.6). Le
stesse motivazioni che hanno promosso queste iniziative di standardizzazione si ripropongono, mutatis mutandis, anche in riferimento
all’annotazione linguistica, visto il considerevole dispendio di energie
umane e finanziarie che tipicamente accompagna la creazione di corpora annotati. La LC e la linguistica dei corpora hanno infatti individuato tre ordini di esigenze cui ogni schema di annotazione dovrebbe
idealmente ispirarsi:
– la compatibilità con diverse teorie linguistiche di riferimento;
– l’usabilità del testo annotato per scopi diversi sia di tipo applicativo sia di ricerca;
– la riproducibilità, ovvero la minimizzazione dei margini di arbitrarietà nelle scelte di codifica.
Allo scopo di sviluppare schemi di annotazione che aderissero
quanto più possibile a questi desiderata, nella LC e in particolare nell’ingegneria del linguaggio sono state promosse numerose iniziative
internazionali, finalizzate a formulare raccomandazioni per una rap6. Il collegamento ipertestuale tra l’annotazione e il dato linguistico primario è
realizzato ricorrendo a XML Pointer language (XPointer), un linguaggio che fornisce
una sintassi per localizzare punti o porzioni di un documento XML.
235
TESTO E COMPUTER
presentazione standard dell’informazione linguistica nel testo. Tra
queste vale la pena menzionare il progetto EAGLES (cfr. PAR. 3.6.1),
finanziato dall’Unione europea per definire standard in diverse aree
dell’ingegneria del linguaggio, tra cui anche l’annotazione linguistica
di corpora testuali nelle lingue della Comunità europea. A oggi, le
proposte di standardizzazione dell’annotazione linguistica del testo si
sono concentrate sull’annotazione morfo-sintattica e su quella sintattica (Leech, Wilson, 1996; Leech et al., 1996).
La varietà dei formati con i quali l’annotazione è rappresentata
ostacola fortemente l’interscambio e il riuso di corpora testuali annotati. Per tale motivo, a fianco di attività come quella di EAGLES, particolarmente rivolte alla definizione di uno standard a livello dei contenuti linguistici, sono recentemente nate iniziative di standardizzazione
dell’annotazione linguistica incentrate piuttosto sul versante dei meccanismi e del formato di rappresentazione dell’annotazione. Lo standard XCES (cfr. PAR. 3.6.2) per l’annotazione linguistica costituisce il
primo passo in questa direzione, oggi proseguito nell’ambito dell’International Standards Organisation (ISO) (ISO/TC 37/SC 4 Language
Resource Management, Ide, Romary, 2002, 2003). L’obiettivo è la definizione di un’infrastruttura generale per la creazione e rappresentazione di corpora testuali annotati (in particolare a livello morfo-sintattico e sintattico), basata su un modello astratto di annotazione indipendente dalla teoria di riferimento e dal repertorio di categorie linguistiche selezionate.
Alla base di questo approccio risiede la consapevolezza che la
standardizzazione a livello del repertorio di nozioni o categorie linguistiche è un obiettivo estremamente arduo da raggiungere, e forse
reso di fatto “chimerico” dalla natura stessa dell’informazione linguistica. Le differenze talvolta profonde che oppongono approcci teorici
diversi a uno stesso livello di analisi linguistica, il fatto che per molti
tipi di analisi linguistiche non si sia ancora raggiunto un grado di
consenso unanime nella comunità di ricerca, e i tratti peculiari e talvolta idiosincratici delle varie lingue rendono estremamente difficile
ciascuna impresa di standardizzazione dell’annotazione linguistica intesa come serie di raccomandazioni prescrittive per la rappresentazione di un certo nucleo di nozioni o categorie linguistiche. Questa è
forse la differenza qualitativa sostanziale che caratterizza l’annotazione linguistica rispetto ad altri ambiti della codifica di alto livello,
come quelli della struttura testuale, intorno ai quali, come si è visto, è
stato possibile far coagulare un elevato grado di consenso nella comunità scientifica.
Una strada alternativa è quella di immaginare la standardizzazione
236
8.
L ’ ANNOTAZIONE LINGUISTICA DEL TESTO
dell’annotazione come la condivisione di una struttura comune “leggera”, che permetta di personalizzare le rappresentazioni secondo i
tratti e le categorie linguistiche richieste, garantendo al contempo l’interscambiabilità dei dati e delle informazioni. Seguendo questo tipo
di filosofia, XCES propone uno standard per l’annotazione basato sulla
combinazione di un metamodello strutturale (o structural meta-model)
con un insieme di categorie di dati (o data categories). Il metamodello
è una struttura astratta condivisa da tutti i testi annotati con informazione dello stesso tipo (ad esempio annotazione sintattica a costituenti); i singoli testi possono invece differire per il tipo di categorie di
dati associate ai vari componenti del metamodello. Un esempio di
metamodello è quello che abbiamo visto nel PAR. 8.4.2 per l’annotazione a costituenti. L’elemento < struct > è in grado di rappresentare lo “scheletro” comune a diversi tipi di testi annotati a costituenti; le categorie di dati in questo caso sono costituiti dai diversi tipi di
sintagmi o dai diversi tipi di tratti con cui sono descritti. Il metamodello fornisce una struttura comune condivisibile da più tipi di annotazioni, mentre le categorie di dati, che forniscono la “semantica”
dell’annotazione, rimangono di stretta pertinenza di chi progetta un
particolare corpus annotato; la compatibilità tra corpora annotati con
i diversi formati è garantita dall’esistenza di un repertorio di categorie
di dati (o data category registry) all’interno del quale le categorie e i
tratti necessari per un particolare tipo di annotazione sono definiti.
Questo approccio alla standardizzazione, se da un lato permette variazioni al livello dei contenuti dello schema di annotazione, crea al
contempo le basi per il confronto, la valutazione, e l’integrazione di
annotazioni diverse; sul versante pratico, questo crea i presupposti
per lo sviluppo di strumenti software comuni per la creazione e l’uso
di dati linguistici annotati.
8.7
Per concludere
L’annotazione linguistica del testo svolge molteplici funzioni in LC. È
un banco di prova dei presupposti teorici di uno schema di annotazione, della loro coerenza e applicabilità; una sonda nella complessità
del tessuto linguistico del testo, per l’acquisizione di nuova evidenza
d’uso; uno strumento per verificare l’adeguatezza degli schemi di rappresentazione e dei tipi di informazione di cui un livello di descrizione linguistica si avvale; infine, una maniera efficace per mettere a disposizione di altri la propria comprensione di un fenomeno. Di fatto,
l’annotazione è diventata il modo per tenere traccia delle nostre co237
TESTO E COMPUTER
noscenze linguistiche e per farle entrare in contatto con altre conoscenze, in un processo di scambio e integrazione che è alla base di
ulteriori passi avanti e di ulteriori generalizzazioni.
Nel ciclo vitale di informazioni e conoscenze, il computer sembra
svolgere un ruolo sempre più importante, nella misura in cui è in grado di potenziare enormemente le nostre capacità di creare, gestire,
controllare e condividere quantità sempre più grandi di dati annotati.
Possiamo oggi affermare che, senza il computer, questo ciclo vitale si
spezzerebbe. È possibile, tuttavia, guardare al computer non solo
come a uno strumento insostituibile per il progresso delle nostre conoscenze, ma anche come il destinatario delle stesse. Nel CAP. 6 abbiamo osservato che è possibile migliorare un modello linguistico stocastico addestrandolo anziché sulle sequenze di parole del testo sulle
sequenze delle loro categorie grammaticali. Nel CAP. 7 il ricorso a bigrammi astratti, che inglobano conoscenza strutturale della lingua, ha
consentito al computer di individuare con estrema precisione un
buon numero di collocazioni complesse. Lo strumento che ci ha aiutato nello sviluppo di informazioni sempre più strutturate ed elaborate si può dunque avvalere di queste ultime per migliorare le sue prestazioni. È a questo nuovo modo di guardare al rapporto tra computer, testo e conoscenza linguistica che rivolgeremo la nostra attenzione nel prossimo capitolo.
Per saperne di più
ABEILLÉ A.
(ed.) (2003), Treebanks. Building and Using Parsed Corpora, Kluwer Academic Publishers, Dordrecht.
CALZOLARI N., BAKER M., KRUYT J. G. (eds.) (1995), Towards a Network of
European Reference Corpora, Giardini Editore, Pisa.
GARSIDE R., LEECH G., MCENERY A. (eds.) (1997), Corpus Annotation: Linguistic Information from Computer Text Corpora, Longman, London.
nd
MCENERY T., WILSON A. (2001), Corpus Linguistics, 2
ed., Edinburgh University Press, Edinburgh, cap. 2.
Siti web
Language Data Consortium – LDC – http://www.ldc.upenn.edu/
European Language Resources Association – ELRA – http://www.elra.info
International Computer Archive of Modern and Medieval English – ICAME –
http://helmer.aksis.vib.no/icame.html
British National Corpus – BNC – http://www.natcorp.ox.ac.uk/
Corpus La Repubblica – http://sslmit.unibo.it/repubblica/
Parole – http://www.ilc.cnr.it/parole/parole.html
Bank of English – http://www.collinswordbanks.co.uk/
238
8.
L ’ ANNOTAZIONE LINGUISTICA DEL TESTO
Turin University Treebank (TUT) – http://www.di.unito.it/ ~ tutreeb/
The Penn Treebank Project – http://www.cis.upenn.edu/~ treebank/home.html
Treebank sintattico-semantica dell’italiano – TRESSI – http://si-tal.ilc.cnr.it/
TreeBankIndex.htm
NEGRA Corpus – http://www.coli.uni-sb.de/sfb378/negra-corpus/.
UAM Spanish Treebank – http://www.lllf.uam.es/~ sandoval/UAMTreebank.html
The Prague Dependency Treebank –http://quest.ms.mff.cuni.cz/pdt/index.html
The SemCor Corpus – http://www.cs.unt.edu/ ~ rada/downloads.html#semcor
WordNet – http://wordnet.princeton.edu/
ItalWordNet – http://si-tal.ilc.cnr.it/IWNindex.htm
MultiSemCor – http://multisemcor.itc.it/index.php
Framenet Website – http://www.icsi.berkeley.edu/ ~ framenet/
Dialoghi Annotati di SI-TAL – http://si-tal.ilc.cnr.it/DialoghiIndex.htm
Expert Advisory Group on Language Engineering Standards – EAGLES – http://
www.ilc.cnr.it/EAGLES96/home.html
International Standards Organisation – Language Resources Management,
http://www.tc37sc4.org/index.php
239
9
Verso il trattamento automatico
della lingua
9.1
Insegnare la lingua al computer
Che il testo sia innanzitutto struttura è stato uno dei motivi guida dei
capitoli precedenti. Gran parte di questa struttura si deve al linguaggio e ai principi della sua organizzazione. Le parole presentano al
loro interno strutture ricorrenti di costituenti più piccoli, chiamati solitamente morfemi. A loro volta le parole sono inserite in sistemi di
relazioni di ordine lineare, di incassamento gerarchico tra sintagmi e
di dipendenze a lungo raggio che nel loro insieme vengono a comporre la struttura sintattica delle frasi. Queste ultime si articolano infine in complesse strutture retoriche che formano la tessitura del discorso. La struttura linguistica è la porta di accesso al contenuto del
testo, ma essa rimane implicita, come nascosta al suo interno: ad
esempio, una parola ortografica non porta evidenziati i confini di
morfema; analogamente, una frase non conserva traccia esplicita dell’inizio e della fine dei suoi costituenti sintattici. Come aprire al computer questa porta?
Nel corso di questo libro abbiamo utilizzato il computer prevalentemente per attingere dal testo digitale, in quanto fonte primaria
di dati linguistici naturali, le informazioni necessarie ad arricchire la
nostra conoscenza riguardo ai principi di organizzazione del linguaggio. Metodi e strumenti come le espressioni regolari, le liste di frequenza lessicale, i modelli linguistici stocastici, gli indici di associazione lessicale e le concordanze si sono rivelati efficaci sonde esplorative
nel tessuto connettivo del testo. Grazie al loro aiuto è possibile oggi
estrarre, da esempi di uso reale della lingua, generalizzazioni interessanti riguardo al modo in cui le parole possono essere identificate nel
flusso testuale, o si co-selezionano in strutture complesse ed espressioni lessicalmente coese, o si riordinano per frequenza in funzione
dell’argomento o dell’andamento narrativo del testo e così via. Il lin241
TESTO E COMPUTER
guista può, a sua volta, far tesoro di queste informazioni per riordinarle, classificarle e utilizzarle come generalizzazioni, in vista dello
sviluppo di nuovi e più accurati modelli esplicativi della lingua.
All’interno di questo processo di estrazione e classificazione di
dati linguistici con l’aiuto del calcolatore, l’annotazione linguistica del
testo svolge un ruolo di primaria importanza. È attraverso l’annotazione, infatti, che il linguista può riproiettare sul testo le generalizzazioni ottenute nella prima fase, ancorandole esplicitamente a concreti
esempi d’uso e rendendole accessibili al computer. In questo modo,
viene a chiudersi un ciclo virtuoso di analisi: il testo digitale, una volta annotato, diventa una miniera di informazioni linguistiche a cielo
aperto, che possono essere oggetto, a loro volta, di ulteriori esplorazioni da parte del computer e contribuire infine a nuove generalizzazioni.
È arrivato il momento di osservare, tuttavia, che nonostante il suo
impatto metodologico innovativo sulla ricerca linguistica, il ciclo dati > informazione > annotazione non cambia, come tale, il rapporto
tra testo e computer. Quest’ultimo, infatti, accede ai tratti linguistici
del testo secondo le modalità standard di ricerca di stringhe di caratteri, con la sola differenza che nel testo annotato l’oggetto della
ricerca sono proprio le etichette (ad esempio in XML) che codificano i
tratti. Inoltre, un testo annotato da un esperto umano richiede generalmente un notevole dispendio di tempo ed energie, può presentare
problemi di incoerenza dell’annotazione (specialmente quando più annotatori lavorano sullo stesso testo) e a volte non è accompagnato da
una documentazione esplicita dei criteri di annotazione.
Esiste una seconda possibile strada da percorrere, più innovativa
della prima, che di fatto imposta in maniera totalmente diversa il rapporto tra testo e computer. In una sorta di “rivoluzione copernicana”
dell’elaborazione dell’informazione testuale, invece di arricchire il testo per avvicinarlo al computer, questa seconda strategia cerca di arricchire il computer con le conoscenze linguistiche necessarie per accedere al testo comprendendone la struttura e il contenuto. In altre parole,
il calcolatore può simulare il comportamento di un lettore umano,
approssimando il bagaglio di conoscenze linguistiche alla base di questo comportamento. Sia per gli umani che per i computer la comprensione di un testo può essere vista come un processo di astrazione
attraverso il quale vengono identificati livelli successivi di strutture
che rappresentano informazione. Ciascuno di questi livelli di analisi
ci fornisce una chiave di accesso al contenuto del testo, un modo di
rappresentarlo e di comprenderlo che è progressivamente più astratto
242
9.
VERSO IL TRATTAMENTO AUTOMATICO DELLA LINGUA
della mera sequenza di parole. Vediamo ora un piccolo esempio di
come questo possa avvenire.
9.2
Un esempio: la morfologia
Immaginiamo di voler cercare in un testo tutte le forme flesse riconducibili all’esponente lessicale AMARE. Il computer può svolgere questo compito per noi in molti modi diversi. Un’idea semplice ed efficace è quella di consultare una lista, ordinata alfabeticamente, di tutte
le forme flesse di una lingua, detta formario. In un formario, ciascuna
forma flessa è accompagnata da una serie di informazioni linguistiche,
tra le quali l’indicazione dell’esponente lessicale (o lemma, cfr. TAB.
9.1). Per ogni parola unità del testo, sarà sufficiente individuarne il
tipo corrispondente nel formario di riferimento (o forma tipo) e registrare il relativo esponente lessicale.
Quali sono i limiti di questo metodo? Innanzitutto, mettere insieme il formario completo di una lingua può essere, da un punto di
vista pratico, un compito arduo e, almeno per lingue con un sistema
flessionale molto ricco, come ad esempio il turco e il finnico, addirittura proibitivo. È stato calcolato, ad esempio, che un verbo turco
può essere flesso in circa 40.000 forme diverse. Il problema di fondo
posto dai formari risiede però nel loro carattere statico. Un computer
che ha a disposizione soltanto un formario non è in grado di estendere in modo autonomo le proprie conoscenze lessicali. Il suo comportamento linguistico è chiuso. Supponiamo, ad esempio, che il computer debba individuare tutte le forme del verbo FAXARE e che questo
verbo non sia presente nel formario. La sola via di uscita è aggiornare
il formario, aggiungendo tutte le forme mancanti. Questo richiede
tuttavia un intervento esterno che deve essere ripetuto per ogni nuova
parola, dal momento che il computer non dispone di informazioni
esplicite su quali siano le regole della flessione di un verbo in generale. Non solo: se pensiamo alla distribuzione delle parole nella curva
TABELLA 9.1
Un frammento di formario
LEMMA
Forma tipo
AVERE
abbia
abbiano
abbiate
aggiunga
aggiungano
AVERE
AVERE
AGGIUNGERE
AGGIUNGERE
243
TESTO E COMPUTER
di Zipf (cfr. PAR. 5.5), l’aggiornamento di un repertorio di forme è un
compito ripetitivo e letteralmente senza fine, poiché il lessico di una
lingua, infatti, è un insieme aperto e produttivo.
Una soluzione relativamente semplice per evitare la trappola del
numero chiuso di forme è fornita da un tipo di procedura automatica
detta stemmer. Nella sua versione classica (Porter, 1980), lo stemmer
(dall’inglese stem, letteralmente “tema lessicale”) è un programma che
rimuove le terminazioni delle parole con l’obiettivo di ricondurre
queste ultime alla loro radice, vale a dire alla porzione di forma condivisa da un’intera famiglia di parole derivate o flesse. Ad esempio, le
forme industria, industriosi, industriale, industrializzeremo e industrializzazione possono essere tutte ricondotte alla comune radice industri-.
Per ottenere questo risultato, lo stemmer ha a disposizione solo due
tipi di informazioni morfologiche: i. le terminazioni di una lingua
(suffissi derivazionali e flessionali), e ii. l’ordine nel quale le terminazioni si possono disporre all’interno di una parola. Nel caso di industrializzazione, ad esempio, la regola che separa -zione dal resto della
parola deve applicarsi prima di quella che separa -izzare, che a sua
volta precede la regola per il suffisso -ale.
La forza dello stemmer risiede nella sua semplicità e generalità,
entrambe garantite da una lista chiusa di affissi che consentono al
programma un comportamento linguistico autonomo e aperto. Se -ato
appartiene alla lista dei suffissi conosciuta dal programma, quest’ultimo riconoscerà che fax- è la radice di faxato, esattamente come amlo è di amato, indipendentemente dal fatto che FAXARE sia un neologismo. La semplicità dell’algoritmo costituisce però anche il suo punto di maggior debolezza. Lo stemmer, infatti, non contiene nessuna
lista delle radici legittime, e questo provoca due tipi di errori comuni:
a) l’individuazione di una radice sbagliata e b) il mancato riconoscimento di una radice. Per illustrare il primo caso, si pensi agli innumerevoli esempi di falsa parentela tra parole solo apparentemente legate dalla stessa radice lessicale: universo e università, cane e canale,
ridono e ridare, presentando e presentire ecc. Per accennare soltanto
alla seconda fonte di errori, occorre ricordare che in molti casi i processi morfologici di flessione e derivazione alterano la forma della radice alla quale si applicano. Queste alterazioni finiscono col violare il
principio di identità formale che consente a uno stemmer di riconoscere la stessa radice in due forme diverse, per cui diventa piuttosto
complicato riconoscere la radice di ESPELLERE in espulsione, quella di
SCEGLIERE in scelgo o quella di VENIRE in verrò. La situazione si complica ulteriormente quando i due problemi interagiscono tra loro, in
quanto le radici alterate (dette anche alternanti) si combinano con al244
9.
VERSO IL TRATTAMENTO AUTOMATICO DELLA LINGUA
TABELLA 9.2
Rappresentazioni morfologiche astratte
Forma superficiale
RAPPRESENTAZIONE ASTRATTA
salgo
vieni
conobbi
SALIRE
+ V3 + 1S PRES IND
+ V3 + 2S PRES IND
CONOSCERE + V2 + 1S PASS
VENIRE
REM
cune terminazioni soltanto: si confrontino, ad esempio, vengono/*vienono o verrai/*venirai.
Un modo per risolvere questi problemi è quello di dotare il computer di conoscenze riguardanti l’organizzazione del lessico morfologico, in cui le entrate lessicali sono ripartite in classi e sottoclassi, ciascuna delle quali è caratterizzata da un comportamento morfologico
omogeneo al suo interno, ma diverso rispetto alle altre classi. Uno
strumento software che integri questi tipi di conoscenza linguistica
per produrre automaticamente l’analisi morfologica di una parola del
testo è chiamato analizzatore morfologico. Tipicamente, un analizzatore morfologico ha a disposizione 4 tipi di informazione: i. un lessico
di radici lessicali; ii. un lessico di affissi (prefissi e suffissi); iii. regole
di combinazione tra radici e affissi; iv. regole di normalizzazione che
riconducono forme diverse della stessa radice (o dello stesso affisso) a
un unico esponente (ad esempio vien - > ven). Diversamente dallo
stemmer, un analizzatore morfologico non si limita a segmentare una
parola eliminando i suoi affissi, ma assegna alla prima una rappresentazione strutturale astratta che associa alla radice una forma normalizzata e converte le terminazioni in tratti morfo-sintattici: ad
esempio V2 per “verbo della seconda coniugazione”, o 1S per “prima
persona singolare” (cfr. TAB. 9.2).
Le differenze tra formari, stemmer e analizzatori morfologici riguardano dunque il modo in cui si realizza il passaggio dalle forme
lessicali del testo a rappresentazioni astratte che ne mettono in luce
proprietà morfologiche. In particolare, questi strumenti differiscono
tra loro per a) il livello di astrazione delle rappresentazioni prodotte;
b) il grado di generalità della conoscenza linguistica che incorporano
(sistemi chiusi vs. sistemi aperti); c) la complessità del modello di
morfologia che definiscono. I vantaggi degli stemmer dipendono dal
loro ricorrere solo a euristiche generali basate sugli affissi di una lingua. L’analizzatore morfologico supera i limiti di questa strategia, incorporando un modello più articolato e più accurato di morfologia
che tiene conto delle classi di flessione e dei tratti morfo-sintattici
convogliati dagli affissi. L’aumento di accuratezza del modello è controbilanciato però dalla sua maggiore complessità, dovuta alla necessi245
TESTO E COMPUTER
tà di strutturare e codificare un repertorio morfologico di radici, affissi e regole di combinazione. Questa dialettica tra accuratezza e complessità è un aspetto comune a molti settori di ricerca della LC.
9.3
Alcune conclusioni (in forma di introduzione)
Dotare il computer di conoscenze morfologiche per analizzare la
struttura delle parole è chiaramente solo il primo dei molti passi necessari per metterlo in grado di comprendere il contenuto di un testo. Basti solo pensare al fatto che molte forme lessicali sono ambigue
dal punto di vista morfo-sintattico, come nel caso di era che può essere sia una forma dell’imperfetto del verbo ESSERE, sia un nome femminile singolare. Per far sì che un computer sia in grado di trovare in
un testo tutte e sole le forme di ESSERE, non è sufficiente insegnargli
la flessione di questo verbo, ma bisogna anche insegnargli a riconoscere quando la stringa era è effettivamente usata come verbo. Per
rendersi conto della diffusione delle ambiguità morfo-sintattiche in
una lingua, è sufficiente osservare una semplice frase come C’era una
volta un pezzo di legno, le cui ambiguità di questo tipo sono riassunte
in TAB. 9.3.
Un passo fondamentale per analizzare la struttura del testo è dunque assegnare a ciascuna parola la categoria grammaticale appropriata, che dipende a sua volta dal contesto linguistico in cui la parola
appare. I programmi in grado di operare questo tipo di assegnazione
sono detti part-of-speech tagger (o più semplicemente tagger) e si basano su un’analisi dei contesti sintattici tipici di ogni categoria grammaticale. Ad esempio, in una sequenza come il calcio l’ambiguità tra
nome e verbo della forma calcio è risolta in favore del nome dalla
presenza dell’articolo il.
TABELLA 9.3
Ambiguità morfo-sintattiche nel testo
Parola unità
Categoria grammaticale
C’
era
una
volta
un
pezzo
di
legno
AVVERBIO / PRONOME
VERBO / NOME
ARTICOLO / PRONOME / NUMERALE
NOME / VERBO-VOLTARE / VERBO-VOLGERE
ARTICOLO / NUMERALE
NOME
PREPOSIZIONE
NOME / VERBO
246
9.
VERSO IL TRATTAMENTO AUTOMATICO DELLA LINGUA
Il problema dell’ambiguità (ovvero di espressioni linguistiche compatibili con più interpretazioni) riguarda in effetti tutti i livelli di informazione linguistica, dalla fonologia alla pragmatica. Una componente fondamentale della competenza linguistica umana è proprio la
capacità di scegliere, apparentemente senza sforzo, l’analisi adeguata
in un dato contesto. A seconda del tipo di ambiguità, l’informazione
contestuale necessaria per la sua disambiguazione può essere anche
molto complessa. Se, ad esempio, per scegliere la categoria sintattica
di una parola è in generale sufficiente osservare la categoria delle parole che la precedono o la seguono nel contesto locale, per risolvere
casi di ambiguità sintattica o semantica è spesso necessario ricorrere a
ricche strutture di informazione sul significato delle parole o sul contesto extralinguistico. Dotare i computer di questo tipo di conoscenze
e capacità è comunque una condizione chiave per garantire loro
un’autentica capacità di accedere al contenuto testuale. Immaginiamo,
ad esempio, di cercare notizie su Google riguardo a Giulio Cesare. Se
proviamo a digitare queste due parole, il sistema ci restituisce pagine
dedicate al condottiero romano, insieme però anche a siti di alberghi
o scuole che si chiamano Giulio Cesare, a siti di persone o ditte che
abitano o sono situate in una via o una piazza Giulio Cesare ecc. Il
motivo è che il nome Giulio Cesare è ambiguo dal punto di vista semantico, in quanto con esso ci possiamo riferire a tipi diversi di entità
(esseri umani, luoghi, istituzioni ecc.). Di nuovo, l’ambiguità semantica delle parole è un fenomeno estremamente diffuso nella lingua.
Ciascuna delle parole in C’era una volta un pezzo di legno ha potenzialmente più di un significato: ad esempio, nel Dizionario De Mauro
Paravia il nome volta ha nel complesso 15 significati principali, pezzo
ha 9 sensi, legno altri 9, per non parlare dei significati di essere o di!
La preposizione di dal punto di vista semantico può esprimere una
relazione di parte (ad esempio la ruota della macchina), provenienza
(ad esempio lo studente di Pisa), materia (ad esempio la spada di legno), possesso (ad esempio la macchina di Paolo) ecc. Per avvicinarsi
al contenuto del testo il computer deve dunque essere dotato di una
rappresentazione del potenziale semantico delle parole, della capacità
di selezionare il significato appropriato in un dato contesto e della
capacità di correlare i significati delle parole nell’interpretazione di
strutture linguistiche complesse. Ad esempio, comprendere una semplice frase come Maestro Ciliegia trovò un pezzo di legno, che piangeva e rideva come un bambino richiede di ricostruire le strutture e relazioni che coinvolgono le sue parole. Dopo aver identificato trovò
come passato remoto del verbo trovare, riconoscere che questo verbo
ha come complemento oggetto il sintagma nominale corrispondente
247
TESTO E COMPUTER
alla sequenza un pezzo di legno è una condizione essenziale per individuare cosa Maestro Ciliegia ha rinvenuto. Allo stesso modo, stabilire la corretta relazione di dipendenza che lega il pronome relativo che
al suo antecedente permette di riconoscere che ciò che piangeva e
rideva era proprio l’oggetto trovato.
La LC ha spesso adottato come sua mascotte HAL 9000, il computer parlante del film 2001: Odissea nello Spazio di Stanley Kubrick.
HAL 9000 è la materializzazione del sogno (o forse dell’incubo) di costruire macchine capaci di comportamenti quasi umani da mettere al
nostro servizio. La padronanza linguistica di HAL 9000 rappresenta
una sorta di esempio limite della capacità del computer di comprendere e usare il linguaggio naturale. L’avvicinamento a tale limite sta
impegnando la LC in un percorso lento e complesso, di fatto ben più
lento di quanto i pionieri della disciplina potessero immaginare. Ci
sono però due ordini di ragioni fondamentali che motivano il perseguimento di questo obiettivo. Una è di tipo pratico: dotare il computer di capacità sempre più avanzate di comprendere il contenuto dei
testi apre la strada a prospettive applicative potenzialmente illimitate
di grande impatto tecnologico, sociale, economico e culturale. Lo sviluppo di sistemi che possono comprendere e gestire in maniera intelligente informazione espressa nella nostra lingua è destinato a rivoluzionare il nostro rapporto con l’automazione. C’è però una seconda
ragione, più di tipo teorico, ma non meno importante: non è possibile, infatti, immaginare un autentico progresso nelle capacità dei computer di comunicare nella nostra lingua, senza che ciò si accompagni
a una maggiore conoscenza dei misteri che tuttora avvolgono il linguaggio umano e che riguardano la sua struttura, le sue dinamiche, i
modi con cui viene appreso e si evolve, il suo rapporto con la capacità dell’uomo di conoscere il mondo e di agire in esso. I metodi e gli
strumenti che abbiamo esaminato in questo libro non sono di per sé
sufficienti a raggiungere tali obiettivi più ambiziosi, ma rappresentano
nondimeno lo strumentario di base per avviarsi su questa strada. Integrare tutte queste conoscenze all’interno di un modello computazionale sofisticato che sia in grado di gestire ed estendere aspetti non
banali dell’uso linguistico rappresenta non solo una grande sfida tecnologica per i prossimi anni, ma un modo per affrontare i problemi
di sempre in una prospettiva nuova e originale.
248
Bibliografia
ABEILLÉ A.
(ed.) (2003), Treebanks. Building and Using Parsed Corpora, Kluwer Academic Publishers, Dordrecht.
ANDOR J. (2004), The Master and its Performance. An Interview with Noam
Chomsky, in “Intercultural Pragmatics”, n. 1 (1), pp. 93-111.
ATKINS S., CLEAR J., OSTLER N. (1992), Corpus Design Criteria, in “Literary
Linguistic Computing”, n. 7, pp. 1-16.
BAAYEN R. H. (2001), Word Frequency Distributions, Kluwer Academic Publishers, Dordrecht.
BIBER D. (1993), Using Register-Diversified Corpora for General Language Studies, in “Computational Linguistics”, n. 19 (2), pp. 219-41.
ID. (1998), Corpus Linguistics. Investigating Language Structure and Use,
Cambridge University Press, Cambridge.
BROWN G., ANDERSON A., YULE G., SHILLCOCK R. (1984), Teaching Talk, Cambridge University Press, Cambridge.
CHOMSKY N. (1965), Aspects of the Theory of Syntax, The MIT Press, Cambridge (MA) (trad. it. Aspetti della teoria della sintassi, a cura di A. Woolf
De Benedetti, in N. Chomsky, Saggi linguistici, vol. II, Boringhieri, Torino 1970).
CHURCH K. W., HANKS P. (1990), Word Association Norms, Mutual Information, and Lexicography, in “Computational Linguistics”, n. 16 (1), pp.
22-9.
CIGNONI L. (a cura di) (2003), Computational Linguistics in Pisa – Linguistica
Computazionale a Pisa, in “Linguistica Computazionale”, Special Issue,
pp. XVI-XVII, IEPI, Pisa-Roma.
DUNNING T. (1993), Accurate Methods for the Statistics of Surprise and Coincidence, in “Computational Linguistics”, n. 19 (1), pp. 61-74.
HERDAN G. (1964), Quantitative Linguistics, Butterworths, London (trad. it.
Linguistica quantitativa, a cura di G. Fanti, Il Mulino, Bologna 1971).
IDE N., ROMARY L. (2002), Standards for Language Resources, in “Proceedings
of the Third Language Resources and Evaluation Conference” (LREC),
Las Palmas, Canary Islands, pp. 839-44.
IDD. (2003), Encoding Syntactic Annotation, in Abeillé (2003) pp. 281-96.
KARTTUNEN L., CHANOD J.-P., GREFENSTETTE G., SHILLER A. (1996) Regular Ex-
249
TESTO E COMPUTER
pressions for Language Engineering, in “Journal of Natural Language Engineering”, n. 2 (4), pp. 305-28.
KILGARRIFF A. (2001), Comparing Corpora, in “Journal of Corpus Linguistics”, n. 6 (1), pp. 1-37.
KILGARRIFF A., GREFENSTETTE G. (2003), Introduction to the Special Issue on
the Web as Corpus, in “Computational Linguistics”, n. 23 (3), pp.
333-47.
LAWRENCE S., LEE GILES C. (1999), Accessibility of Information on the Web, in
“Nature”, n. 400, pp. 107-9.
LEECH G. (1991), The State of the Art in Corpus Linguistics, in K. Aijmer, B.
Altenberg (eds.), English Corpus Linguistics: Studies in Honour of Jan
Svartvik, Longman, London, pp. 8-29.
ID. (1993), Corpus Annotation Schemes, in “Literary and Linguistic Computing”, n. 8 (4), pp. 275-81.
LEECH G., BARNETT R., KAHREL P. (1996), EAGLES Recommendations for the Syntactic Annotation of Corpora, http://www.ilc.cnr.it/EAGLES96/segsasg1/
segsasg1.html.
LEECH G., WILSON A. (1996), EAGLES Recommendations for the Morphosyntactic Annotation of Corpora, http://www.ilc.cnr.it/EAGLES96/annotate/
annotate.html.
MANNING C. D., SCHÜTZE H. (1999), Foundations of Statistical Natural Language Processing, The MIT Press, Cambridge (MA).
MARCUS M., KIM G., MARCINKIEWICZ M. A., MCINTYRE R., BIES R., FERGUSON A.,
KATZ M., SCHASBERGER K. (1994), The Penn Treebank: Annotating Predicate Argument Structure, in “Proceedings of the Human Language Technology Workshop”, March 1994, Morgan Kaufman Publishers Inc., San
Francisco (CA).
nd
MCENERY T. E., WILSON A. (2001), Corpus Linguistics, 2
ed., Edinburgh
University Press, Edinburgh.
PORTER M. F. (1980), An Algorithm for Suffix Stripping, in “Program”, n. 14
(3), pp. 130-7.
ROLAND D., JURAFSKY D. (1998), How Verb Subcategorization Frequencies Are
Affected by Corpus Choice, in Proceedings of COLING-ACL-98, pp. 1122-8.
SINCLAIR J. (1991), Corpus, Concordance, Collocation, Oxford University
Press, Oxford.
THOMPSON H., MCKELVIE D. (1997), Hyperlink Semantics for Standoff Markup
of Read-Only Documents, in Atti della Conferenza SGML Europe 97, Barcelona, http://www.ltg.ed.ac.uk/ ~ ht/sgmleu97.html.
XU J. L. (2000), Multilingual Search on the World Wide Web, in “Proceedings
of the Hawaii International Conference on System Science” (HICSS-33),
Maui, Hawaii.
ZIPF G. K. (1935), The Psycho-Biology of Language. An Introduction to Dynamic Philology, Houghton Mifflin, Boston.
ID. (1949), Human Behavior and the Principle of the Least Effort. An Introduction to Human Ecology, Addison-Wesley, Cambridge (MA).
250
Scarica