729G09 Språkvetenskaplig databehandling Föreläsning 2, 729G09, VT15 Reguljära uttryck Lars Ahrenberg 150409
Plan för föreläsningen Användning av reguljära uttryck Formella språk Reguljära språk Reguljära uttryck Operatorer och mängder Matchning Exempel 2
Vad skiljer mängden A från B? A B 3
Vad skiljer mängden A från B? A B hästar kärlek moln dator kulor... bor hoppa lyder stannar ser... 4
Vad skiljer mängden A från B? A B hästar moln kulor fester plommon... stolen hoppet boken vattnet leendet... 5
Vad skiljer mängden A från B? A film filmen filmer filmerna... B bulle bullen bullar bullarna... 6
Hitta meningar med bulle 7
Sökproblem i textfiler Hitta alla meningar som innehåller ordet bulle, Hitta alla ord som uppfyller ett givet villkor, t.ex. består av exakt fem bokstäver, slutar på vokal, har samma stam eller ändelse(r) Hitta ordsekvenser som följer ett visst mönster, t.ex. 'den X-a X-en' 8
Textnormalisering Göra om alla stora bokstäver till små Separera skiljetecken från de ord de är kopplade till Skriva alla meningar på en egen rad etc. 9
Ett mönster för bulle (substantiv) bulle, Bulle, bulles, bullen, Bullen, bullens, bullar, bullars, bullarna,... Typ av variation med eller utan ändelse, med olika bokstäver i samma position, t.ex. e:a, b:b Kan vi fånga alla varianter med ett gemensamt mönster? 10
Reguljära uttryck Formell språkteori Reguljära uttryck är ett sätt (bland flera) att definiera s.k. reguljära språk, dvs strängmängder med en viss (begränsad) komplexitet. Programmering Många programmeringsspråk erbjuder funktioner eller moduler som explicit hanterar reguljära uttryck 11
Grundläggande begrepp sträng: en sekvens av symboler alfabet (eller lexikon): de tillåtna symbolerna konkatenering: sätta ihop två strängar, t.ex abba = abba tomma strängen: konkateneringens 'nolla' abe = eab = ab 12
Reguljära uttryck Reguljära uttryck använder tre grundläggande operationer: Operation Symboler konkatenering disjunktion iteration/upprepning * och + 13
Reguljära uttryck Exempel ab* definierar {a, ab, abb, abbb,...} ba+ definierar {ba, baa, baaa,baaaa,... } (a b) definierar {a, b} 14
Fler exempel Definiera följande mängder L1 = {acb, aacb, acbb, aacbb, aaacb,...} L2 = {by, byn, byar, byarna} Lista de kortaste strängarna som definieras av uttrycken (a b)* a(bb)*c 15
Formella språk Formellt språk = en mängd av strängar Formella språk kan definieras på olika sätt, bl.a. med mängdoperationer omskrivningsregler tillståndsautomater 16
Tre sätt att beskriva reguljära språk Uppräkning L: {b, ab, aab, aaab, } Reguljära uttryck a * b Omskrivningsregler S b S a S 17
Reguljära omskrivningar Omskrivningsregler använder två slags symboler terminala ( alfabetet ) icke-terminala ( omskrivningsbara ) Reguljära omskrivningsregler har formaten A a A a B A B 18
Mera komplexa språk Kontextfria språk ( Lab 3) Reguljära språk är kontextfria, men det finns kontextfria språk som inte är reguljära Omskrivningsregler för kontextfria språk kan ha godtyckligt antal symboler på högersidan. Exempel: S NP VP Kontextkänsliga språk Reglerna kan villkoras. Exempel: att S att NP NEG VP 19
Regularitet i naturliga språk Morfologi t.ex. böjning med hjälp av suffix (katt bil stol...)(ar(na)? en)? Syntax t.ex. frasmönster utifrån ordklasser ART ADJ SUBST MEN: t.ex.böjning i predikatsfyllnad blir svårare Min hund är så vacker 20
Reguljära uttryck i programspråk LINUX / UNIX grep (flaggor) regexp filnamn returnerar textrader som matchar regexp sed 's/regexp/ändring/' < filnamn byter ut strängar som matchar regexp mot ändring Python modulen re 21
Symboler i implementeringar I implementeringar består alfabetet vanligen av de tecken som teckenkodningen omfattar, t.ex. ASCIItabellen med 128 tecken. Teckenkodningen beror ofta av lokala inställningar. 22
Reguljära uttryck i programspråk Mer eller mindre flexibel syntax för teckenmängder villkor på upprepningar villkor på matchning minnesparametrar... 23
Textfiler En textfil är en sekvens av bytes. Varje byte kodar för en bokstav eller annat tecken enligt en viss teckentabell, (ISO-8859-1 (ASCII), UTF-8, ) Några särskilda tecken: newline (\n) tab (\t) å, ä, ö m.fl. s.k. diakritiska tecken kan vara kodade på olika sätt i olika teckenkodningar 24
Teckenmängder i reguljära uttryck Mängd, eller disjunktion [aeioy]: matchar någon av de angivna vokalerna [a-z]: matchar godtycklig bokstav ur det engelska alfabetet. (- anger ordning i teckenkodningen) [0-9]: matchar godtycklig siffra Negation (^) [^a]: matchar allt utom a (och \newline) 25
Teckenmängder i reguljära uttryck Vanliga symboler för specifika mängder \w bokstavssymbol (engelska alfabetet) \d siffra, dvs samma som [0-9] \s, separatortecken inkl. blanktecken, \t och \n. matchar alla tecken (utom \newline) 26
Upprepningar Symboler för upprepningar * 0 eller flera upprepningar, + 1 eller flera upprepningar? 0 eller 1 upprepningar {n,m} minst n, max m upprepningar {n, } minst n upprepningar Räckvidden för en upprepning markeras med parenteser. Jämför ab+ och (ab)+ 27
Disjunktionsoperator ( ) Om disjunktionen gäller strängar med fler än två symboler, eller godtyckliga reguljära uttryck kan ' ' användas. (stor liten) matchar endera av de två strängarna 'stor', 'liten' Jämför a+b+ (a+ b+) 28
Quote (\) Bokstäver och siffror matchar sig själva, liksom en del andra tecken, men tecken som står för operationer (?, *, +,, ) kan inte göra det. Då används quote ba? matchar b och ba ba\? matchar ba? 29
Villkor på matchning Uttryck matchar i regel girigt, dvs mot så långa strängar som möjligt, men kan annars varieras på olika sätt, t.ex. en eller max antal gånger per textrad, med eller utan överlappning Följande symboler ( ankare ) kan användas för att styra matchningen ^regex matchar bara i början på rad regex$ matchar bara i slutet på rad \bregex\b matchar mot ordsträngar 30
Regex golf (regex.alf.nu) 31