INF 2820 V2018: Innleveringsoppgave 1

Like dokumenter
INF 2820 V2018: Innleveringsoppgave 1 - løsningsforslag

INF 2820 V2016: Innleveringsoppgave 2

INF 2820 V2016: Obligatorisk innleverinsoppgave 1

INF 2820 V2016: Obligatorisk innleverinsoppgave 2

INF 2820 V2018: Innleveringsoppgave 3

INF 2820 V2016: Innleveringsoppgave 3 del 1

INF 2820 V2015: Obligatorisk innleveringsoppgave 3

INF2820 V2017 Oppgavesett 5 Gruppe 21.2

Følger Sipsers bok tett både i stoff og oppgaver.

INF 2820 V2016: Obligatorisk innleveringsoppgave 3

INF 2820 V2016: Innleveringsoppgave 3 hele

Hjemmeeksamen 1 i INF3110/4110

INF120: Oblig 3. Yngve Mardal Moe

Innlevering 2b i INF2810, vår 2017

Kva er klokka? Kva er klokka? Kva er klokka?

INF2820 Datalingvistikk V2017 Forelesning 1.2 Jan Tore Lønning

INF2820 V2017 Oppgavesett 5 arbeidsoppgaver

INF2820 Datalingvistikk V2017 Forelesning 3, 30.1 Jan Tore Lønning

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

INF2820 Datalingvistikk V2016. Jan Tore Lønning

1/26/2012 LITT PYTHON. INF2820 Datalingvistikk V2012. Hvorfor Pyhton. Python syntaks. Python er objektorientert. Python datatyper.

INF Obligatorisk innlevering 7

INF2820 Datalingvistikk V forelesning, 30.1 Jan Tore Lønning

INF2820 Datalingvistikk V2017 Forelesning 2, 23.1 Jan Tore Lønning

MAT-INF 1100: Obligatorisk oppgave 1

INF2820 Datalingvistikk V2012. Jan Tore Lønning

INF2820 Datalingvistikk V2015. Jan Tore Lønning

Løsningforslag for obligatorisk innlevering 2 INF2820

Scanning - I Kap. 2. Hva scanneren gjør

IN1000 Obligatorisk innlevering 7

Skanning del I INF /01/15 1

INF2080 Logikk og beregninger

INF2820 Datalingvistikk V2015. Jan Tore Lønning

Typisk: Kan det være både nøkkelord og navn, så skal det ansees som nøkkelord

INF2820 Datalingvistikk V2016. Jan Tore Lønning

INF2820 Datalingvistikk V2016. Jan Tore Lønning

Typisk: Kan det være både nøkkelord og navn, så skal det ansees som nøkkelord

Obligatorisk oppgavesett 1 MAT1120 H16

Skanning del I. Kapittel 2 INF 3110/ INF

MAT-INF 1100: Obligatorisk oppgave 1

INF2820 Datalingvistikk V2011. Jan Tore Lønning & Stephan Oepen

INF 2820 V2018: Innleveringsoppgave 2

INF2820 Datalingvistikk V2012. Jan Tore Lønning

Obligatorisk oppgave 2 i INF 4130, høsten 2009

Repetisjon. 1 binærtall. INF3110 Programmeringsspråk. Sist så vi ulike notasjoner for syntaks: Jernbanediagrammer. BNF-grammatikker.

1/31/2011 SAMMENHENGER FSA OG REGULÆRE UTTRYKK. Regulære språk. Fra FSA til RE. Fra regulært uttrykk til NFA REGULÆRE UTTRYKK I DATALINGVISTIKK DEL 2

Obligatorisk oppgave 1 i INF 4130, høsten 2009

INF3110 Programmeringsspråk

Kap.4, del 2: Top Down Parsering Kap. 5, del 1: Bottom Up Parsing INF5110, 7/ Legger ut en oppgave til kap. 4 (se beskjed).

INF2820 Datalingvistikk V2015. Jan Tore Lønning

IN1010 Objektorientert programmering Våren 2019

INF Innleveringsoppgave 6

Hjemmeeksamen 2 i INF3110/4110

INF Obligatorisk innlevering 5

Obligatorisk oppgave 1 i INF 4130, høsten 2008

PGZ - Hangman Ekspert Python Lærerveiledning

Dagens tema: Regulære språk og uttrykk

INF Obligatorisk innlevering 6

Kap. 5, Del 3: INF5110, fra 1/3-2011

Obligatorisk oppgave 2: Bilhierarki

INF2820 Datalingvistikk V2014. Jan Tore Lønning

IN2110 Obligatorisk innlevering 1a

Innlevering 2a i INF2810, vår 2017

Obligatorisk oppgave 1 INF1020 h2005

