Linguistica Computazionale

Documenti analoghi
Linguistica Computazionale

Lesson #4. Espressioni Regolari. Roberto De Virgilio

Le grammatiche formali

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura:

LA CODIFICA DELL INFORMAZIONE

GLI INSIEMI PROF. WALTER PUGLIESE

La codifica dei caratteri di un testo

Descrizione delle operazioni di calcolo. Espressioni costanti semplici

Prof. Pagani Corrado INTRODUZIONE AL LINGUAGGIO C

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Unità F1. Obiettivi. Il linguaggio C. Il linguaggio C++ Linguaggio C. Pseudolinguaggio. Primi programmi

Rappresentazione dell Informazione

Le basi del linguaggio Java

Somma di numeri binari

Fondamenti d Informatica: Le Macchine di Turing. Barbara Re, Phd

Fondamenti di Informatica T-1

STRUMENTI MATEMATICI

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C

CALCOLO LETTERALE I MONOMI. Il primo tipo di oggetto che incontriamo nel calcolo letterale è il MONOMIO.

Espressioni regolari

Insiemi e sottoinsiemi

Informatica Generale Homework di Recupero 2016

Foglio Elettronico Lezione 1

Laboratorio di Informatica

L insieme dei numeri Relativi

I CARATTERI E LE STRINGHE

Linguaggio C: introduzione

Esercitazione 4. Comandi iterativi for, while, do-while

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 30/06/2016/ Foglio delle domande / VERSIONE 1

Moltiplicazione. Divisione. Multipli e divisori

Lezione 6 Introduzione al C++ Mauro Piccolo

Il Concetto Intuitivo di Calcolatore. Esercizio. I Problemi e la loro Soluzione. (esempio)

Transcript:

Linguistica Computazionale Laboratorio espressioni regolari (2) 09 ottobre 2014

Esercizi Formalizzare con le espressioni regolari i patterns per trovare le seguenti stringhe: tutte le vocali minuscole o maiuscole

Esercizi (1) "le parole che iniziano per consonante : r \s[qwrtupsdfghjklzxcvbnm]\w* \s[qwrtypsdfghjkl ZXCVBNM]\w* le parole che terminano con un segno di punteggiatura (es. "cane," "finito;" ecc.) : r'\w+[,;.:?!]\s Il passato prossimo del verbo mangiare r \sho\smangiato \shai\smangiato \sha\smangiato \sabbi amo\smangiato \savete\smangiato \shanno\smangiato \ sho\smangiato \shai\smangiato \sha\smangiato \sabbia mo\smangiato \savete\smangiato \shanno\smangiato

Esercizi (2) le parole che iniziano per tar o per tr : r \star\w* \str\w* le date in cui giorno, mese e anno sono tutti espressi da numeri : r \s\d\d[-/]\d\d[-/]\d\d\d\d r \s[0-3]?\d[-/][01]?\d[-/][0-2]?\d?\d?\d\s' Usando l operatore di sostituzione "verticalizzate le parole, in modo che ogni parola venga scritta su una riga diversa: NuovaFrase=re.sub(r, r \n, frase)

Wildcard La RE r. corrisponde a qualsiasi carattere (eccetto il ritorno-a-capo) RE Definizione Esempi di matching r b.s r b.*s r.* qualsiasi stringa di tre caratteri che inizia con b e termina con s qualsiasi stringa che inizia per b e termina per s qualsiasi stringa (compresa quella vuota) bas bbs b3s b!s b s b,s baas bs bas bbs b3s b!s b s b,s baas bisogna prendere l autobus una intera riga di testo

Ingordigia e pigrizia I moltiplicatori in Python sono ingordi (greedy) fanno sempre matching con la stringa più lunga possibile r x+ axxxxxxxb axxxxxxxb r a.*c a xxx c xxx c xxx d a xxx c xxx c xxx d E possibile rendere i moltiplicatori pigri (lazy) facendoli seguire dal carattere? fanno matching con la stringa più corta possibile r a.*?c a xxx c xxx c xxx d a xxx c xxx c xxx d

Raggruppamento e memoria Le parentesi tonde (seguite dai simboli?: ) servono per raggruppare stringhe di caratteri da moltiplicare: RE Definizione Esempi di matching r (?:ab)+ una o più stringhe ab ab abab ababab r ab+ una a seguito da una o più b ab abb abbb Le parentesi tonde (senza?: ) memorizzano la stringa di testo corrispondente al contenuto delle parentesi: - la stringa viene memorizzata in una variabile temporanea - Il contenuto della variabile può essere richiamato con \<numero> - 1 = contenuto della prima coppia di parentesi; 2 = contenuto della seconda coppia di patentesi, ecc.

