INF2820 Datalingvistikk – V2018

Slides:



Advertisements
Liknende presentasjoner
Gjenfinningssystemer og verktøy II
Advertisements

1 Java 6 Mer om metoder Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo.
IS-102 Klassedefinisjoner
Et formelt språk er en mengde av strenger over et endelig alfabet
Skanning – del I 4/4/2017.
Generelt I/O if/else Funksjoner Lists Løkker Dictionaries Annet Listebehandling Klasser Python med noen algdat-anvendelser Åsmund Eldhuset asmunde *at*
INF 295 Forelesning 15 - kap 9 Grafer Hans Fr. Nordhaug (Ola Bø)
INF150 Programmering mandag 11.9
1 Kap 08 Kø. 2 Kø - Definisjon En kø (eng queue) er en lineær struktur hvor elementer kan innsetttes kun i den ene enden av listen, kalt bak, og fjernes.
Kap 10 Graf.
Hvordan uttrykke krav Kapittel 4.4. Innledning Målet er å samles rundt ett entydig språk som ikke kan misforståes eller feiltolkes. Gjør sporbarheten.
Dynamisk programmering
INF 295 Algoritmer og datastrukturer Forelesning 7 ADT Lister, Stakker og Køer Hans Fr. Nordhaug (Ola Bø)
INF 295 forelesning 14 - kap 8 Disjunkt mengde ADT Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 9a Søketrær Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 8 Trær Hans Fr. Nordhaug (Ola Bø)
Regulære uttrykk.
Stringmanipulasjon, RegEx og validering
Oppgave 1. Automaten aksepterer språket over alfabetet {a,b} bestående av strenger med et like antall forekomster av a og et like antall forekomster av.
HUMIT 1750 Høsten 2005 Løsningsforslag med utfyllende kommentarer til Obligatorisk oppgave 1 Vi hadde gitt de tre setningene A: Regntøyet er hjemme eller.
INF 4130 Eksamen 2008 Gjennomgang.
Magnus Haug Algoritmer og Datastrukturer
INF2820 Datalingvistikk – V2012
Tabeller Dette er en tabell, eller array. Den kan defineres sånn som dette: public int[] heltallsTabell = new int[11]; //Her er 11 tabellens lengde for.
Kontekstfri grammatikk Endelig mengde T av terminal(symbol)er Endelig mengde V av ikke-terminal(symbol)er Startsymbol S Endelig mengde P av produksjoner.
Deterministisk endelig automat (DFA) (over språk A) Består av - en ikke-tom mengde Q av tilstander - hvor nøyaktig en er utpekt som start-tilstand - og.
Minimalisering av deterministiske endelige automater.
Byggeklosser i java  Klassedefinisjon  Variabel deklarasjon  Metodedeklarasjoner  En ordentlig klasse  Spesielle/kryptiske skrivemåter  løkker og.
Trekkstrukturer Bygges opp fra en mengde trekk f,g,h,… og en mengde atomære verdier a,b,c,… Defineres som en DAG (directed acyclic graph), det vil si en.
Kapittel 5 Vilkårssetningar og løkker. 5.1 Boolske uttrykk George Boole ( ), britisk matematikar Utvikla teori om logikk ved bruk av symbol i.
Kapittel 12 Samlingar Samlingar og datastrukturar Ei samling (collection) blir brukt til å oppbevare og handtere andre objekt ArrayList – klassen.
Den første leseopplæringen.  Å skape mening med skriftspråket kommer ofte forut for konvensjonell skriving.
Arbeidsplassutvikling [Sett inn navn på arbeidsplassen og dato]
Accountability – med tilstandsrapportering som eksempel ”6- Fylkeskommunesamarbeidet” Oslo
Lesing og minoritetselever LUT 2, 8. sept 2009 Marit S. Solem.
Iterator i Java boolean hasNext() E next() void remove()
1 Øvingsforelesning 4 Topologisk sortering Minimale spenntrær Håkon Jacobsen
Nyttige kommandoer $df -h Viser diskbruk $lspci Lister pci kortene $cd
En faktor i utvikling av teori om sinnet og sosial kompetanse
Multiplikasjon - Leksjon 2: Hoderegningsstrategier store multiplikasjonsstykker Lekse til tirsdag.
Oppgavestruktur <Fag> <Navn> Institutt for statsvitenskap
INF5110 – 23. april, 2013 Svar på noen oppgaver til kap
Brøk Brøkbegrepet.
Øvingsforelesning i Python (TDT4110)
Individuell Automagisk Tilbakemelding (av skriftlig eksamen)
Setningsanalyse og tekstsammenbindere
Eksempel: Sletting ved tynn indeks
Minimalisering av deterministiske endelige automater
Møtestruktur i Altinnsamarbeidet (Operativt)
Gang.
INF5110 – 5. og 7. mai 2015 Stein Krogdahl, Ifi, UiO
Agenda Vurdere tekniske hjelpemidler som kan hjelpe oss i jobbsøkerprosessen...! Takk for muligheten til å presentere en alternativ hjelpemiddel. La oss.
IS-102 Interaksjon med objekter
Statistikk 2 Sentral- og spredningsmål
som beregner reverseringsfunksjonen for strenger over {a, b}.
Teorier om universets begynnelse
Video i undervisningen
Sannsynlighetsregning 4
Bruk av muntlig i fremmedspråk- klasserommet
KOMPETANSE FOR MANGFOLD
Bevis i matematikk- undervisningen
INF2820 Datalingvistikk – V2015
Øvingsforelesning 10 Grådighet
Systematisk arbeid med motivasjon i fag
Brøk Brøkbegrepet.
Lyst til å lage poster? - tips og veiledning
Begynnerkurs i Python Realfagskonferansen 2019 Henrik H. Løvold
Bruk av muntlig i fremmedspråk klasserommet
Forberedelse til praksis
For, While, prosedyrer m/ parametere, funskjoner
Utskrift av presentasjonen:

