Arne Skjærholt Terza lezione Arne Skjærholt Terza lezione
Regulære uttrykk Regex Regulære uttrykk (regular expressions) er et godt eksempel på det som kalles finite-state methods (hvorfor det heter det kommer vi til om litt). Dette er en klasse metoder som har veldig gode effektivitetsegenskaper. Å behandle en streng kan gjøres i lineær tid (O(n)) og krever konstant minne (O(1)). Regex Foruten å være praktiske i datalingvistikk er regexer generelt nyttige i datasammenheng, og brukes mye i forskjellige verktøy, særlig i UNIX-systemer.
Regulære uttrykk Literal vs. meta-character Engelsk terminologi, for det er stort sett engelsk i dokumentasjon. På norsk: bokstavelig og meta-tegn. Bokstavelige tegn angir bokstaven selv, mens meta-tegn modifiserer betydningen til andre tegn. Den varianten regulære uttrykk vi skal se på kalles Perl-kompatible regexer, men det finnes flere andre varianter (selv om dette er den beste av dem). Literal vs. meta-character
Regulære uttrykk /foo/ De fleste bokstaver står bare for seg selv. /foo/
Regulære uttrykk /baaa*!/ /*/ er en kvantor, og angir at bokstaven foran kan forekomme 0 eller flere ganger. Den kalles gjerne for Kleene star. /baaa*!/
Regulære uttrykk /baa+!/ Kleene plus er en annen kvantor, som angir 1 eller flere ganger. /x+/ er det samme som /xx*/. /baa+!/
Regulære uttrykk /woodchucks?/ Null eller en. /woodchucks?/
Regulære uttrykk /(ab)+/ Av og til vil vi at større grupper enn en og en bokstav skal repetere. Da må vi bruke parenteser til å lage en gruppe som så skal repetere. /(ab)+/
Regulære uttrykk /a b/ /[abc]/ /[ˆaeiouyæøå]/ /[a-z]/ Enten eller. Hvis det bare er forskjellige tegn kan vi bruke /[...]/, og /[ˆ...]/ matcher enhver bokstan unntatt de inni. /a b/ /[abc]/ /[ˆaeiouyæøå]/ /[a-z]/
Regulære uttrykk /a.c/ Hvilken som helst bokstav. /a.c/
Regulære uttrykk /ˆLorem/ /amet\.$/ Matche bare på begynnelsen av strengen eller slutten av strengen. /ˆLorem/ /amet\.$/
Regulære uttrykk /\d/ = /[0-9]/ /\w/ = /[0-9a-zA-Z ]/ /\s/ = /[ \t\n]/ Noen innebygde tegnklasser. /\d/ = /[0-9]/ /\w/ = /[0-9a-zA-Z ]/ /\s/ = /[ \t\n]/
Regulære uttrykk /\D/ = /[ˆ0-9]/ /\W/ = /[ˆ0-9a-zA-Z ]/ /\S/ = /[ˆ\t\n]/ Stor forbokstav matcher alt unntatt de innebygde klassene. /\D/ = /[ˆ0-9]/ /\W/ = /[ˆ0-9a-zA-Z ]/ /\S/ = /[ˆ\t\n]/
Regulære uttrykk ELIZA (Weizenbaum 1966): User: Men are all alike ELIZA: in what way? User: They re always bugging us about something ELIZA: can you think of an example? User: Well, my boyfriend made me come here ELIZA: your boyfriend made you come here. User: He says I m depressed much of the time ELIZA: i m sorry to hear that you are depressed. ELIZA (Weizenbaum 1966): User: Men are all alike ELIZA: in what way? User: They re always bugging us about something ELIZA: can you think of an example? User: Well, my boyfriend made me come here ELIZA: your boyfriend made you come here. User: He says I m depressed much of the time ELIZA: i m sorry to hear that you are depressed.
Regulære uttrykk ELIZA (Weizenbaum 1966): User: Men are all alike ELIZA: in what way? User: They re always bugging us about something ELIZA: can you think of an example? User: Well, my boyfriend made me come here ELIZA: your boyfriend made you come here. User: He says I m depressed much of the time ELIZA: i m sorry to hear that you are depressed. s/.* I am (depressed sad).* / I am sorry to hear that you are \1/ s/.* always.* / Can you think of a specific example / ELIZA (Weizenbaum 1966): User: Men are all alike ELIZA: in what way? User: They re always bugging us about something ELIZA: can you think of an example? User: Well, my boyfriend made me come here ELIZA: your boyfriend made you come here. User: He says I m depressed much of the time ELIZA: i m sorry to hear that you are depressed. s/.* I am (depressed sad).* / I am sorry to hear that you are \1/ s/.* always.* / Can you think of a specific example /
Formelle språk Språk L over alfabet Σ Språk L over alfabet Σ
Formelle språk αβγδεζηθικλμ νξοπρστυφχψω αβγδεζηθικλμ νξοπρστυφχψω
Formelle språk ΑΒΓΔΕΖΗΘΙΚΛΜ ΝΞΟΠΡΣΤΥΦΧΨΩ ΑΒΓΔΕΖΗΘΙΚΛΜ ΝΞΟΠΡΣΤΥΦΧΨΩ
Formelle språk Ubegrensede Kontekstsensitive Kontekstfrie Regulære Ubegrensede Chomskyhierarkiet. Regulære språk kan parses i lineær tid, konteksfrie i polynomisk (O(n 3 )), kontekstsensitive krever eksponensiell tid (PSPACE-complete), og ubegrensede språk krever en full Turing-maskin. Kontekstsensitive Kontekstfrie Regulære
Formelle språk L Σ Det formelle språket L er en delmengde av mengden strenger man kan lage med tegn fra alfabetet Σ L Σ
Formelle språk 1. Det tomme språket er regulært 2. a Σ er singleton-språket {a} regulært 3. Gitt A og B regulære språk er også A B, A B og A regulære Dette konstruerer nøyaktig de regulære språkene. Det vil si alle de regulære språkene, og ingen andre. 1. Det tomme språket er regulært 2. a Σ er singleton-språket {a} regulært 3. Gitt A og B regulære språk er også A B, A B og A regulære
Formelle språk Lukket under: Union (A B også regulært) Snitt (A B også regulært) Komplement (Ā også regulært) Mengdedifferanse (A B også regulært) Lukket under X vil si at hvis du putter en A og en B som har egenskapen inn i operasjon X, vil resulatet ha samme egenskap som A og B hadde. Den siste egenskapen følger fra to og tre siden A B = A B Lukket under: Union (A B også regulært) Snitt (A B også regulært) Komplement (Ā også regulært) Mengdedifferanse (A B også regulært)
Formelle språk {w der w er... } Et formelt språk er en mengde (husk L Σ ), så vi bruker gjerne mengdenotasjon med litt vanlig tekst i for å definere språkene våre. {w der w er... }
Tilstandsmaskiner Σ,S,s 0,δ,F Formelt definerer vi en endelig tilstandsmaskin som en fem-tuppel, der hvert element angir forskjellige deler av maskinen. Σ,S,s 0,δ,F
Tilstandsmaskiner Σ Σ er alfabetet til språket vi snakker om, akkurat som i definisjonen av et formelt språk. Σ
Tilstandsmaskiner S S er mengden tilstander. S
Tilstandsmaskiner s 0 S s 0 er starttilstanden; der maskinen starter å behandle data. s 0 S
Tilstandsmaskiner δ : S Σ S δ er transisjonsfunksjonen. For hver tilstand maskinen kan være i pluss alle mulige bokstaver som kan være den neste å behandle (S Σ) angir den ( ) hva neste tilstand er (S). δ : S Σ S
Tilstandsmaskiner F S F er sluttilstandene, en delmengde av S. Hvis maskinen ender opp i en av disse tilstandene er strengen i språket. I alle andre tilfeller forkastes strengen. F S
Tilstandsmaskiner Σ,S,s 0,δ,F Formelt definerer vi en endelig tilstandsmaskin som en fem-tuppel, der hvert element angir forskjellige deler av maskinen. Σ,S,s 0,δ,F
Tilstandsmaskiner b a! q 0 q 1 q 2 q 3 a a En naturlig måte å studere FSAer på er en grafisk representasjon. Pila angir starttilstanden, pilene sier hvor du skal gå når du ser en bokstav, og tilstander med to ringer er slutttilstander. En annen måte å representere maskinen på, som er nyttig for datamaskiner som skal kjøre en maskin, er transisjonstabellen. q b 0 q a 1 q! 2 q 3 Femtuppelet som angir maskinen for sauespråket er dermed de fem punktene her.
Tilstandsmaskiner b a! q 0 q 1 q 2 q 3 a a b! q 1 q 0 q 1 q 2 q 2 q 2 q 3 q 3 a En naturlig måte å studere FSAer på er en grafisk representasjon. Pila angir starttilstanden, pilene sier hvor du skal gå når du ser en bokstav, og tilstander med to ringer er slutttilstander. En annen måte å representere maskinen på, som er nyttig for datamaskiner som skal kjøre en maskin, er transisjonstabellen. Femtuppelet som angir maskinen for sauespråket er dermed de fem punktene her. q b 0 q a 1 q! 2 q 3 a b! q 0 q 1 q 1 q 2 q 2 q 2 q 3 q 3
Tilstandsmaskiner Σ = {a,b,!} S = {q 0,q 1,q 2,q 3} s 0 = q 0 b a! q 0 q 1 q 2 q 3 δ(q,σ) fra transisjonstabellen F = {q 3} a a b! q 1 q 0 q 1 q 2 q 2 q 2 q 3 q 3 a En naturlig måte å studere FSAer på er en grafisk representasjon. Pila angir starttilstanden, pilene sier hvor du skal gå når du ser en bokstav, og tilstander med to ringer er slutttilstander. En annen måte å representere maskinen på, som er nyttig for datamaskiner som skal kjøre en maskin, er transisjonstabellen. Femtuppelet som angir maskinen for sauespråket er dermed de fem punktene her. Σ = {a,b,!} S = {q 0,q 1,q 2,q 3 } s 0 = q 0 q b 0 q a 1 q! 2 q 3 δ(q,σ) fra transisjonstabellen F = {q 3 } a b! q 0 q 1 q 1 q 2 q 2 q 2 q 3 q 3
Tilstandsmaskiner Determinisme En maskin er deterministisk hvis man i alle tilstander alltid vil vite hva den neste tilstanden må være, for alle mulige inputbokstaver. Det vil si at maskinen i alle tilstander aldri har to forskjellige kanter med samme bokstav på. I en ikke-deterministisk maskin kan vi også ha ɛ-kanter, som går til en annen tilstand uten å behandle en bokstav. Determinisme I en ikke-deterministisk maskin vil transisjonsfunksjonen være δ : S Σ P (S), siden det er mer enn én mulig tilstand.