INF 2820 V2015: Obligatorisk innleverinsoppgave 2

Like dokumenter
INF 2820 V2016: Obligatorisk innleverinsoppgave 2

INF 2820 V2016: Innleveringsoppgave 2

INF 2820 V2018: Innleveringsoppgave 2

INF 2820 V2016: Innleveringsoppgave 3 del 1

INF 2820 V2018: Innleveringsoppgave 1

INF 2820 V2016: Innleveringsoppgave 3 hele

INF 2820 V2015: Obligatorisk innleveringsoppgave 3

INF 2820 V2018: Innleveringsoppgave 3

INF 2820 V2016: Obligatorisk innleveringsoppgave 3

Løsningforslag for obligatorisk innlevering 2 INF2820

INF 2820 V2018: Innleveringsoppgave 1 - løsningsforslag

INF 2820 V2016: Obligatorisk innleverinsoppgave 1

Forelesning 9 mandag den 15. september

MAT1030 Forelesning 30

INF2820-V2018 Oppgavesett 10 Gruppe 18.4

Emnekode: LV121A Dato: Alle skrevne og trykte hjelpemidler

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

Mesteparten av kodingen av Donkey Kong skal du gjøre selv. Underveis vil du lære hvordan du lager et enkelt plattform-spill i Scratch.

INF2820 V2017 Oppgavesett 5 arbeidsoppgaver

INF2820 V2017 Oppgavesett 5 Gruppe 21.2

På lederutviklingsprogrammene som ofte gjennomføres på NTNU benyttes dette verktøyet. Du kan bruke dette til inspirasjon.

PRIMTALL FRA A TIL Å

Tyngdekraft og luftmotstand

SKOLEEKSAMEN I. SOS4010 Kvalitativ metode. 19. oktober timer

Repetisjon: høydepunkter fra første del av MA1301-tallteori.

NASJONALE PRØVER En presentasjon av resultatene til 5.trinn ved Jåtten skole, skoleåret

Prosent. Det går likare no! Svein H. Torkildsen, NSMO

Kodestil i C++ Introduksjon. Navnekonvensjoner. Globale variabler. Simen Hagen

Kreativ utvikling av engasjerte mennesker. Fylkesmessa 2009 Kristiansund

STATISTIKK FRA A TIL Å

Vedlegg til rapport «Vurdering av eksamen i matematikk, Matematikksenteret 2015»

Mal for vurderingsbidrag

Obs! Det er viktig å følge veiledningen under for å sikre korrekte a-meldinger og sammenstilling av inntektsopplysninger til de ansatte.

Vekst av planteplankton - Skeletonema Costatum

Labyrint Introduksjon Scratch Lærerveiledning. Steg 1: Hvordan styre figurer med piltastene

INF INF1820. Arne Skjærholt INF1820. Dagens språk: Russisk. dyes yataya l yektsiya. Arne Skjærholt. десятая лекция

Praksiseksempel - Bruk av konstruert modelltekst i skriveopplæringen

Oppgave 1 (samlet 15%)

INF5830, H2009, Obigatorisk innlevering 2. 1 Oppgave: Unære produksjoner i CKY

Joly. Brukerdokumentasjon for gruppelærere

Fortsettelses kurs i Word

Kom godt i gang. Ordboksverktøyet 1.0

En ordbok som den du skal jobbe med nå, kan gi deg svar på mange spørsmål, og ikke bare lære deg mange nye ord.

Nøkkelspørsmål til eller i etterkant av introduksjonsoppgaven:

INF109 - Uke 1b

MAT1030 Diskret matematikk. Kompleksitetsteori. Forelesning 29: Kompleksitetsteori. Dag Normann KAPITTEL 13: Kompleksitetsteori. 7.

Før du søker og finansiering. Ofte stilte spørsmål. Hvem kan delta på videreutdanning? Last ned som PDF. Skriv ut. Sist endret:

Evaluering av kollokviegrupper i matematikk og programmering høsten jenter har svart på evalueringen

Kapittel 4: Logikk (predikatlogikk)

Fasit og løsningsforslag til Julekalenderen for mellomtrinnet

Gå til Drawing and Animation i Palette-menyen og legg til Canvas og Ball. OBS! Ball må slippes inni Canvas på skjermen for at den skal bli lagt til.

Forberedelse til. Røyke slutt. Røyketelefonen