INF2820 Datalingvistikk – V2018 Forelesning 3, 29. jan. Jan Tore Lønning

Hva her vi lært? Deterministiske endelige tilstandsmaskiner (DFA) og hvordan de kan definer et (formelt) språk. Ikke-deterministiske endelige tilstandsmaskiner (NFA) og hvordan de kan definer et (formelt) språk. Regulære språk og hvordan de kan defineres ved regulære uttrykk At DFA, NFA og regulære uttrykk definerer samme klasse språk: Gitt et regulært uttrykk, kan vi konstruere en NFA for språket Gitt en NFA, kan vi konstruere en DFA for samme språket Gitt en NFA, kan vi konstruere et regulært uttrykk for det samme språket 19. februar 2019

I dag Algoritme for DFA med Python-implementasjon Naiv NFA-algoritme Smartere NFA-algoritme med implementasjon Regulære uttrykk i praksis, særlig i Python Tokenisering

DFA i Python Jurafsky & Martin, fig. 2.13 def drec(tape, dfa): index = 0 state = dfa.start while True: if index == len(tape): if state in dfa.finals: return "accept" else: return "reject" elif not (state, tape[index]) in \ dfa.edge.keys(): return "reject" else: state = dfa.edge[(state,tape[index])] index += 1 Jurafsky & Martin, fig. 2.13

DFA i Python – datastruktur def drec(tape, dfa): index = 0 state = dfa.start while True: if index == len(tape): if state in dfa.finals: return "accept" else: return "reject" elif not (state, tape[index]) in \ dfa.edge.keys(): return "reject" else: state = dfa.edge[(state,tape[index])] index += 1 f.edge[(3,'!')] = 4

DFA i Python – datastruktur def drec(tape, dfa): index = 0 state = dfa.start while True: if index == len(tape): if state in dfa.finals: return "accept" else: return "reject" elif not (state, tape[index]) in \ dfa.edge.keys(): return "reject" else: state = dfa.edge[(state,tape[index])] index += 1 f.edge[(3,'!')] = 4 Forenklet struktur Bedre praksis Lag rutiner i klassen for å konstruere objekt Beskytt objektenes indre Legg anerkjenning som en metode i klassen

I dag Algoritme for DFA med Python-implementasjon Naiv NFA-algoritme Smartere NFA-algoritme med implementasjon Regulære uttrykk i praksis, særlig i Python Tokenisering

Søkerom

Breddeførst søk JFLAP

Dybdeførst søk m/ Backtracking

