Programmering för språkteknologer II. OH-serie: Ändliga automater. reguljära uttryck i Java. Deterministiska ändliga automater

Relevanta dokument
Reguljära uttryck, automater, hashtabeller, mm

DAB760: Språk och logik

Labb 1 - Textbearbetning med reguljära uttryck. Formella språk. Definitioner. Chomskyhierarkin. Formella språk. Formella språk

729G09 Språkvetenskaplig databehandling

Föreläsning 2 5/6/08. Reguljära uttryck 1. Reguljära uttryck. Konkatenering och Kleene star. Några operationer på språk

Föreläsning 7: Syntaxanalys

TDDD02 Föreläsning 2 HT Reguljära uttryck och reguljära språk Lars Ahrenberg

Idag: Reguljära språk Beskrivs av Reguljära uttryck DFA Grammatik

DD1361 Programmeringsparadigm. Formella Språk & Syntaxanalys. Per Austrin

Automater. Matematik för språkteknologer. Mattias Nilsson

Reguljära uttryck Grammatiker Rekursiv nedåkning Allmänna kontextfria grammatiker. Syntaxanalys. Douglas Wikström KTH Stockholm

Föreläsning 9: Turingmaskiner och oavgörbarhet. Turingmaskinen. Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen.

Anteckningar 1: Grundläggande saker

Matematik för språkteknologer

STRÄNGAR DATATYPEN. Om du vill baka in variabler eller escape-tecken måste du använda dubbla citattecken. strängar

Turingmaskiner och oavgörbarhet. Turingmaskinen. Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen.

Automatateori (2) Idag: Sammanhangsfria språk. Dessa kan uttryckas med Grammatik PDA

Datorlingvistisk grammatik

b) S Ø aa, A Ø aa» bb, B Ø aa» bc, C Ø ac» bc» 2. Låt L vara språket över 8a< som nedanstående NFA accepterar.

Tentamen i Grundläggande Programvaruutveckling, TDA548

Föreläsning 8 - del 1: Objektorienterad programmering (forts.) - Exempel

Tentamen i Grundläggande Programvaruutveckling, TDA548

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

Programmering för språkteknologer II. OH-serie: Sökning och sortering. Algoritm

Alfabeten, strängar och språk. String

Programmering för språkteknologer II, HT2011. Rum

Definition. Mängden av reguljära uttryck på alfabetet Σ definieras av. om α och β är reguljära uttryck så är (α β) ett reguljärt uttryck

Övning 5 - Tillämpad datalogi 2013

PROV I MATEMATIK Automatateori och formella språk DV1 4p

Uppgift 1 (grundläggande konstruktioner)

Grundläggande textanalys, VT2012

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

729G74 IT och programmering, grundkurs. Tema 1, Föreläsning 3 Jody Foo,

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Föreläsning 13 Testning och strängar

Datorlingvistisk grammatik I Institutionen för lingvistik och filologi Oktober 2007 Mats Dahllöf

Reguljära uttryck. Kapitel Reguljära uttryck Ett godtyckligt tecken: Ett speciellt tecken: [ ] 8.1.

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

Objektorienterad modellering och diskreta strukturer. 13. Problem. Sven Gestegård Robertz. Datavetenskap, LTH

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Konstruktion av datorspråk

10. Mängder och språk

Föreläsning 7: Syntaxanalys

729G09 Språkvetenskaplig databehandling

Introduktion till programmering SMD180. Föreläsning 9: Tupler

Klassdeklaration. Metoddeklaration. Parameteröverföring

Mer om språk och Ruby

F3 Datarepresentation teckenkodning och datakompression EDAA05 Datorer i system! Roger Henriksson!

Tentamen, Algoritmer och datastrukturer

F3 Datarepresentation teckenkodning och datakompression

MÄLARDALENS HÖGSKOLA. CD5560 Formella språk, automater och beräkningsteori. Användarmanual. för simulatorn JFLAP

Föreläsning 18 Filer och avbildningar

Uppgift 1 ( Betyg 3 uppgift )

Uppgift 1 ( Betyg 3 uppgift )

Introduktion till programmering SMD180. Föreläsning 7: Strängar

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

Strängar. Strängar (forts.)

Mer om språk och Ruby

kl Tentaupplägg

Tentamen i Grundläggande programmering STS, åk 1 fredag

Matematik för språkteknologer

Logisk semantik I. 1 Lite om satslogik. 1.1 Konjunktioner i grammatisk bemärkelse. 1.2 Sant och falskt. 1.3 Satssymboler. 1.

Webbprogrammering - 725G54 PHP. Foreläsning II

kl Tentaupplägg

Turingmaskinen - en abstrakt datormodell

Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1.

Föreläsning 11 - Automater, textsökning, tillstånd

