TEORIE E TECNICHE DEL RICONOSCIMENTO Espressioni regolari in Python Uso di espressioni regolari in NLP
Espressioni regolari Cosa sono: un linguaggio sviluppato per eseguire ricerche su testi E per operare TRASFORMAZIONI su questi testi sulla base di queste ricerche Esempio: espressione per cercare tutte le parole in un corpus che finiscono in ‘ed’ [w for w in wordlist if re.search(‘ed$’,w)]
Principali caratteristiche del linguaggio delle espressioni regolari Disgiunzione [0-9] \d Ripetizione [0-9]+ Negazione [^5]
Metacaratteri Base: [,],+,*,^ Metacaratteri che specificano caratteri non stampabili \n \t Metacaratteri che specificano disgiunzioni particolarmente comuni \d (= [0-9]) \s (= [ \t\n\r\f\v]) \w (= [a-zA-Z0-9_]) . = ‘qualsiasi carattere’ Metacaratteri che specificano negazioni \D (= [^0-9]) \S Ripetizione: Home-?brew a/{1,3}b
Altri metacaratteri Fine stringa: $ ‘ed$’ Inizio stringa: ^ ‘^..j..’
Backlash Un metacarattere usato per includere metacaratteri nelle espressioni regolari Per cercare ‘*’: \* Per cercare i punti: \.
Espressioni regolari in Python Libreria: re import re Match: search()
Uso di search() [w for w in wordlist if re.search(‘ed$’,w)]
search() con altri metacaratteri Nltk cap.3, p 12
Altri tipi di match match() findall() Cerca pattern all’inizio di una parola findall() Cerca tutte le istanze del pattern
Uso di findall() Nltk cap.3, p 13
findall() per stemming >>> re.findall(r'^.*(?:ing|ly|ed|ious|ies|ive|es|s|ment)$', 'processing') ['processing'] >>> re.findall(r'^(.*)(ing|ly|ed|ious|ies|ive|es|s|ment)$', 'processing') [('process', 'ing')]
findall() per stemming Nltk cap.3, p 15
‘top level’ e ‘pattern level’ Finora abbiamo visto l’uso di operazioni di ricerca in re al ‘top level’ In realta’ queste operazioni sono implementate utilizzando operazioni a piu’ basso livello che data una espressione regolare ne compilano un oggetto di tipo ‘pattern’
compile() e match() p = re.compile(‘[a-z]+’) m = p.match(‘gatto’) m.group() m.span()
Livello di modulo o livello di pattern Se l’espressione regolare e’ usata in un solo punto del codice, meglio espressioni ad alto livello Altrimenti compilare
Normalizzazione e tokenizzazione usando espressioni regolari L’uso principale delle espressioni regolari in linguistica computazionale e’ nel preprocessing dei testi: Normalizzazione (= eliminazione di ‘rumore’, adozione di forme standard) Tokenizzazione
Tokenizzazione NLTK, cap. 3, p.17