Mønsterkonstruksjon i GIMP.

Månedsevaluering fra Perlå januar 2011

EVALUERING SØLJE JANUAR 2011:

Nå kommer vi og bytter din el-måler!

ORIENTERING OM RETTEN TIL

Oppgave 1. Index Mobil. About me Mobil

Læringsmiljø Hadeland. Felles skoleutviklingsprosjekt for Gran, Lunner og Jevnaker. Vurderingsbidrag

en bil en/ei flaske et hus

Grafisk kryptografi (hemmelig koding av bilder)

7 av 10 nordmenn tror at vi ikke er over det verste i gjeldskrisen enda

Hvordan møte kritikk?

SEPTEMBER 2014 INFORMASJON TIL FORELDRE OG FORESATTE

Resonnerende oppgaver

Preken 14. august s i treenighet Kapellan Elisabeth Lund. Tekst: Joh. 15, 13-17

Lesevis LÆRERVEILEDNING. GAN Aschehoug

CD-ORD 9.0. Kom godt i gang

Oppgaver Oppgavetype Vurdering Status. 1 LIK generell informasjon (forts.) Flervalg Automatisk poengsum Levert

Oblig4 - forklaringer

INF1820: Ordklasser INF1820: Ordklasser. Arne Skjærholt. 13. februar. INF1820: Ordklasser. Arne Skjærholt. 13. februar

NyGIV Regning som grunnleggende ferdighet

UNIVERSITETET I OSLO

Vårt sosiale ansvar når mobbing skjer

Framgangsmåte for å løse oblig 4 i INF1000

Fosnes kommune Fellesfunksjoner Saksframlegg Høring - forslag til sterkere rettighetsfesting av ordningen med brukerstyrt personlig assistanse (BPA)

KarriereDagen SLIK FÅR DU STØRST UTBYTTE AV

Opptelling - forelesningsnotat i Diskret matematikk Opptelling

Obligatorisk oppgave nr. 3 (av 4) i INF1000, våren 2006

TMA4140 Diskret matematikk Høst 2011 Løsningsforslag Øving 7

ALGORITMER OG DATASTRUKTURER

FIRST LEGO League. Trondheim 2012

Fysikkolympiaden 1. runde 26. oktober 6. november 2015

Oppgave 1 (samlet 15%)

Sigbjørn Hals. Nedenfor har vi tegnet noen grafer til likningen y = C, der C varierer fra -2 til 3, med en økning på 1.

Positiv og virkningsfull barneoppdragelse

Energiskolen Veiledningshefte

HØRINGSSVAR FRA HORDALAND POLITIDISTRIKT ENDRINGER I UTLENDINGSFORSKRIFTENS REGLER OM TIDLIG ARBEIDSSTART OG FAMILIEGJENFORENING MED EØS- BORGERE

INF2820 Datalingvistikk V Gang Jan Tore Lønning

Obligatorisk oppgave 1 for INF1510 våren 2012

Ny EKSAMEN. Operativsystemer og nettverk

6 ting du bør vite om Office 365

Spørsmålsveileder. Kartleggings- og oppfølgingsplan for enslige mindreårige asylsøkere og flyktninger (KOPP)

Vi skal konsentrere oss om bondegårdsdyr. Grisen, hesten og musa spesielt)

VELKOMMEN SOM ELEV HOS OSS

Uendelige rekker. Konvergens og konvergenskriterier

Hefte med problemløsingsoppgaver. Ukas nøtt 2008/2009. Tallev Omtveit Nordre Modum ungdomsskole

Kvikkbilde 8 x 6- transkripsjonen av samtalen

Kapittel 1. Potensregning

Transkript:

