340 likes | 490 Views
informatica di base per le discipline umanistiche. vito pirrelli Istituto di Linguistica Computazionale CNR Pisa Dipartimento di linguistica Università di Pavia. settima lezione: “percorrere” un testo. vito pirrelli Istituto di Linguistica Computazionale CNR Pisa
E N D
informatica di base per le discipline umanistiche vito pirrelli Istituto di Linguistica Computazionale CNR Pisa Dipartimento di linguistica Università di Pavia lezione 7
settima lezione: “percorrere” un testo vito pirrelli Istituto di Linguistica Computazionale CNR Pisa Dipartimento di linguistica Università di Pavia lezione 7
il testo come percorso • cosa vuol dire per un calcolatore leggere un testo? • quando salviamo un file di testo, registriamo in formato binario la sequenza specifica di lettere e delimitatori di cui si compone il testo nella memoria di massa del calcolatore • possiamo dire che il calcolatore legge un testo mentre lo salva? • un possibile test per rispondere a questa domanda è quello di chiedere al calcolatore se la parola “cane” sia mai stata usata nel testo e, se sì, dove è stata usata per la prima volta • per rispondere a queste semplici domande, al calcolatore non basta aver salvato il testo: deve scorrerlo • un’utile metafora per rappresentare il processo di lettura di un testo da parte del calcolatore è dunque questa: leggere significa scorrere dei caratteri in sequenza ed essere in grado di riconoscere degli “schemi ricorrenti” • questi schemi possono essere sillabe, parole o frasi, o ancora classi di sillabe, parole o frasi lezione 7
il testo come percorso (II) • in WORD è possibile cercare una parola in un testo attivando la funzione “trova” • la parola da cercare dev’essere scritta in un’apposita finestrella di testo, che si apre attivando la funzione con un click • la funzione, una volta avviata, individua la prima ricorrenza della parola desiderata alla destra o alla sinistra del cursore • “trova” in WORD funziona dunque percorrendo il testo a partire dalla posizione corrente del cursore • la ricerca può avvenire in una direzione o nell’altra, a seconda che sia stato chiesto di percorrere il testo verso il basso (a destra del cursore) o verso l’alto (alla sua sinistra) (per saperne di più clicca sulle parole evidenziate!) lezione 7
il testo come percorso (III) • la differenza di prospettiva (alto/basso, sinistra/destra) è dovuta a come immaginiamo sia organizzato il testo; se il testo è visto come una pura sequenza di parole, allora è naturale usare espressioni come “cerca verso destra” o “cerca verso sinistra”; se invece immaginiamo che il testo sia strutturato in paragrafi e pagine disposti l’uno sull’altro in verticale, diventa più intuitivo parlare di alto e basso, su e giù • entrambe le espressioni alludono, comunque, alla stessa metafora del testo come percorso lezione 7
il testo come percorso (IV) • possiamo percorrere un testo alla ricerca di “classi” di sequenze di caratteri assai più complicate delle singole parole, ad esempio: • “tutte le parole che iniziano con la lettera maiuscola” • “le stringhe di numeri la cui seconda cifra è 2” • “le linee di testo che terminano con un punto esclamativo” • ecc. • le cosiddette “espressioni regolari” ci consentono di esprimere in modo immediato queste classi • ricorda che all’interno di un’espressione regolare qualsiasi delimitatore è un carattere • uno spazio vuoto è un carattere • un accapo è un carattere • un tabulatore è un carattere lezione 7
le espressioni regolari • un’espressione regolare (erre) è un’espressione logica che descrive una particolare sequenza di caratteri • ad esempio, all’interno di una erre possiamo usare • l’operatore logico AND per indicare una concatenazione • “c AND a”: “cercami la sequenza ca” • l’operatore logico OR per indicare una disgiunzione • “cane OR gatto”: “cercami nel testo la parola cane o la parola gatto • l’operatore logico NOT per escludere certe sequenze • “ ” AND NOT(“c”)”: “cercami qualsiasi parola che non inizi per c” • per semplificare la scrittura (ma non necessariamente la lettura!) delle espressioni regolari è stata introdotta una sintassi particolare lezione 7
la sintassi delle espressioni regolari • per convenzione, negli esempi seguenti una erre è sempre racchiusa tra “slash”: “/” • l’operatore logico di concatenazione (AND) è omesso: • /ca/: “cercami la sequenza ca” • /n a/: “cercami la sequenza formata da una nseguita da uno spazio vuoto, seguito da una a” • esempio: “un asino” • l’operatore logico di disgiunzione (OR) è indicato in due modi diversi: • con le parentesi quadre “[ ]” per esprimere la disgiunzione tra caratteri singoli • /[abc]/: “cercami una a, una bo una c” • da un “pipe”, “|”, per esprimere la disgiunzione tra stringhe • /cane|gatto/: “cercami nel testo la parola cane o la parola gatto lezione 7
la sintassi delle espressioni regolari • l’operatore logico NOT è espresso dal simbolo (prefissato) “^” racchiuso tra parentesi quadre “[ ]” • / [^aeiou]/: “cercami una (semi)consonante ad inizio di parola” letteralmente: “cercami un carattere preceduto da uno spazio vuoto e che non sia né una a, né una e, né una i, né una o e né una u” lezione 7
quante volte? • una erre può contenere simboli che indicano quante volte una certa sequenza deve essere trovata • questi simboli, detti quantificatori, sono tutti postfissi, cioè seguono immediatamente a destra la sequenza alla quale si riferiscono: • operatore “?” di opzionalità /pa?/: “cercami una p, seguita opzionalmente da una a” esempi: “p”, “pa” • operatore “*” /pa*/: “cercami una p, seguita opzionalmente da una o più a” esempi: “p” , “pa”, “paa”, “paaa” ... • operatore “+” /pa+/: “cercami una p, seguita da almeno una a” esempi: “pa”, “paa”, “paaa” , “paaaa” ... lezione 7
quantificatori “evoluti” • /<carattere>{n,m}/: il <carattere> deve occorrere almeno n volte e al massimo m volte • /<carattere>{n,}/: il <carattere> deve comparire almeno n volte • /<carattere>{n}/: il <carattere> deve comparire esattamente n volte lezione 7
“ambito” nei quantificatori • l’ambito di un quantificatore in una erre è la sequenza alla quale il quantificatore si riferisce • un quantificatore può fare riferimento a un solo carattere o a una sequenza di caratteri • nel primo caso,il quantificatore segue semplicemente a destra • nel secondo caso,la sequenza che definisce l’ambito va raggruppata tra parentesi tonde • esempi: /pa*/: “p” , “pa”, “paa”, “paaa” ... /(pa)*/: “pa” , “papa”, “papapa”, “papapapa” ... lezione 7
classi di caratteri • in una erre è possibile definire in modo molto semplice una classe di caratteri ordinati secondo una scala, indicando tra parentesi quadre soltanto il primo e l’ultimo elemento della scala, separati da un trattino esempi: • /[a-z]/:tutti i caratteri dell’alfabeto compresi tra la a e la z • /[0-9]/: tutte le cifre decimali dallo 0 al 9 lezione 7
utili abbreviazioni • caratteri particolari: • \t tabulatore • \n accapo lezione 7
il carattere “jolly” • esiste un carattere speciale che ha la funzione di “jolly”, cioè può corrispondere a qualsiasi carattere (con la sola eccezione dell’accapo) • questo carattere speciale è il punto: “.” • esempi: /p./: “pp” , “pa”, “pe”, “pi”, “pr”, “pn”, “p ”, “p?” ... lezione 7
il carattere “normalizza” • esiste un carattere che ha la funzione di trasformare un carattere speciale in un carattere “ordinario” • questo carattere speciale è il “backslash”, anche noto come carattere “escape” “\” • esempi: /p./: “pp” , “pa”, “pe”, “pi”, “pr”, “pn”, “p ”, “p?” ... /p\./: “p.” lezione 7
“ancore” • nel descrivere una sequenza con una erre è possibile ancorarla a un punto specifico del testo: ad esempio, è possibile dire che la sequenza in questione deve apparire all’inizio della riga, oppure alla fine, oppure ad inizio di parola • questi punti di riferimento testuali, detti “ancore”, sono: “^” : indica l’inizio riga “$”: indica il fine riga “\<”:indica l’inizio di parola “\>”: indica il fine parola “\b”: indica il confine di parola “\B”: indica qualsiasi carattere con la sola eccezione del confine di parola lezione 7
“ancore” (II) inizio riga “^” ¶Esempio · di · testo · incolonnato,¶ ¶con · marcatori · in · evidenza... inizio parola “\<“ fine riga “$” confine parola “\b” corpo di parola “\B” fine parola “\>” lezione 7
“pattern matching” • ricorda: un’espressione regolare descrive una particolare sequenza di caratteri nel testo • l’uso più comune dell’espressioni regolari è quello di evidenziare tutte le sequenze di caratteri nel testo per le quali la erre è verificata (a partire da quella più vicina al cursore) • questo uso è chiamato in letteratura “pattern matching” (dall’inglese “corrispondenza con uno schema”) • nota che due espressioni regolari diverse possono individuare gli stessi punti del testo, ma evidenziare sequenze differenti! • / [^aeiou]/: “cercami una (semi)consonante ad inizio di parola” • / [^aeiou][a-z]+/: “cercami una parola che inizi per (semi)consonante” lezione 7
“pattern matching” (II) lezione 7
“pattern matching” (III) lezione 7
importanza delle ancore lezione 7
importanza delle ancore (II) lezione 7
importanza delle ancore (III) lezione 7
il “doppio ruolo” delle parentesi • abbiamo visto che le parentesi all’interno di una erre servono a definire l’ambito di un quantificatore • esiste tuttavia un ruolo ulteriore svolto dalle parentesi (anche in assenza di un quantificatore): quello di memorizzare l’espressione contenuta in parentesi in una variabile temporanea • il contenuto della variabile può essere “richiamato” con l’espressione “\<numero>”, dove <numero> esprime la posizione della coppia di parentesi a partire da sinistra: • 1 = contenuto della prima coppia di parentesi • 2 = contenuto della seconda coppia di patentesi • 3 = contenuto della terza coppia di patentesi • ecc. lezione 7
il “doppio ruolo” delle parentesi (II) • il contenuto della variabile “richiamato” con l’espressione “\<numero>” può essere a sua volta modificato, come illustra la funzione “trova e sostituisci” speciale in WORD… lezione 7
il “doppio ruolo” delle parentesi (III) lezione 7
alcune limitazioni • la negazione può avere come ambito solo insiemi di caratteri, non sequenze (o stringhe), infatti: • 1) /[^zione] \> /: nega la disgiunzione • 2) /[^(zione)] \> /: ha la stessa semantica di /[^zione]\>/ • 3) /[^z][^i][^o][^n][^e] \> /: nega non solo tutte le stringhe in zione, ma anche molte altre (ad es. quelle in sione), infatti … • rappresentando una concatenazione di negazioni, la 3) nega qualsiasi parola che contenga almeno una e in ultima posizione, una n in penultima, una o in terzultima, e così via. perché? lezione 7
alcune limitazioni (II) • la semantica di una erre che escluda tutte le parole che finiscono in zione può essere parafrasata come segue: • trovami tutte le parole che terminano in zione • ed escludile dalla ricerca • per ottenere questo risultato abbiamo dunque bisogno: • 1) di individuare tutte le parole in zione, • 2) e poi di escluderle • l’espressione che cerchiamo dovrebbe compendiare due operazioni incompatibili logicamente: • prima la selezione delle parole in zione • poi la loro de-selezione lezione 7
alcune limitazioni (III) • è possibile ottenere lo stesso risultato con i seguenti passi: • selezioniamo tutte le parole che terminano in zione • aggiungiamo a ciascuna di esse un’etichetta speciale (ad es. ‘T’) • selezioniamo tutte e sole le parole che non sono seguite dalla etichetta ‘T’ lezione 7
marca parole in “zione” lezione 7
escludi parole in “zioneT” lezione 7
espressioni regolari su internet • http://www.cacas.org/java/gnu/regexp/reapplet.html lezione 7
settima lezione “percorrere” un testo fine settima lezione (lezione 8) lezione 7