Kmom10: Projekt och examination

By . Latest revision .

Gör dbwebb update och dbwebb init innan du börjar med projektet.

Detta kursmoment avslutar och examinerar kursen.

Upplägget är enligt följande:

  • Projektet och redovisning (20-80h)

Totalt omfattar kursmomentet (07/10) ca 20+20+20+20 studietimmar.

#Projektidé och upplägg

Du ska utveckla ett rättstavningsprogram till terminalen som använder en Trie för att lagra en ordlista.

Börja med att kopiera filer med engelska rättstavade ord från exempel mappen.

# Stå i kursrepo mappen
cp example/dictionary/*.txt me/kmom10/spellchecker
cd me/kmom10/SpellChecker

Du kopierade fyra filer precis, alla har ett ord per rad. dictionary.txt innehåller 349900 rättstavade engelska ord och tiny_dictionary.txt innehåller 177. dictionary.txt kan ta lång tid att ladda och jobba med så när ni börjar med uppgiften använd tiny_dictionary.txt eller skapa en egen ännu mindre fil. De andra två filerna är för krav 5.

Innan du börjar med programmeringen ska du göra en analys av programmet du ska bygga och dokumentera det med klassdiagram.

Fråga i forumet om du känner dig osäker.

Andreas visar hur SpellChecker kan se ut när det är klart.

#Bedömning och betygsättning

När du lämnat in projektet bedöms det tillsammans med dina tidigare redovisade kursmoment och du får ett slutbetyg på kursen. Läs om grunderna för bedömning och betygsättning.

#Projektspecifikation

Utveckla och leverera programmet enligt följande specifikation. Saknas info i specen kan du själv välja väg, dokumentera dina val i redovisningstexten.

De tre första kraven är obligatoriska och måste lösas för att få godkänt på uppgiften. De tre sista kraven är optionella krav. Lös de optionella kraven för att samla poäng och därmed nå högre betyg.

Varje krav ger max 10 poäng, totalt är det 60 poäng.

#Krav 1: Grunden

Skriv din kod i katalogen me/kmom10/spellchecker. Filen som startar programmet skall heta spellchecker.py och ska innehålla klassen SpellChecker.

Implementera en Trie datastruktur, i filen trie.py, som använder Node objekt, node.py. Varje Node objekt behöver innehålla vilken bokstav noden representerar, en dictionary eller lista som ska hålla barn noderna och en boolean för att markera om det är en slut nod. Om du gör krav fyra ska du använda dictionary, annars kan du välja själv. I Trie:en ska det gå att lägga till nya ord, kolla om ett ord finns i datastrukturen och få ut alla ord baserat på ett prefix.

När man exekverar spellchecker.py ska ett SpellChecker objekt skapas som läser in en fil med rättstavade engelska ord (välj själv vilken fil som ska läsas upp vid start). Lägg in alla orden i ett Trie objekt. Starta sen ett klassiskt while-loop terminal program (Marvin meny). Följande menyval ska finnas:

  1. Ta ett ord som input och kolla om det finns i ordlistan (Trie objektet).

  2. En prefix sökning, användaren skriver in de tre första bokstäverna av ett ord. Programmet ska då skriva ut ord från ordlistan som har de bokstäverna som prefix, användaren ska kunna fortsätta att skriva in en bokstav åt gången och få ut orden som finns baserat på det prefixet. Du kan begränsa utskriften av ord till max 10 åt gången. Se video ovan för exempel.

  3. Byta ut ordlistan, användaren ska skriva in ett filnamn. Programmet ska då skapa ett nytt Trie objekt och läsa in orden från den nya filen.

  4. Skriv ut alla ord som finns i ordlistan.

  5. Exit

I SpellChecker klassen, lägg inte all kod i while-loopen, dela upp koden i metoder. T.ex. en metod/menyval åtminstonde.

#Krav 2: Klassdiagram

Innan du börjar programmera ska du analyser och planera vad du ska koda. Dokumentera med klassdiagram vilka klasser, attribut, metoder och relationer som du tror att du kommer skapa när du utvecklar programmet.

Klassdiagrammet ska lämnas in före du börjar koda projektet. Det finns en separat inlämning på Canvas för klassdiagrammet. Du behöver inte vänta på att få godkänt innan du fortsätter med att programmera, det viktiga är att du har lämnat in det före.

Så gör ett klassdiagram, lämna in det och sen börjar du koda projektet.

Det gör inget om koden skiljer sig från diagrammen när du är klar med projektet. Det blir inte alltid som man tänker sig.

När du har kodat klart projektet, jämför hur din kod faktiskt blev med hur du tänkte dig att det skulle fungera. I redovisningstexten skriver du hur din kod förhåller sig till diagrammet.

Spara som classdiagrams.png. Ladda upp filen på Canvas inlämningsuppgiften.

#Krav 3: Testning

Skriv enhetstester för dina klasser. Spara testerna i filen test.py.

Minst tre tester för varje klass. Testa inte bara positiva utfall, testa även när saker går fel. I dina enhetstester ska du ha en TestCase klass för varje klass du testar. Alltså lägg inte alla tester i en och samma TestCase klass.

Se till att din kod validerar.

# Ställ dig i kurskatalogen
dbwebb publish kmom10

#Krav 4: Sortera utskriften (optionell)

För menyval 4 sortera alla orden innan de skrivs ut. Implementera en Merge Sort algoritm som metod i SpellChecker klassen. Hämta ut alla ord från Trie objektet, lägg dem i en lista, sortera listan med Merge sort och skriv ut listan. Om du gör detta kravet ska du använda en dictionary för att hålla barn noderna i Node klassen.

#Krav 5: Baser utskrift för menyval 2 på word frequency (optionell)

I detta kravet ska du använda filerna frequency.txt och tiny_frequency.txt för ordlistan. De filerna innehåller rättstavade engelska ord och hur vanliga de är. Varje rad innehåller ett ord och hur vanligt ordet är (ett float tal), separat med space. Ju högre siffra desto vanligare är ordet. Bygg ut din Node klass med ett attribut för frequency. I din metod för att lägga till ord, när du markera en slut nod behöver du också lägga in frekvensen för ordet som noden marker.

Nu för menyval 2, när programmet skriver ut 10 ord som finns baserat på prefixet ska programmet sortera alla orden baserat på frekvens och begränsa utskriften till att max skriva ut de 10 med högst frekvens.

#Krav 6: Grafiskt gränssnitt på webben (optionell)

Gör ett grafiskt gränssnitt för att kolla om ett ord är rättstavat. Skapa en webbsida med Flask som innehåller två undersidor, en sida för att kolla om ett ord finns i ordlistan och en sida som skriver ut alla orden som finns i ordlistan. Webbsidan ska även fungera på studentservern!

Koden som finns i app.py, som har med Flask att göra, behöver inte vara i en klass.

#Redovisning

  1. På din redovisningssida, skriv följande:

    1. För varje krav du implementerat, dvs 1-6, skriver du ett textstycke om ca 5-10 meningar där du beskriver vad du gjort och hur du tänkt. Poängsättningen tar sin start i din text så se till att skriva väl för att undvika poängavdrag. Missar du att skriva/dokumentera din lösning så blir det 0 poäng. Du kan inte komplettera en inlämning för att få högre betyg.

    2. Skriv ett allmänt stycke om hur projektet gick att genomföra. Problem/lösningar/strul/enkelt/svårt/snabbt/lång tid, etc. Var projektet lätt eller svårt? Tog det lång tid? Vad var svårt och vad gick lätt? Var det ett bra och rimligt projekt för denna kursen?

    3. Avsluta med ett sista stycke med dina tankar om kursen och vad du anser om materialet och handledningen (ca 5-10 meningar). Ge feedback till lärarna och förslå eventuella förbättringsförslag till kommande kurstillfällen. Är du nöjd/missnöjd? Kommer du att rekommendera kursen till dina vänner/kollegor? På en skala 1-10, vilket betyg ger du kursen?

2. Ta en kopia av texten på din redovisningssida och kopiera in den på Canvas. Glöm inte länka till din me-sida och projektet.

3. Se till att samtliga kursmoment validerar.

# Ställ dig i kurskatalogen
dbwebb publish me

#Revision history

  • 2019-02-29: (B, aar) Bytt projekt för att passa till algoritmer och datastrukturer. Förra projektet finns under [kmom10-2018](oopython-v2/kmom10-2018).
  • 2018-02-21: (A, aar) Först utgåva till V2.

Document source.