Raggruppamento e memoria RE Definizione Esempi di matching r ((?:ab)+)\1 r (a+)(b+)\1\2 la variabile \1 corrisponde a qualunque stringa abbia fatto matching con il contenuto delle parentesi la variabile \1 corrisponde a qualsiasi stringa abbia fatto matching con il contenuto della prima coppia di parentesi; la variabile \2 idem, ma rispetto alla seconda coppia di parentesi abab abababab abababababab abab abbabb aabaab abbaab r p(.)o p\1o r p.o p.o la variabile \1 corrisponde a qualunque stringa abbia fatto matching con il contenuto delle parentesi la wildcard. può essere sostituita da qualsiasi carattere pio pio pao pao pro pro, ecc. pio pao pao peo pio pio pio pao pro pso, pao pio, ecc.

Raggruppamento e memoria: Esercizi Il passato prossimo del verbo mangiare : Invece di: r \sho\smangiato \shai\smangiato \sha\smangiato \sabbi amo\smangiato \savete\smangiato \shanno\smangiato \ sho\smangiato \shai\smangiato \sha\smangiato \sabbi amo\smangiato \savete\smangiato \shanno\smangiato possiamo scrivere: r \s(?:ho hai ha abbiamo avete hanno Ho Hai Ha Abbiamo Avete Hanno)\smangiato oppure r \s(?:[hh](?:o ai a anno) [Aa](?:bbiamo vete))\smangiato

Raggruppamento e memoria: Esempio di sostituzione in Python Sostituire il segno - con il segno / all interno delle date espresse utilizzando soli numeri: Input: 17/10/2013, 17-10-2013, 30-05-77, 40-12-2013 Output: 17/10/2013, 17/10/2013, 30/05/1977, 40-12-2013

Caratteri speciali Alcuni caratteri hanno un significato speciale nel linguaggio delle RE [ ]? *. ( ) + - / { } Se questi caratteri fanno parte del pattern di testo da cercare, devono comparire in una RE con davanti il carattere \ (carattere di escape) r [a ERRORE! [ è interpretato come classe di carattere e manca la parentesi ] r \[a la stringa [a r a. qualsiasi stringa di due caratteri che inizia con a ab au a1 a? r a\. la stringa di testo a. r cane? le stringhe cane e can r cane\? la stringa cane?

Ancore Le ancore sono caratteri speciali che specificano dove deve comparire il pattern di testo da cercare ^<pattern> il <pattern> deve comparire all inizio di una linea <pattern>$ il <pattern> deve comparire alla fine di una linea RE Definizione Esempi di matching r cane$ r ^La r ^La Spezia$ la stringa cane quando compare alla fine di una linea la stringa La quando compare all inizio di una linea una riga che contiene solo la stringa La Spezia cane il cane di Mario La macchina era guasta il treno per La Spezia La Spezia a La Spezia per lavoro

Ancore \b è un ancora che indica il confine di una parola ( \B indica ogni punto non confine di parola) Il confine di una parola è un punto che ha da una parte un carattere di classe \w e dall altra o un carattere di classe \W o l inizio (fine) riga La macchina in giardino RE Definizione Esempi di matching r \bcane\b r \Bcane\b la stringa cane deve avere a destra e a sinistra un confine di parola la stringa cane deve avere a destra (ma non a sinistra) un confine di parola il cane è il canestro le americane sono il cane è il canestro le americane sono

Precedenza I moltiplicatori, le parentesi, l alternativa, le ancore sono operatori permettono di costruire RE complesse a partire da altre RE Esistono delle regole di precedenza tra gli operatori r a b+ Parentesi ( ) Moltiplicatori? * + {m,n}, ecc. Sequenze e ancore ata ^ $ \b Alternativa Le parentesi ( ) permettono di alterare l ordine di precedenza r a b+ vs. r (?:a b)+

Esercizi Formalizzare con le espressioni regolari i patterns per trovare le seguenti stringhe (NB: parola = sequenza di caratteri separati da spazi o ritorni a capo) "Tutti i numeri con o senza punto o virgola (es. 10.000; 0,56; 45; ecc.) Le parole in fondo ad una linea di testo che terminano per sto o per sito I punti di fine frase che compaiono in fondo ad una linea di testo Gli acronimi di almeno 2 lettere maiuscole con le lettere separate da punti (es. U.S.A.) I numeri formati da una cifra pari e una dispari alternata (es. 21, 234, 4896, ecc.) Le linee di testo che terminano con una lettera maiuscola L'imperfetto indicativo di amare, sia con la lettera minuscola che con la maiuscola (presentare la soluzione più sintetica) Usando l operatore di sostituzione: nelle date con il mese scritto a lettere, sostituire gli spazi con l'underscore (es. 25 marzo 2003 diventa 25_marzo_2003) separare con uno spazio le parentesi e le virgolette dalla parola (es mare, e (casa) diventano mare, e ( casa ) ) trasformate i numeri invertendo la prima cifra con l ultima (es: 123456 diventa 623451) trasformate tutte le parole del testo che iniziano per vocale invertendo il primo carattere con l'ultimo (es alto diventa olta)