informatica di base
per le discipline umanistiche
vito pirrelli
Istituto di Linguistica
Computazionale CNR Pisa
Dipartimento di linguistica
Università di Pavia
lezione 7
(continua…)
settima lezione:
“percorrere” un testo
vito pirrelli
Istituto di Linguistica
Computazionale CNR Pisa
Dipartimento di linguistica
Università di Pavia
lezione 7
(continua…)
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
(continua…)
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
(continua…)
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
(continua…)
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
(continua…)
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
(continua…)
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 n seguita 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 b o 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
(continua…)
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
(continua…)
quante volte?


una erre può contenere simboli che indicano quante volte una certa
sequenza deve essere trovata
questi simboli, detti moltiplicatori, 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
(continua…)
moltiplicatori “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
(continua…)
“ambito” nei moltiplicatori



l’ambito di un moltiplicatore in una erre è la sequenza alla quale il
moltiplicatore si riferisce
un moltiplicatore può fare riferimento a un solo carattere o a una
sequenza di caratteri
nel primo caso, il moltiplicatore 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
(continua…)
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
(continua…)
utili abbreviazioni
RE
Classe di caratteri equivalente
/\d/
/[0-9]/
/\w/
/[a-zA-Z0-9_]/
/\s/
/[ \t\n]/
/\D/
/[^0-9]/
/\W/
/[^a-zA-Z0-9_]/
/\S/
/[^ \t\n]/
 caratteri particolari:
\t
tabulatore
\n accapo
lezione 7
(continua…)
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
(continua…)
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
(continua…)
“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
(continua…)
“ancore” (II)
inizio parola
“\<“
inizio riga
“^”
¶Esempio · di · testo · incolonnato,¶
¶con · marcatori · in · evidenza...
fine riga
“$”
confine parola
“\b”
corpo di parola
“\B”
fine parola
“\>”
lezione 7
(continua…)
“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 consonante ad inizio di parola”
/ [^aeiou][a-z]+/:
“cercami una parola che inizi per consonante”
lezione 7
(continua…)
“pattern matching” (II)
lezione 7
(continua…)
“pattern matching” (III)
lezione 7
(continua…)
importanza delle ancore
lezione 7
(continua…)
importanza delle ancore (II)
lezione 7
(continua…)
importanza delle ancore (III)
lezione 7
(continua…)
il “doppio ruolo” delle parentesi



abbiamo visto che le parentesi all’interno di una erre servono a
definire l’ambito di un moltiplicatore
esiste tuttavia un ruolo ulteriore svolto dalle parentesi (anche in
assenza di un moltiplicatore):
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 parentesi
3 = contenuto della terza coppia di parentesi
ecc.
lezione 7
(continua…)
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
(continua…)
il “doppio ruolo” delle parentesi (III)
lezione 7
(continua…)
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
(continua…)
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
(continua…)
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
(continua…)
marca parole in “zione”
lezione 7
(continua…)
escludi parole in “zioneT”
lezione 7
(continua…)
espressioni regolari su internet

http://www.cacas.org/java/gnu/regexp/reapplet.html
lezione 7
(continua…)
settima lezione
“percorrere” un testo
fine settima lezione
(lezione 8)
lezione 7
Scarica

lezione 7 - Istituto di Linguistica Computazionale "Antonio Zampolli"