1 3Hva er klokka? Hva er klokka? Hva er klokka? Hva er klokka? Hva er klokka? Hva er klokka?

Presentasjon av oblig 2

INF2820-V2018 Oppgavesett 10 Gruppe 18.4

UNIVERSITETET I OSLO

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000

INF2820 Datalingvistikk V2014. Jan Tore Lønning

Obligatorisk oppgave 2 INF2310 Våren 2018

IN1010 V18, Obligatorisk oppgave 5

UNIVERSITETET I OSLO

MAKE MAKE Arkitekter AS Maridalsveien Oslo Tlf Org.nr

Sudokubrettet Et sudokubrett består av n n ruter. Vi bruker følgende begreper i oppgaven:

IN2080. Oppgave 1. Oppgave 2. Eksamen. Vår Den nondeterministiske endelige automaten A er gitt ved (Q, Σ, δ, q 0, F ) der

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000

INF1820: Introduksjon til språk-og kommunikasjonsteknologi

INF1820: Introduksjon til språk-og kommunikasjonsteknologi

Sudokubrettet Et sudokubrett består av n n ruter. Vi bruker følgende begreper i oppgaven:

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

EKSAMENSOPPGAVE. Vil det bli gått oppklaringsrunde i eksamenslokalet? Svar: NEI

Obligatorisk oppgave 4: Lege/Resept

INF Obligatorisk innlevering 7

EKSAMENSOPPGAVE / EKSAMENSOPPGÅVE

Øvingsforelesning i Python (TDT4110)

MAT-INF 1100: Obligatorisk oppgave 1

I denne oppgaven skal vi gjøre enkle operasjoner på tekst, som å endre størrelsen på bokstavene og telle ord.

MEK1100, vår Obligatorisk oppgave 1 av 2. Torsdag 28. februar 2019, klokken 14:30 i Devilry (devilry.ifi.uio.no).

For å sjekke at Python virker som det skal begynner vi med å lage et kjempeenkelt program. Vi vil bare skrive en enkel hilsen på skjermen.

MAT1120. Obligatorisk oppgave 1 av 2. Torsdag 20. september 2018, klokken 14:30 i Devilry (devilry.ifi.uio.no).

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 v2009

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 v2008

MAT 1120: Obligatorisk oppgave 2, H-09

UNIVERSITETET I OSLO

INF2820 Datalingvistikk V2012. Jan Tore Lønning & Stephan Oepen

Eksamen INF2270 våren 2018

Fig1. Den konvekse innhyllinga av 100 tilfeldige punkter i planet (de samme som nyttes i oppgaven.)

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

Transkript:

INF 2820 V2018: Innleveringsoppgave 1 Besvarelsene skal leveres i devilry innen fredag 9.2 kl 18.00 Det blir 5 sett med innleveringsoppgaver. Hvert sett gir inntil 100 poeng. Til sammen kan en få inntil 500 poeng. For å kunne gå opp til eksamen må du ha oppnådd minst 300 poeng til sammen på de 5 settene. For å oppnå poeng er det viktigere at du prøver å løse en oppgave enn at løsningen er helt riktig. Vektleggingen er slik sett annerledes enn på eksamen. Innleveringsfrister utsettes kun i forbindelse med sykdom (ved egenmelding eller legeerklæring), og omlevering vil ikke være mulig Vi går ut i fra at du har lest og er kjent med IFIs reglementet for obligatoriske oppgaver: http://www.uio.no/studier/eksamen/obligatoriske-aktiviteter/mn-ifi-oblig.html http://www.uio.no/studier/eksamen/obligatoriske-aktiviteter/mn-ifi-obligerretningslinjer.html og også kjenner rutinene for behandling av fuskesaker http://www.uio.no/om/regelverk/studier/studier-eksamener/fuskesaker/ Dette er en individuell oppgave. Det skal ikke leveres felles besvarelser. Du kan levere om igjen i Devilry inntil fristen, men inkluder i så fall for alt du vil ha bdømt i den siste innleveringen. De tidligere innleveringene blir ikke lest. Hvis du leverer mer enn en fil, pakk filene i et zip-arkiv, hvis det bare er en fil, lever filen. Kall filen for <brukernavn>_inf2820_innlev_1 Filene det vises til i oppgaveteksten blir ikke lagt ut i vortex. Du finner dem på IFIs cluster under /projects/nlp/inf2820/fsa Oppgave 1: Endelige tilstandsmaskiner (20 poeng) Denne oppgaven kan gjøres i JFLAP. Du anbefales likevel å løse den med papir og penn først for å få eksamenstrening. Så kan du bruke JFLAP til å kontrollere løsningen din. a. Lag en ikke-deterministisk endelig tilstandsmaskin (NFA) som beskriver språket L1=L(a*b(a+c)* + ac(b+a)), der alfabetet er A={a, b, c}. (Symbolet + er her disjunksjon). b. Lag en deterministisk maskin (DFA) som beskriver det samme språket. c. Lag en tilstandsmaskin som beskriver komplementspråket til L1. d. Hvilke av følgende uttrykk er i L1? i. abc ii. acb iii. bac iv. bbc v. aaaa vi. aaab vii. aaba viii. abaa ix. abab x. baaa 1