11. Reguljära uttryck och grammatiker

Programmeringsteknisk översiktskurs för yrkeshögskoleprogram

Objektorienterad programmering, Java, 5p TDBA63

Kryptokorsordslösare Programmeringsmetodik DV (period 2) Inlämningsuppgift 1

Uppgifter till tenta i 729G04 Programmering och diskret matematik. 17 december 2015, kl 14:00-18:00

Hur bestämmer man vilka fonem ett språk har? Fonologi. Kommutationstest. Hur bestämmer man vilka fonem ett språk har?

Programkonstruktion och Datastrukturer

DD1361 Programmeringsparadigm. Formella Språk & Syntaxanalys. Per Austrin

Introduktion till programmering och Python Grundkurs i programmering med Python

Semantik och pragmatik

Uppgifter i TDDC75: Diskreta strukturer Kapitel 8 Ordning och oändlighet

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

TDDD78, TDDE30, 729A Tecken och strängar med och utan Java

Sökning med prefix i BOOK-IT PUB

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2

Uppgift 1 ( Betyg 3 uppgift )

TDDI16: Datastrukturer och algoritmer

Tentamen i Objektorienterad modellering och diskreta strukturer

Matematik för språkteknologer

Snabbguide till Cinahl

DAT043 Objektorienterad Programmering

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

Några skillnader mellan svenska och engelska

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Övning från förra gången: readword

Lite mer psykologi. L2: Automater, Sökstrategier. Top-down. Kimballs sju principer

Inlämningsuppgift MiniPlotter

Chapter 3: Using Classes and Objects

Textbearbetning i skalet och man-sidor

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Transkript:

Programmering för språkteknologer II OH-serie: ändliga automater reguljära uttryck i Java Mats Dahllöf Ändliga automater Abstrakt maskin, tillståndsmaskin, transitionssystem. (Den enklaste typ man brukar ta upp.) Automaten befinner sig i varje givet läge i ett visst tillstånd. Det finns ett ändligt antal tillstånd (men olika för olika automater). Automaten läser symboler och byter tillstånd utifrån symbol och aktuellt tillstånd (övergång/transition). Institutionen för lingvistik och filologi September 2010 1 2 Deterministiska ändliga automater Om det nya tillståndet är entydigt bestämt, alltså att en viss symbol i ett visst tillstånd leder till maximalt ETT bestämt tillstånd, så sägs automaten vara deterministisk. (Det blir enklare, och är den variant vi primärt skall arbeta med.) En automat antingen godkänner (accepterar) eller underkänner en sekvens av symboler (sträng). Dessa automater är alltså effektiva för att känna igen vissa typer av teckensekvenser. (Linjär tidsåtgång.) Deterministiska ändliga automater En automat antingen godkänner (accepterar) eller underkänner en sekvens av symboler (sträng): Automaten befinner sig först i initialtillståndet. Automaten läser en symbol i taget och föjer övergångarna Tillstånd och symbol bestämmer nästa tillstånd. Automaten har godkänt en sträng om den står i ett tillstånd som räknas som finaltillstånd då den läst fram till slutet av strängen. 3 4

Ändliga automater (deterministiska) Övergångarna i automaten säger alltså att givet ett tillstånd och en symbol så går den till ett nytt tillstånd (eller samma som tidigare). Om det saknas en övergång för ett tillstånd och en symbol så underkänner automaten aktuell sträng. En automat kan komma tillbaka till ett tidigare tillstånd, eller stå kvar i samma tillstånd vid en övergång. Ändliga automater är effektiva och användbara mekanismer för stränganalys. Exempeltillämpning Sannolika datum (i vissa texter): 090131, 090228, 090917, 090930, 091231. Felaktiga som datum: 090100, 090132, 090230, 090431, 091301. Kolla datum kan vara intressant i t.ex. talsyntes, sökning, extraktion och elektroniska formulär. Problemet kan lösas med en ändlig automat (vilket vi gör som del av labben). 5 6 Gör automater för... Alla strängar av (enbart) a och b som innehåller minst tre b. Alla strängar av (enbart) a och b som inte innehåller tre a i rad. Alla strängar av (enbart) a och b som innehåller ett jämt antal a och ett udda antal b. Varför inte dessa? Varför kan vi inte göra ändliga automater för dessa? Alla strängar av (enbart) a och b som innehåller lika många a som b. Alla strängar av (enbart) a och b som är palindrom (likadana lästa framifrån som bakifrån). Alla strängar av (enbart) a och b som om de innehåller minst två a i rad också innehåller minst två b i rad. 7 8

