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 &#x3B8; 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 &amp; &lt; &gt; &quot; &apos; & < > " ' 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&apos;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 “&#228;” > definisce un’associazione tra la stringa auml e il riferimento al carattere &#228; (corrispondente al carattere ä). Una volta dichiarata nella DTD, l’entità viene richiamata nel testo attraverso il riferimento &auml; che dunque può essere usato per codificare il carattere ä in alternativa al più oscuro riferimento a carattere &#228; 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 “&#x00E0;” > – < !ENTITY eacute “&#x00E9;” > – < !ENTITY egrave “&#x00E8;” > – < !ENTITY igrave “&#x00EC;” > – < !ENTITY oacute “&#x00F3;” > – < !ENTITY ograve “&#x00F2;” > – < !ENTITY ugrave “&#x00F9;” > . 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 ”&#x00F2;” > ”&#x00E8;” > 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&ograve; che maestro Ciliegia, falegname, trov&ograve; 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&ograve; che maestro Ciliegia, falegname, trov&ograve; 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&#x00F2; < /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&#x00F2; < /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&#x00F2; < /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