Innlevering: Svar på de fire punktene. Hvis du løser oppgaven med papir og penn og tegner diagrammer, er det tilstrekkelig (for pkt a-c) å ta et tydelig bilde av hvert diagram og levere disse. Bruker du JFLAP, kan du lagre diagrammene som JPEG-filer og levere. Oppgave 2: NFA, algoritme for gjenkjenning, klokkeslettuttrykk (25 poeng) På forelesningen 29.1 går vi gjennom en smart algoritme for gjenkjenning med NFA, og vi gir en enkel Python-implementasjon. Denne finner du i filen nfa_smart.py. Vi har gjort et par utvidelser i forhold til forelesningen. Vi tillater NFA-er med forkortelser. Selve algoritmen, den delen du trenger å forholde deg til, er nrec(tape, nfa, trace=0). Her kan tape være en liste eller en streng, mens nfa er et objekt av klassen NFA. Det er også et opsjonelt argument trace, der trace=1 gir utskrift av prosessen underveis. Denne prosedyren svarer True hvis tapen er i språket og False ellers. Automater kan skrives i en fil som vist i template_abrs.nfa. Symboler uten anførselstegn er forkortelser for endelig mange symboler, f.eks. er DET en forkortelse for 'a' og 'the'. Kanten 0 DET 2 betyr at du fra tilstand 0 går til tilstand 2 hvis du ser 'a' eller 'the' som neste symbol i tapen, men DET er ikke et lovlig tape-symbol. At DET er en forkortelse for 'a' og 'the' står under ABRS. Programmet er ganske lite fleksibelt med hensyn til hvordan automatfilen ser ut. Her bør du følge template_abrs.nfa med hensyn til linjeskift o.l. Lag en NFA for norske klokkeslettutrykk. Du kan bruke 12 timers klokke og "gammel tellemåte", eks. 'ti over halv fire'. Du kan også ta med uttrykksmåten 'femten førti', men det er frivillig. Eksempler: Skal være med tre halv fem ti på sju fem over halv åtte kvart over ni kvart på ti Skal ikke være med halv kvart på halv ni fem over kvart på ti ti på halv halv over to halv på tolv Det skal være minst ett uttrykk for alle minutter gjennom dagen. NFA-en skal skrives på samme format som template_abrs.nfa og testes med nfa.py på eksemplene over. Skriv nettverket ditt til en fil etter modell av template_abrs.nfa og test netteverket på eksemplene. Innlevering: Filen med NFA og kjøringseksempel med eksempeluttrykkene både de som skal være med og de som ikke skal være med. 2

Oppgave 3: Innlesning av tekst (20 poeng) Vi skal nå bevege oss fra de mer teoretiske eksemplene til språkteknologiske anvendelser. I dette emnet skal vi arbeide mye med tekster. Teksten "Python og NLTK i INF2820, V2018" er konvertert til ren tekst og lagret på IFIs maskiner her /projects/nlp/inf2820/python_inf2820_v2017.txt. a) Les den inn i en interaktiv Python-sesjon som en streng. Kall den "pyt_raw". Oppskriften finner du i seksjon 3.1 i NLTK-boka, underavsnitt "Reading local files". Hvis du ser noe rusk i teksten, så rens den. b) Når vi videre skal arbeide med en tekst, kan det være en fordel å dele den opp i en liste av ord, der hvert ord er en streng. Den enkleste måten å gjøre dette på er ved å bruke split i python. >>> pyt_words1 = pyt_raw.split() NLTK gir oss også et annet alternativ: >>> pyt_words2 = nltk.word_tokenize(pyt_raw) Hva blir forskjellen på de to? Ser du fordeler ved å bruke word_tokenize? (Obs! NLTKs word_tokenize er optimalisert for engelsk og kan gi noen rare resultat for norsk.) c) Et ord som "jeg" er det samme om det står først i en setning og skrives "Jeg". Tilsvarende for andre ord. For en del anvendelser er det derfor en fordel å gjøre om teksten til bare små bokstaver før vi går videre. Gjør om alle ordene i pyt_words2 til små bokstaver, og kall resultatet pyt_low. d) Plukk ut alle ordforekomstene i pyt_low som inneholder en av de norske bokstavene æ, ø, å. Hvor mange slike ordforekomster er det? e) Vi er nå interessert i hvor mange forskjellige ord det er i teksten som inneholder en av de norske bokstavene. Plukk ut de unike forekomstene. Hvor mange er det? f) Vi skal nå skrive de unike forekomstene til en fil. Når vi skal skrive noe til en fil, kan vi åpne fila ved >>> f=open(<filnavn>, 'w') Vi kan skrive til fila ved å bruke >>> f=write(<det vi vil skrive>) Og til slutt lukke fila ved >>> f.close() For mer om dette se https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files Skriv de unike forekomstene av ord som inneholder æ, ø eller å til en fil kalt norske.txt, ett ord på hver linje. Det kan være nyttig å vite at '\n' betyr ny linje i Python-strenger, prøv >>> print('jeg\ner\n\nglad') Innlevering: Svar på spørsmålene i (b), (d) og (e), forklar med kode hvordan du løste oppgaven. Levér også fila norske.txt. 3