Skriva ned en automat (antaganden för labb) Symbolerna i strängarna (automatens alfabet) vanliga tecken (utom blanktecken och asterisk) Tillstånd vilka ord som helst (t.ex.s1,s2, etc.) Själva definitionen av automaten: ett initialtillstånd godtyckligt antal finaltillstånd godtyckligt antal övergångar (tillstånd symbol tillstånd) Skriva ned en automat (syntax) Automaten skrivs ned i en textfil med följande sorts rader. Symbolerna skiljs åt av blankslag. en rad för initialtillstånd (precis en) initial tillstånd t.ex. initial s1 en rad för finaltillstånd (flera tänkbart, men samma rad) final tillstånd t.ex. final s3 s4 s5 9 10 Skriva ned en automat (syntax) en rad för varje övergång (normalt många) tillstånd symbol tillstånd t.ex. s1 a s2 t.ex. s2 b s5 Andra rader avvisas. Reguljära uttryck Sätt att karaktärisera teckensekvenser En teckensekvens machar eller matchar inte ett reguljärt uttryck Reguljära uttryck är nära besläktade med ändliga automater (de kan karaktärisera samma klasser av teckensekvenser) Mycket viktiga både i språkteknologin och datatekniken allmänt sett 11 12

Reguljära uttryck i Java Reguljära uttrycken är i sig strängar (som alltså tolkas på ett speciellt sätt) Teckenklasser är reguljära uttryck som avser enteckenssträngar. Enklaste fall: Enstaka tecken matchar samma tecken: Gäller bokstäver m.m. T.ex.:"a" matchar"a". (Sedan har vi reguljära uttryck som fångar längre strängar.) Reguljära uttryck (teckenklasser) Teckenklasser: T.ex. "[abc]" matchar vilken som av"a","b" och"c". "[a-z]" matchar vilken som av"a","b", o.s.v. t.o.m. "z". "[a-za-z]" matchar vilken som av"a","b", o.s.v. t.o.m. "z" och"a","b", o.s.v. t.o.m."z". "[a-zåäöa-zåäö]" matchar vilken bokstav som helst i svenska standardalfabetet. (Men t.ex."é" faller utanför.) 13 14 Reguljära uttryck (teckenklasser) Negerade teckenklasser: T.ex. "[^abc]" matchar alla (enstaka) tecken UTOM "a","b" och"c". "[^a-ms]" matchar alla (enstaka) tecken UTOM "a", "b", o.s.v. t.o.m."m" och"s". "[^a-zåäöa-zåäö]" matchar alla (enstaka) tecken som inte är svenska bokstäver. Reguljära uttryck (teckenklasser) Symboler för fördefinierade klasser: "\d" matchar en siffra (synonym "[0-9]"). Obs!"\d" måste stå som"\\d" i koden. (Man måste backslasha backslashen för att få in den i strängen.) "\D" matchar en icke-siffra (synonym "[^0-9]"). "\w" matchar ett (engelskt) ordtecken (synonym "[a-za-z_0-9]"). "\W" matchar ett icke-ordtecken (synonym "[^\w]"). 15 16

Reguljära uttryck (teckenklasser): Unicode Unicode: standard för de teckenklasser som behövs när vi vill ha alla skriftsystem för naturliga språk. Exempel på Unicode-teckenklasser: \p{l} eller\p{letter}: bokstav \p{ll} eller\p{lowercase_letter}: gemen (med versalvariant) \p{lu} eller\p{uppercase_letter}: versal (med gemenvariant) Det finns fler klasser. Slå upp! Reguljära uttryck (teckenklasser) Snitt (intersection) mellan teckenklasser: "[C 0 &&C 1 ]" C 0 och C 1 uttryck för teckenklasser. En sträng (enteckens) matchar"[c 0 &&C 1 ]" om den matchar både C 0 och C 1. T.ex. "[\d&&[^27]]" matchar alla siffror utom "2" och"7". "[\w&&[^aeiouy]]" matchar alla bokstäver utom (vanliga engelska) vokaler som versal. 17 18 Reguljära uttryck i Java: konkatenering Teckenklasser är, som sagt, reguljära uttryck som matchar ett tecken. Om R 0 och R 1 är reguljära uttryck, så matchar R 0 R 1 en sträng som är sammansatt av två strängar där den första matchar R 0 och den andra R 1. Exempel:"[ab][cd]" matchar dess fyra strängar: "ac","ad","bc","bd" Reguljära uttryck i Java: optionalitet Om R är ett reguljärt uttryck, så matchar"r?" tomma strängen och varje sträng som matchar R. (alltså R taget en eller ingen gång, s.a.s.) Exempel:"a?" matchar"". och"a". Exempel:"a?b?c" matchar"c","ac","bc" och"abc". (Bara de fyra.) 19 20

