INF2820 Datalingvistikk – V2012

Slides:



Advertisements
Liknende presentasjoner
Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring.
Advertisements

Etablering av effektiv produksjon på tvers av landegrenser
C++ for Java-programmerere
© 2006 IFS AB. All rights reserved.
Litt mer om PRIMTALL.
Høgskolen i Oslo Webprogrammering Grunnleggende PHP.
Gjenfinningssystemer og verktøy II
@ TDT4120 Algoritmer og datastrukturer Trær og søking i dem, samt litt diverse emner Åsmund Eldhuset asmunde idi.ntnu.no.
TDT4120 Algoritmer og datastrukturer Trær og søking i dem, samt litt diverse emner Kristian Veøy
Kontrollstrukturer (Kapittel 3)
Øvingsforelesning 9 Flytnettverk, maksimum flyt og maksimum bipartitt matching Jon Marius Venstad Redigert og forelest av Gleb Sizov.
Variasjoner i subklasser.  Prinsippskissen er meget enkel  En abstrakt klasse har en konkret metode og en abstrakt metode  Hver subklasse realiserer.
IS-102 Klassedefinisjoner
Et formelt språk er en mengde av strenger over et endelig alfabet
Skanning – del I 4/4/2017.
Gjenfinningssystemer og verktøy II
Tema: Introduksjon Hvorfor Velocity? Installasjon Velocity VS. JSF / JSP Eksempler Oppsumering.
C# for javaprogrammerere
Forside Korteste sti BFS Modifikasjon Dijkstra Eksempel Korrekthet Analyse Øving Spørsmål Dijkstras algoritme Åsmund Eldhuset asmunde *at* stud.ntnu.no.
@ TDT4120 Algoritmer og datastrukturer Trær og søking i dem, samt litt diverse emner Åsmund Eldhuset asmunde idi.ntnu.no.
Dijkstras algoritme Åsmund Eldhuset asmunde *at* stud.ntnu.no
Øvingsforelesning 9 Flytnettverk, maksimum flyt og
1 Øvingsforelesning Andreas Knudsen Nils Grimsmo
Øvingsforelesning 3 Grafer, BFS, DFS og hashing
Kompleksitetsanalyse
Korrekt dybde først-søk
Øvingsforelesning 2 Trær og søking i dem, samt litt diverse emner Kristian Veøy
Alg. Dat Øvingsforelesning 3 Grafer, BFS, DFS og hashing Børge Rødsjø
Øvingsforelesning Magnus Haug
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ø)
The Postmans Problem. LOG530 Distribusjonsplanlegging 2 2 Mista har fått i oppdrag å vedlikeholde veiene i landsdelen. Dette er et eksempel på den klassiske.
Klargjøring fra forrige gang
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.
Repetisjon av JSP Variabler, tabeller, if-setninger, for/while-løkker
Dynamisk programmering
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ø)
1 Arrayer og form(ularer) (Kapittel 4). 2 Mål  Forstå assosiative og superglobale arrays  Kunne behandle webformularer (forms)  Kjenne forskjellen.
Regulære uttrykk.
Dynamiske nettsider PHP Del 2 – Kontrollstrukturer.
Dynamiske nettsider PHP Del 1 – variable. PHP  PHP (Personal Home Page)  Fritt tilgjengelig programmeringsspråk  åpen kildekode  Plattformuavhengig.
Figur 1 Behov. Figur 2 Behov Figur 3 Prioritering/ressursinnsats.
Hovedfagspresentasjon
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.
Partiell funksjon F fra N til N er Turing-beregnbar hvis og bare hvis… den vil til slutt stoppe hviss F(n) er definert, og i så fall stopper den med output.
1 Kap 06 Ordnede / Sorterte lister Oppgave nr 06_02 Polynomer Klassehierarki Javadokumentasjon.
INF 4130 Eksamen 2008 Gjennomgang.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 18.9 Lesing av data fra fil og skriving av data til fil. Side 411 – 4.. Kap 4.
Inflation og produktion 11. Makroøkonomi Teori og beskrivelse 4.udg. © Limedesign
En repetisjon hrj – høst 2010
Motivasjon = Begeistring Tillitsvalgte foreldre er viktige i skolen!
Alg. Dat Øvingsforelesning 11 Dynamisk programmering, grådighet
Kontekstfri grammatikk Endelig mengde T av terminal(symbol)er Endelig mengde V av ikke-terminal(symbol)er Startsymbol S Endelig mengde P av produksjoner.
Kapittel 1, oppgave i) Sett inn preposisjoner eller adverb som passer.
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.
Befolkning og arbejdsmarked 7. Mikroøkonomi Teori og beskrivelse © Limedesign
Sneak peek og svar på spørsmål Ulf Jarre Jerpseth & Gyda Kjekshus
INF 295 Algoritmer og datastrukturer Forelesning 23 Kompleksitet Hans Fr. Nordhaug/ Ola Bø.
Professor Guttorm Sindre Institutt for datateknikk og informasjonsvitenskap Programmering i Python.
Øvingsforelesning i Python (TDT4110)
Minimalisering av deterministiske endelige automater
IS-102 Interaksjon med objekter
INF2820 Datalingvistikk – V2015
Øvingsforelesning 10 Grådighet
INF2820 Datalingvistikk – V2018
Begynnerkurs i Python Realfagskonferansen 2019 Henrik H. Løvold
Utskrift av presentasjonen:

INF2820 Datalingvistikk – V2012 Jan Tore Lønning

Litt Python

Hvorfor Pyhton NLTK – Natural Language Tool Kit: Omgivelser for å eksperimentere med datalingvistikk Diverse datalingvistiske algoritmer Inkluderte språkdata, korpora Vekt på læring Python var først scripting language: Styre andre programmer, inkludert NLTK rutiner Gode redskaper for behandling av tekst string, list Intuitiv og lesbar syntaks som en pseudokode ”Read-eval-print”-løkke for rask utvikling