Oppgave 4: Regulære uttrykk og bearbeiding av tekst (20 poeng) I teksten vi har lest inn er det en del uttrykk som ikke er vanlige ord, inkludert stinavn på Unix-format, som "/projects/nlp/nltk_data" tall For en del prosessering kan det være bedre å skifte ut slike uttrykk, som ofte bare forekommer en gang, med en betegnelse som sier oss at her står det et stinavn, eller her står det et tall. a) Skriv et regulært uttrykk i Python for stinavn. b) Skriv en prosedyre som bruker Pythons regulære uttrykk (seksjon 3.4 og delvis 3.5 i NLTK-boka) som tar en tokenisert tekst og skifter alle tokens som er stinavn med "<path>" og alle tokens som er tall med "<num>". Med en tokenisert tekst, mener vi her en liste av strenger som f.eks. pyt_words2. Bruk resultatet ditt på pyt_words2. c) Vi vil i stedet skifte ut stinavn og tall på en tekst som ikke er tokenisert, dvs. en tekst som er en streng. Skriv en prosedyre som leser en streng og som skifter ut alle substrenger som er stinavn med "path" og alle substrenger som er tall med "<num>". Hint: Det enkleste her er å bruke sub-metoden i Pythons re-modul, se: https://docs.python.org/3/howto/regex.html#search-and-replace Innlevering: Det regulære uttrykket og prosedyrene det spørres etter. Oppgave 5: Stemming (15 poeng) Jeg lurte på hvordan jeg deler en fil i mindre deler. Jeg gikk til Google. Skulle jeg søke på "split" og "file" eller "splitting" og "file"? Måtte jeg søke på begge to for å finne alle interessante resultat? Heldigvis ikke. Jeg får omtrent de samme resultatene uansett hvilket av termparene jeg bruker. Antagelig bruker Google en teknikk som kalles "stemming" for å få til dette. Dette er en velkjent teknikk i informasjonsgjenfinning ("information retrieval"). En prøver å fjerne endelser fra ord og dermed få dem ned til en felles stamme ("stem"), for dette eksempelet "split", som så blir brukt for søk. a) Se på Seksjon 3.6 Normalizing Text i NLTK-boka. Last inn LancasterStemmer og PorterStemmer. Hvordan vil de to takle eksempelet med "split/splitting"? Hvordan vil de to stemme "goldfishes"? Innlevering: Svar på spørsmålet og utskrift som viser resultater fra kjøring. b) Porter-stemmer er langt på vei blitt en standard stemmer for engelsk som mange tyr til. For referanseformål er den frosset og blir ikke utviklet videre. Men det er mulig med forbedringer og dette prøver bl.a. Snowball-stemmeren på. Den kan lastes i NLTK ved >>> snowball = nltk.snowballstemmer('english') Vi skal sammenlikne Porter-stemmer og Snowball-stemmer. Bruk teksten 'grail.txt' som kan lastes som en liste av ord med kommandoen 4

>>> grail = nltk.corpus.webtext.words('grail.txt') Finn deretter 6 forskjellige ordformer hvor Snowball-stemmeren og Porter-stemmeren gir forskjellig resultat. Vi regner ikke forskjeller mellom stor og liten bokstav som forskjeller i denne sammenheng.. (Hint: Finn alle ordforekomster hvor de to gir forskjellig resultat, og bruk set( ) til å plukke forskjellige ordformer fra disse.) Innlevering: 6 forskjellige ord som blir stemmet forskjellig av de to og resultatet de to stemmerne gir for disse ordene. Hensikten med denne oppgaven var Å forstå begrepet stemming og hva det kan brukes til Å se at det finnes programmer som kan hjelpe oss til å løse denne typen oppgaver, og at det ofte er bedre å bruke et slikt program enn å programmere alt selv fra grunnen av. At ulike programpakker kan gi ulike resultat, og at vi bør være klar over dette når vi velger redskaper. - SLUTT - 5