Upload
guido-carlini
View
224
Download
0
Embed Size (px)
Citation preview
TEORIE E TECNICHE DEL RICONOSCIMENTO
Espressioni regolari in PythonUso di espressioni regolari in NLP
1
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()– 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