INF 2820 V2015: Obligatorisk innleverinsoppgave 2 Besvarelsene skal leveres i devilry innen fredag 13.3 kl 18.00 Filene det vises til finner du på o /projects/nlp/inf2820/cfg o /projects/nlp/inf2820/scarrie Innledning Det er to deler en del om setninger og kontekstfrie grammatikker og en del om ord. Vi vil bruke NLTK sitt format for å skrive kontekstfrie grammatikker. En grammatikk blir altså et Python-objekt. En forutsetning for at du skal forstå dette og komme i gang, er at du har jobbet deg gjennom ukeoppgavesett 4. Vi vil skrive våre egne grammatikker til filer og lage Python-objekter av dem ved å bruke nltk.data.load() Oppgave 1: Basisgrammatikk (20 poeng) Vi tar utgangspunkt i oppgave5 fra oblig 1. Vi skal nå lage en kontekstfri grammatikk (CFG) for samme fragment som vi der laget en NFA for. Vi vil bruke NLTK-klassen grammar for å representere grammatikken. Du kan skrive grammatikken til fil og bruke nltk.data.load() for å lese den inn i Python. På grunn av mulige problemer for noen typer parsere vil vi dele oppgaven i to. Se først på fragmentet uten preposisjonalfraser (PP-ledd) og lag en grammatikk for denne. Kall den basic.cfg. Lag så en chart-parser fra denne og kall den basis_parser. Test at parseren gjør det den skal. I grammatikken skal du bruke naturlige kategorinavn (ikke-terminaler) som NP og VP slik det er hintet til i oppgaveteksten for oppgave 5 (oblig 1) og vist i eksempler i NLTK-boka, seksjon 8.1-8.3. Leksikonet skal inneholde minst 10 av hver av: - Substantiv, egennavn - Substantiv fellesnavn (disse skal også forekomme både i bestemt og ubestemt form) - Adjektiv - Intransitive verb - Transitive verb Og minst 5 hver i de øvrige verb-klassene. (Leksikonet skal ha litt størrelse for at vi senere skal se effekten av å effektivisere parserne.) For å teste grammatikken kan du bruke nltk.chartparser() som i >>> parser = nltk.chartparser(grammar) >>> for n in parser.nbest_parse( Mary ran.split()): print n Vi bruker nltk.chartparser() og ikke f.eks. nltk.recursivedescentparser() fordi den første kan behandle alle typer CFG-er, og vi er ikke interessert i parsingprosedyren ennå. Innlevering: basic.cfg 1

Oppgave 2: PP-ledd (15 poeng) Utvid basic.cfg til en grammatikk med PP-ledd, kall den pp.cfg, og lag chart-parser pp_parser. Du skal ha med minst 10 forskjellige preposisjoner. Det er her et poeng at vi kan få frem flertydigheter og at de reflekteres i trær. Se på setningene: a) Dyret i huset ved vannet sov. b) Kari sov i huset ved vannet. c) Kari likte huset ved vannet. d) Kari likte dyret i huset ved vannet. Hver av setningene (a-c) har to analyser. Sjekk at du får dette. For hver av de tre eksemplene forklar med en til to setninger intuitivt forskjellen mellom de to analysene. Hvor mange analyser får (d)? Her kan du også bruke nltk.chartparser() for å teste grammatikken. Innlevering: Fila som inneholder pp.cfg. Kjøringseksempler som viser trærne du får for setningene (a-d). Forklaringene det spørres etter. Del 2 Ord Vi har snakket en del på forelesningene om ord og ordformer og sammenhengene mellom dem. De følgende oppgavene vil se mer på dette. Oppgave 3: Stemming (10 poeng) For noen dager siden lurte jeg 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"? 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 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') Bruk for eksempel teksten 'grail.txt' som kan lastes som en liste av ord med kommandoen >>> grail = nltk.corpus.webtext.words('grail.txt') 2