Egenskaper ved algoritmene Både dybde-først m/backtracking breddeførst vil i verste fall ha eksponentielt tidsforbruk proporsjonalt med kn, der n= |w|, lengden av input k2 er maks antall kanter fra en node merket med samme symbol Med epsilontransisjoner Kan risikere ikke terminerer! Men vi vet jo at hvis vi først lager DFA får vi linjært tidsforbruk!

I dag Algoritme for DFA med Python-implementasjon Naiv NFA-algoritme Smartere NFA-algoritme med implementasjon Regulære uttrykk i praksis, særlig i Python Tokenisering

En raskere algoritme En konfigurasjon består av: Start: Oppdatering En mengde tilstander Resten av strengen Start: Q0 = E({q0}) (E er epsillontillukning) Oppdatering Gitt konfigurasjon: wn = sw’ Qn={q1, …, qk} La ny konfigurasjon være wn+1 = w’ Qn+1=E((q1,s)(q2,s)… (qk,s)) Akseptering Konfigurasjonen wn =  Aksepterer hvis minst en av q1, …, qk er en sluttilstand.

Smart NFA-anerkjenning i Python def nrec(tape, nfa): index = 0 states = [nfa.start] while True: if index == len(tape): successtates = [s for s in states if s in nfa.finals] return len(successtates)> 0 elif len(states) == 0: return False else: states = set([e[2] for e in nfa.edges if e[0] in states and tape[index] == e[1] ]) index += 1 def drec(tape, dfa): index = 0 state = dfa.start while True: if index == len(tape): if state in dfa.finals: return "accept" else: return "reject" elif not (state, tape[index]) in \ dfa.edge.keys(): return "reject" else: state = dfa.edge[(state,tape[index])] index += 1 DFA NFA

NFA datastruktur Så langt: NFA uten -transisjoner self.finals = [] … g=NFAFromFile('template.nfa') def nrec(tape, nfa): index = 0 states = [nfa.start] while True: if index == len(tape): successtates = [s for s in states if s in nfa.finals] return len(successtates)> 0 elif len(states) == 0: return False else: states = set([e[2] for e in nfa.edges if e[0] in states and tape[index] == e[1] ]) index += 1 Så langt: NFA uten -transisjoner

Python: ”list comprehension” successtates = [s for s in states if s in nfa.finals] success = [] for s in states: if s in nfa.finals: success.append(e)

Python: ”list comprehension” states = set([e[2] for e in nfa.edges if e[0] in states and tape[index] == e[1] ]) states = [] for e in nfa.edges: if e[0] in states and tape[index]==e[1]: states.append(e[2])

Egenskaper Svarer til underveis å bygge de delene vi trenger av DFA-ene som svarer til denne NFA-en. Algoritmen er linjær i |w|=n. Men kvadratisk i antall tilstander: m O(n m**2) Terminerer også for automater med epsilon- transisjoner.

Hva har vi lært: Gitt en NFA: N som beskriver et språk L=L(N) Da finnes det en DFA: D som beskriver samme språk, L=L(D) Skal vi implementere N, kan vi enten konstruere D (forrige gang) Eller prosessere direkte med N (som om det var D) Uansett er prosedyren Ikke flertydig Deterministisk Tidsforbruket er linjært i input

I dag Algoritme for DFA med Python-implementasjon Naiv NFA-algoritme Smartere NFA-algoritme med implementasjon Regulære uttrykk i praksis, særlig i Python Tokenisering

Regulære uttrykk – to tilnærminger Teoretisk Praktisk Sett på så langt Oprinnelig (1950-tallet, Kleene) J&M seksj 2.3 Tilstreber: Formelt veldefinert Enklest mulig definisjon av klassen (syntaks) Gjør det enklere å vise ting om klassen Unix (grep/egrep), Perl, Emacs, Python, … Utvidet syntaks: Effektiv bruk Andre funksjoner, eks søk ‘’Extended regular expressions’’:

Praktiske regex Flere måter å uttrykke regulære uttrykk – mer kompakte uttrykk Målet er vanligvis ikke å beskrive en hel tekst, men å se om en tekst inneholder en streng beskrevet av regexen Dette gir en annen anerkjenningsalgoritme enn oversetting til FSA-er Påvirker hvordan vi skriver regeexene Regex-formalismen inneholder utvidelser i forhold til de regulære språkene 19. februar 2019