Python syntaks Tilordning: Python bruker indent som blokkavgrenser: def f(i): for j in [2,3,4]: i=j+i print i def g(i): for j in [2,3,4]: i=j+i print i Tilordning: a = 5 Python bruker indent som blokkavgrenser: Andre språk: begin-end, ( ) Hva tror du blir resultatet av kallene f(8) g(8)

Python datatyper integer float string: lister: ”Hello world” [3, 4, 5] >>> a = "Hello world" >>> a 'Hello world' >>> len(a) 11 >>> a[0] 'H' >>> a[-1] 'd' >>> b = a[3:7] >>> b 'lo w' >>> type(b) <type 'str'> >>>c = 10 >>>e = [3,4,c,c+c,5*c] >>>e [3,4,10,20,50] >>>e[3] = 19 [3,4,10,19,50] >>>f = e[1:] >>>f [4,10,19,50] >>>e[3]=f [3,4,10,[4,10,19,50],50] >>>f[2]=0 ? integer float string: ”Hello world” lister: [3, 4, 5] [’Hello’, ’world’] [3, 4, c] Aksesseres med indekser ”mutable”

Python er objektorientert Alt er objekter Har sine metoder Eksempler med strenger: ”Hello world,”.split() ”world,”.strip(’,’)

DFA i Python Jurafsky & Martin, fig. 2.13 Enkel Python if state in fa.finals: return True: else: return False streng = streng[1:] samme som Jurafsky & Martin, fig. 2.13 Enkel Python

DFA i Python - datastruktur f.edge[(3,'!')] = 4 streng = streng[1:] Denne strukturen for visning på skjerm Bedre praksis (mer tekst): Rutiner i klassen som leser inn data og konstruerer objektet Legg funksjonen som metode i klassen Enkel Python Datastruktur

Rekursjon  iterasjon Rekursiv Iterativ return rec(fa, state, streng[1:], trace) streng = streng[1:] Rekursiv Iterativ

Prosessering med NFA

Søkerom

Breddeførst søk JFLAP Parallellsøk er noe tilsvarende

Dybdeførst søk m/ Backtracking Jurafsky og Martin

Husk: rekursiv DFA Rekursiv Iterativ return rec(fa, state, streng[1:], trace) streng = streng[1:] Rekursiv Iterativ

NFA i Python - Backtracking return rec(fa, state, streng[1:], trace) return False DFA NFA uten -transisjoner

NFA i Python - Datastruktur self.finals = [] … g=NFAFromFile('template.nfa') return False NFA uten -transisjoner

Python: ”list comprehension” edges = [e for e in fa.edges if state == e[0] and streng[0] == e[1] ] edges = [] for e in fa.edges: if state == e[0] and streng[0] ==e[1]: edges.append(e)

Python: ”list comprehension” if state == e[0] and streng[0] == e[1] ] states = [e[2] for e in fa.edges if state==e[0] and streng[0]==e[1] ] states = [] for e in fa.edges: if state==e[0] and streng[0]==e[1]: states.append(e[2])

Jurafsky og Martins algoritme Strengt tatt: nøytral mht. Dybde-først vs bredde-først Bruker løkke+agenda i stedet for rekursjon

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!

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: w_n = sw’ Qn={q1, …, qk} La ny konfigurasjon være w_n+1 = w’ Qn+1=E(N(q1,s)N(q2,s)… N(qk,s)) Akseptering Konfigurasjonen w_n =  Aksepterer hvis minst en av q1, …, qk er en sluttilstand.

NFA-anerkjenning i Python (uten ) if len(streng)==0: streng = streng[1:] streng = streng[1:] Deterministisk Ikke-deterministisk

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

Implementasjonon av NFA-er Oppsummering: DFA-algoritmen: Konstruer en ekvivalent DFA (Minimaliser denne) Bruk DFA-en NFA-algoritmen: Som simulerer DFA underveis For 1: Teoretisk raskere Mot 1: DFA-en kan få 2n tilstander der n er tilstander i NFA-en: Tar mye plass Kan i praksis ta lengre tid å slå opp i DFA-en Hvilken algoritme som er best: Er et empirisk spørsmål Avhenger av oppgaven

Regulære uttrykk i Praksis

Regulære uttrykk – to tilnærminger Teoretisk Praktisk Sett på så langt Oprinnelig (1950-tallet) J&M seksj 2.3 Tilstreber: Minst mulig notasjon for å definere klassen Formelt meget veldefinert ”RegEx” Unix (grep/egrep), Perl, Emacs, … Tilstreber effektiv i bruk Spesialsymboler, div. forkortelser. MEN: kan inneholde muligheter som går ut over de regulære språkene!

Forskjeller til teoretiske RE Vi beskriver ikke et språk men søker etter substrenger av et språk Ankere ^ begynnelsen av linjen $ slutten av linjen Går ut over rene RE Muligheten til å referere tilbake til hele grupper: Går utover regulære språk Kan ikke uten videre bruke DFA som algoritme

Implementasjon av regex Backtracking: En prøver å matche regex direkte mot (et segment av) strengen Leser regex fra venstre mot høyre (tilpasset for * + …) Ser om en kan utvide strengsegmentet til å matche neste symbol i regex Hvis ikke: backtrack – gå tilbake på tidligere valg SØK: finn et delsegment av strengen som matcher OBS: Regex går også utover kontekstfrie språk

Implementasjon av regex Hvis ekte regulært uttrykk: Gjør om til NFA Bruk algoritme 1 eller 2 Hvis regex går utover regulære uttrykk er det vanlige Bruk algoritme av type 3

Ta med hjem: 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