Reguljära uttryck i Java: Kleeneslutning Om R är ett reguljärt uttryck, så matchar"r*" (kallas Kleene-stjärna ) en sträng som är sammansatt av noll eller fler (godtyckligt många) strängar som matchar R. Exempel:"a*" matchar"","a","aa","aaa", "aaaa", o.s.v. (oändligt många). Exempel:"[ab]*" matchar"","a","b","aa","ab", "ba","bb", o.s.v. Reguljära uttryck i Java: plusoperatorn Om R är ett reguljärt uttryck, så matchar"r+" en sträng som är sammansatt av en eller fler (godtyckligt många) strängar som matchar R. (Synonym:"RR*" Exempel:"a+" matchar"a","aa","aaa","aaaa", o.s.v. (oändligt många). Exempel:"(ab)+" matchar"ab","abab", "ababab", o.s.v. (oändligt många). 21 22 Reguljära uttryck i Java: union Om R 0 och R 1 är reguljära uttryck, så matchar R 0 R 1 en sträng som matchar R 0 ELLER R 1. Exempel:"((abc) (cd)).*e.*" matchar alla strängar som börjar med "abc" eller"cd" och dessutom innehåller ett"e" Exempel:"((abc) (cd)).*e.*" matchar alla strängar som börjar med "abc" eller"cd" och dessutom innehåller ett"e" Reguljär matchning är indeterministisk T.ex."\w*a\w*" (i koden"\\w*a\\w*") kan matcha "apanage" på tre sätt. (Vilka?) T.ex."a\w*a\w*" (i koden"a\\w*a\\w*") kan matcha "apanage" på två sätt. (Vilka?) Och (fråga): På hur många sätt matchar"\w+a\w*" strängen"apanage"? 23 24

Reguljära kvantifikatorer, tre typer Greedy Reluctant Possessive X? X?? X?+ X* X*? X*+ X+ X+? X++ Dessa representerar tre olika matchningsprinciper. Obs! Frågetecken och plustecken får plötsligt helt annan innebörd än tidigare, alltså reluctant och possessive. Tre typer av matchningssätt (Det här är lite klurigt!) Greedy: Matchar så lång delsträng som möjligt först; försöker med kortare därefter. (Default.) Reluctant: Matchar så kort delsträng som möjligt först; försöker med längre därefter. Possessive: Matchar som greedy, men eliminerar alternativa tidigare matchningsalternativ. Den lägger så att säga beslag på den delsträng som den matchat. 25 26 Greedy matchning, exempel "\w*a\w*" ("\\w*a\\w*") matchar"apanage": (1) a p a n a g e \w* a \w* (2) a p a n a g e \w* a \w* (3) a p a n a g e \w*a \w* Reluctant matchning, exempel "\w*?a\w*" ("\\w*?a\\w*") matchar"apanage": (1) a p a n a g e \w?*a \w* (2) a p a n a g e \w?* a \w* (3) a p a n a g e \w*? a \w* 27 28

Possessive matchning, exempel "\w*+a\w*" (i koden"\\w*+a\\w*") kan matchar INTE ALLS"apanage". Ersättningsmetoder i klassen String Byter ut den först (i matchningsordning) matchande strängen mot en annan sträng. (1) a p a n a g e \w*+ ------------------- (lägger beslag på) a \w* (inget kvar) replaceall(string regex, String replacmnt) returtyp String (avser alla förekomster i strängen) replacefirst(string regex, String replacmnt) returtyp String (avser första förekomsten i strängen) 29 30 Exempel (Varför blir det så här?) "aaa".replaceall("a*","b") returnerar "bb" "aaa".replaceall("a*?","b") returnerar "bababab" "aaa".replaceall("a*+","b") returnerar "bb" Exempel (Varför blir det så här?) "aaa".replaceall("a+","b") returnerar "b" "aaa".replaceall("a+?","b") returnerar "bbb" "aaa".replaceall("a++","b") returnerar "b" 31 32

Exempel "aabaa".replaceall("\w*ba*","c") returnerar "c" "aabaa".replaceall("\w*?ba*","c") returnerar "c" "aabaa".replaceall("\w*+ba*","c") returnerar "aabaa" Exempel "en <i>liten</i> hund".replaceall("</?.*>","") returnerar "en hund" "en <i>liten</i> hund".replaceall("</?.*?>","") returnerar "en liten hund" "en <i>liten</i> hund".replaceall("</?.*+>","") returnerar "en <i>liten</i> hund" 33 34 Dela upp en sträng I klassenstring finns även en metod split(string regex) med returtyp String[] som klipper upp en sträng vid varje matchande delsträng. "en liten hund".split(" ") ger ett fält med "en", "liten", "hund". "en <i>liten</i> hund".split(" *</?.*?> *") ger samma resultat. 35