Flere sammensetninger Uttrykk Tolkning I teorien (så langt)/JFLAP Eksempel R|S R eller S R+S penn(y|ies) R* 0 eller flere R R+ 1 eller flere R RR* R? 0 eller 1 R cars? R{n} N mange R RRR…R R{n,m} Minst n og toppen m R . Et hvilket som helst symbol ( ) Presedens OBS: har bivirkninger

Basissymboler Uttrykk Tolkning kommentar a Tilsv. for b,..,z, A, …, Z æ Tilsv ø, Å, andre språk 3 0, 1, …9 Noen tegn synes ikke på skjermen \t tab \n Ny linje Obs: linjeksift forskjellig på Mac, Windows, Linux \r "carriage return" Metasymboler må beskyttes med \ skal vi snakke om dem \* * \+ \. \? \| \( \) \^ \[ \] \$ \\ Tilsv.

Spenn og forkortelser Uttrykk Tolkning kommentar […] Et av symbolene i … [aeiou] tilsv. (a|e|i|o|u) [<char1>-<char2>] Et tegn mellom char1 og char 2 (i en gitt ordning) [a-zA-Z] (eng. bokstav) [0-9] [^…] Et tegn som ikke står på listen Forkortelser \d \w "Unicode word characters" I ASCII bare [a-z,A-Z,0-9_] Nå også æ, ø, å m.fl. \s Unicode white space Inkludert: [ \t\n\r\f\v] \D \W \S Komplementet til tilsv.

Uttrykk for posisjoner Tolkning kommentar ^ Begynnelse av linje $ Slutten av linje \b ordgrense \B Ikke ordgrense Obs: Disse tilsvarer ikke noe tegn i strengen. Ikke forveksle \b og blank.

Presedens Paranteser: () Tellere Sekvenser og ankere Disjunksjon: |

Eksempler >>>[w for w in wordlist if re.search(‘^..j..t..$’,w)] [‘abjectly’, ‘adjuster’, ‘dejected’, …] >>>word = 'supercalifragilisticexpialidocious' >>>re.findall(r'[aeiou]', word) ['u', 'e', 'a', 'i','a', 'i', 'i', 'i', 'e', 'i', 'a', 'i', 'o', 'i', 'o', 'u'] >>>re.sub(r'([0-9]|\.)+', 'tall', 'Roten av 3 er større enn 2.5, tror jeg') 'Roten av tall er større enn tall, tror jeg' 19. februar 2019

Anvendelse av regulære uttrykk Utgangspunkt: Regulært uttrykk: R Tekst: T Vanligvis: ikke interessert i om R matcher hele T Men finne substrenger av T som matcher R R = [a-z]+[0-9]+ T = ‘23ring57.no’ re.search(R,T) vil returnere ‘ring57’ ‘’greedy’’ Formelt matcher uttrykket ‘ing57’ ‘g5’ Osv De blir ikke returnert 19. februar 2019

Pythons re.search Finn matchende del som starter lengst til venstre In [270]: re.search('\d+|\d+\w+','a123abc') Out[270]: <_sre.SRE_Match object; span=(1, 4), match='123'> Finn matchende del som starter lengst til venstre Ikke: '23' eller '3' (som også matcher re-et) Bruk den delen av re som er lengst til venstre \d+, ikke \d+\w+ Får derfor ikke '123abc' Velg den lengste delen som matcher dette Ikke '1' eller '12' Hva gir re.search('\d+\w+|\d+','a123abc')? 19. februar 2019

Pythons re.findall Bruk re.search til å finne den første matchen In [272]: re.findall('..','a123abc') Out[272]: ['a1', '23', 'ab'] Bruk re.search til å finne den første matchen Se på resten av strengen (etter den første matchen) og gjenta. Får ikke her '12', '3a' eller 'bc' Re.search og re.findall bruker ikke oversettelse til NFA/DFA, men backtracking 19. februar 2019

Extended RegEx =/= teoretiske RE Tolkning: Begge må være depressed eller begge er sad Muligheten til å referere tilbake til hele grupper: Går utover regulære språk Kan ikke uten videre bruke DFA som algoritme (ELIZA, berømt første chatbot, 1966)

I dag Algoritme for DFA med Python-implementasjon Naiv NFA-algoritme Smartere NFA-algoritme med implementasjon Regulære uttrykk i praksis, særlig i Python Tokenisering

Tokenisering Neste uke