Finn deretter 6 forskjellige eksempler hvor de to stemmerne gir forskjellig resultat. Vi regner ikke med forskjeller i stor og liten bokstav eller den lille u-en først, som vi skal komme tilbake til. (Hvis du har problemer med u-en, kan det være en ide å gjøre neste oppgave først.) Innlevering: 6 forskjellige ord som blir stemmet forskjellig av de to og resultatet de to stemmerne gir for disse ordene. Oppgave 4: Norsk stemming, norske tegn, unicode og UTF-8 (15 poeng) OBS: Denne oppgaven er beskrevet ut i fra slik IFIs Linux-cluster oppfører seg. Den kan fortone seg annerledes på din egen maskin. Så langt har vi sett på engelsk. Det er ikke så mye for norsk språk i NLTK, men det er en Snowballstemmer. Den kan lastes med >>> norsk_stemmer = nltk.snowballstemmer('norwegian') a) Test den på en del norske ord som "kaster", "kastet", "splittet", "splitten", "splitting", "splittelse". Gir den de resultatene du forventer? For engelsk stemming er det et mål å stemme "split" og "splitting" til samme ord, og ikke "split" for den ene og "splitt" for den andre. Kan du komme på liknende eksempler for norsk hvor et leksem har noen former med enkelkonsonant til slutt og andre former med dobbel konsonant etterfulgt av en endelse? Hvordan takler den norske Snowball-stemmeren disse? Innlevering: Svar på spørsmålene. b) Den norske stemmeren har imidlertid en annen type problem. Hva skjer når du prøver >>> norsk_stemmer.stem('påskeøya') Norske tegn er et problem. Dette er et problem som språkteknologer må forholde seg til. Vi må også kunne arbeide med andre språk enn norsk og engelsk språk som bruker andre tegnsett. Du bør lese seksjon 3.3 Text Processing with Unicode i NLTK-boka, frem til "Extracting Encoded Text from Files" før du går videre. Vi vet at inni datamaskinen er alt representert som 0-er og 1-er, men tenker ikke over det til daglig. En bokstav er representert som en sekvens av 0-er og 1-er. Det er ulike måter en kan velge å representere dette på. Amerikanerne etablerte tidlig en standard som er blitt stående, ASCII (se http://en.wikipedia.org/wiki/ascii ). Her representeres hvert tegn med 7 bits (en sekvens av 7 0-er og 1-ere). Dette gir plass til 128 forskjellige tegn. Men det gir ikke plass til de norske æ, ø, å, Æ, Ø, Å, for eksempel. Hva skal vi gjøre med de norske tegnene? En tidlig ide, som ble brukt på IFIs terminaler for 40 år siden, var å bytte ut symbolene [, \, ] med Æ, Ø, Å og {,, } med æ, ø, å. Siden ASCII-nummerne til [, \, ] følger rett etter ASCII-nummerne til de engelske bokstavene A-Z kunne en da bruke 3

ordningsrelasjonen på ASCII-representasjonen til å ordne bokstavene leksikalsk, slik det var vanlig for engelsk. Tilsvarende kunne en gjøre for de små bokstavene. Men programmeringsskode som krevde parentessymbolene, så underlig ut. En hadde ikke tilgang til de norske bokstaver og parentesene som forskjellige symboler. Etter hvert begynte en å bruke 8 bits (1 byte) for å representere en bokstav. Da fikk en plass til 128 tegn til, 256 i alt. Disse nye plassene kunne brukes til for eksempel norske tegn. Inntil 2013 brukte IFIs maskiner en slik koding, kalt latin-1 (se http://en.wikipedia.org/wiki/iso/iec_8859-1 ). Men det var en del begrensninger med denne løsningen også: Forskjellige maskinleverandører og plattformer valgte forskjellig koding. Dette gjorde at filer måtte konverteres fra en plattform til en annen. Siden det bare var plass til 256 tegn, trengte en ulike kodinger for ulike språk. En kunne dermed heller ikke behandle mange språk samtidig hvis de krevde ulik koding. Og det er språk som har mye mer enn 256 forskjellige tegn. Unicode(http://en.wikipedia.org/wiki/Unicode ) har plass til alle tegn i alle de språk det kan behandle. Hvert tegn har et unikt såkalt "code point". Så i Unicode blir alle problemer løst. Men vi lagrer ikke filene våre i unicode det ville tatt for stor plass. På IFIs maskiner bruker vi UTF-8. Dette har plass til alle "code points" i unicode, men tar mindre plass. ASCII-tegnene tar fremdeles bare en byte, mens de norske tegnene bruker 2 bytes i UTF-8. Dette "forklarer" den litt rare oppførselen vi ser i >>> a = 'påskeøya' >>> len(a) 10 >>> a 'p\xc3\xa5ske\xc3\xb8ya' >>> Her er det altså UTF-8-kodingen som Python forholder seg til. For å få Unicode-representasjonen i stedet, kan vi bruke "decode"-metoden som alle strenger har. Omvendt kan vi bruke "encode" for å representere en unicode streng i en eller annen koding. >>> b = a.decode('utf8') >>> len(b) 8 >>> print b påskeøya >>> b u'p\xe5ske\xf8ya' >>> b.encode('utf8') 'p\xc3\xa5ske\xc3\xb8ya' Print-kommandoen gir "riktig" resultat, fordi Python er satt opp til å kjenne igjen den standarkodingen vi bruker i operativsystemet. Du kan nå bruke dette til å "stemme" norske ord ved først å gjøre dem om til unicode-strenger. 4

Les inn og stem den lille teksten nor2. Tenk over hva du gjør med punktumene på slutten av setningene. Innlevering: Kode + resultatet av å stemme nor2. PS. Strengt tatt burde ikke Snowball-stemmeren virke for ord, som 'kaster' som ikke er dekodet til Unicode. Når den likevel gjør det, er det fordi Python ganske lett konverterer automatisk mellom Unicode og kodinger for tegn som ligger i ASCII-delen. Oppgave 5: Leksikon og morfologisk analyse (40 poeng) Gir stemming alt vi ønsker oss? Jeg søkte i Google først på "regjering" og "foreslått" og dernest på "regjering" og "foreslo". Her fikk jeg helt forskjellige resultat. Det første søket fanget også opp forekomster av "foreslå", men ikke "foreslo". For å se at "foreslo" er en form av "foreslå", holder det ikke med metoder som fjerner endelser. Da trengs det tilgang til et leksikon. Språkbanken, som ligger ved Nasjonalbiblioteket, har en del tilgjengelige ressurser for norsk språk, bl.a. leksika, se http://www.nb.no/tilbud/forske/spraakbanken/tilgjengelege-ressursar/leksikalske-ressursar Vi skal her bruke SCARRIE-leksikonet, som ble utviklet av Victoria Rosén og Koenraad De Smedt ved Universitetet i Bergen, og Torbjørn Nordgård ved Norges Teknisk-Naturvitenskapelige Universitet. Vi har lastet ned leksikonet. Deretter har vi fjernet en del trekk knyttet til stil, som ikke er relevant for oss, slått sammen former som blir like etter at denne informasjonen er fjernet og lagret det i et kompakt format. For så å lese det inn i Python, har vi laget noen enkle objekter og metoder. Du bør laste ned hele mappen scarrie til ditt eget område. Leksikonet består av mer enn 300 000 forskjellige ordformer. Hver ordform består av selve formen og to typer trekk, et morfologisk trekk og et syntaktisk trekk. Vi har laget en klasse for dette i Python. Når wf er et bestemt objekt i denne klassen kan det for eksempel se slik ut >>> wf.form u'kaster' >>> wf.morf_feat 'V,pres' >>> wf.syn_feat 'V_pres_indic_active_main_ditrans!intrans!trans' Vi har brukt Unicode for formen, men vanlig ASCII for trekkene siden de ikke inneholder norske tegn. a) Hva tror du de ulike delene av de to trekkene wf.morf_feat og wf.syn_feat i eksempelet er ment å representere? Analyser dem bit for bit. (Du kan kanskje ha nytte av å se på flere eksempler før du besvarer dette.) Innlevering: Svar på spørsmålene. b) Innlesningen foregår ved at du lager et objekt i klassen ScaryLexicon, som i det følgende eksempelet. Denne har en attributt word_forms som er en liste av alle ordformene. Vi kan plukke ut et tilfeldig av dem og inspisere nærmere, som vi også gjorde over. 5

>>> sclex = ScaryLexicon() >>> wf2 = sclex.word_forms[100000] >>> wf2.form u'glupskest' >>> wf2.morf_feat 'Adj,indef,sg' >>> wf2.syn_feat 'Adj_mfn_sup_indef_sg' >>> wf2.ident 100000 Vi har også lagt inn en identifikator i hver ordform som sier hvor den befinner seg i lista, som i de to siste linjene over. For å få mindre å skrive i det følgende, kan du for eksempel sette >>> word_forms = sclex.word_forms Grunnen til at vi må ha identifikatorer for ordformer, og ikke kan bruke selve formen som identifikator, er at flere ulike ordformer, skrives likt. Se på word_form[140843], word_form[140853] og word_form[140902]. Men når vi skal analysere tekst, er det selve denne formen, 'kaster,' vi ser. For å finne alle mulige analyser av 'kaster', må vi da først finne identifikatorene til de ordformene som skrives slik. Lag en Python-dictionary form_to_ids som til en overflateform, som 'kaster', gir en liste av identifikatorer: alle identifikatorer av ordformer med denne formen. Altså, for 'kaster' skal den gi [140843, 140853, 140902]. Den skal bruke Unicode-representasjon av formene, slik at den også kan takle norske tegn. Lag deretter en funksjon som til en form gir alle mulige analyser, for eksempel til 'kaster' noe slikt som V,pres V_pres_indic_active_main_ditrans!intrans!trans N,pl,indef N_m_pl_indef N,sg,indef N_m_sg_indef Innlevering: Kode+resultatet av å analysere 'kastet' og 'øyer'. c) Vi vil også at analysen vår skal gi grunnformen, som også kalles lemmaet, til de ulike ordfomene. For eksempel ønsker vi til 'foreslo' å finne 'foreslå'. Scarrie-leksikonet gir ikke direkte svar på dette. Det inneholder ikke lemmaer. Men det Scarrie-leksikonet gjør, er å samle sammen ordformer til et leksem (som det kaller "Lexical Entry"). Leksemet inneholder ikke annen informasjon utover at det grupperer sammen ordformer. Under innlesningen av ScaryLexicon har vi innført en identifikator for hvert leksem. I listen sclex.lexemes blir hvert leksem tilordnet en liste av ordformidentifikatorer som sier hvilke ordformer som er i dette lemmaet. For eksempel vil >>> lexemes[30027] [140902, 140903, 140904, 140905, 140906] 6

Og ser vi nærmere etter står dette for: 140902 kaster N,sg,indef N_m_sg_indef 140903 kastere N,pl,indef N_m_pl_indef 140904 kasteren N,sg N_m_sg_def 140905 kasterer N,pl,indef N_m_pl_indef 140906 kasterne N,pl N_m_pl_def I dette tildfellet er den naturlige siteringsformen, den du vil finne i en ordbok, 'kaster'. Den kommer først, men det gjør den ikke for andre leksem. Sjekk f.eks. leksem 30016. Du skal nå skrive en kodebit som til et leksemnummer returnerer den ordformen som er den mest naturlige siteringsformen, for eksempel til 30027 gir den 'kaster'. Du må her tenke igjennom flere ting: Hvilken form er den mest naturlige å finne i en ordbok for ulike ordklasser, som verb (V), substantiv (N) og adjektiv (A)? Hvordan finner du frem til denne ved hjelp av trekkene morf_feat og syn_feat? Hvordan skriver du koden for å finne frem til denne? Innlevering: Kode + resultatet av å bruke koden på leksemnr 30027, 30049, 30061 d) Nå får vi beregnet et lemma fra et helt leksem. Men det vi ønsker er en "lemmatizer", en rutine som tar en ordform og gir lemmaet, for eksempel til 'foreslo' gir 'foreslå'. Utvid nå funksjonen analyze() fra pkt (b) slik at den i tillegg returnerer et lemma. Da kan resultatet bli noe slikt for 'murer' som argument: mur morf N,pl,indef N_m_pl_indef mure morf V,pres V_pres_indic_active_main_intrans!ref!trans mure morf N,pl,indef N_f_pl_indef murer morf N,sg,indef N_m_sg_indef Innlevering: Kode+resultat av analyse av 'kaster', 'kastet', 'fisker', 'øyer', 'foreslo' og 'gås'. e) Hvor mange orformer og hvor mange leksem er det i leksikonet? Gi eksempler på gode norske ord som ikke er i leksikonet selv med så mange ord. Innlevering: Svar på spørsmålene f) Frivillig: Leksikonet inneholder også en samling med prefikser og suffikser. Disse gir oss muligheten til å splitte opp ord som ikke står direkte i leksikonet og analysere dem. De som ønsker en større utfordring, oppfordres til å se på dette. Innlevering: Utvidet kode og eksempel på vellykkete analyser som ikke står i ordformleksikonet. 7

En enda større utfordring er sammensatte ord. Noen av vanskelighetene oppstår fordi sammensatte ord ikke bare består av en konkatenering av to ord. Det kan være tillegg av bokstaver mellom de to ordene ('e' eller 's') og det kan være bokstaver som faller bort. Etterord: en moral fra denne oppgaven er at det ikke bare er å lemmatisere et ord som utgangspunkt for søk. Formen alene, for eksempel 'murer', gir ikke et entydig lemma, men flere mulige lemma. For å finne ut hvilket som er riktig, må vi finne ut hvilken av de morfologiske og syntaktiske analysene som er riktig i setningen. Vi må tagge eller pare setningen. Og det forventer vi ikke av an søkemotor. Derfor nøyer den seg med å "stemme". 8