Laboration 7: Eget program
I laboration 7 kommer ni att skapa ett program från grunden och sedan implementera programmet i kod. Instruktionerna kommer endast beskriva de krav som ställs på programmet. Hur ni uppfyller dessa krav är upp till er.
Del 0: SMoL Tutor (enskilt)
I samband med Laboration 5-7 skall ni individuellt göra övningarna i SMoL Tutor som ni finner här. SMoL Tutor är ett system för att öva på att läsa och förstå kod samt för hjälpa er att bygga upp en mental modell över vad som händer under ytan när Python-kod körs. Övningarna tar i genomsnitt 10-20 minuter vardera och ingen enskild övning bör ta mer än 30 minuter att genomföra.
Verktyget är tillgängligt på engelska och era fullt anonymiserade svar kan komma att användas i kursutvecklingssyfte. Era anonymiserade svar kan eventuellt också komma att användas i forskningssyfte, om ni inte vill att era svar ska kunna användas i forskningssyfte så kontakta examinator. Övningarna är obligatoriska att genomföra, men det är inte tänkt att ni ska arbeta med dem under schemalagd labbtid då ni istället förväntas arbeta tillsammans med er labbpartner på de gemensamma delarna av labben.
Övningarna är:
- Definitions
- More definitions
- Even more definitions
- Mutable arrays
- More mutable arrays
- Even more mutable arrays
- Mutable variables
- More mutable variables
- Functions as values
- More about functions as values
- Lambda expressions
Ni kan göra övningarna när som helst under VT2, men i Webreg rapporteras de i grupper 1-4, 5-8 och 9-11 som är rekommenderat att göra i samband med Laboration 5, 6 respektive 7.
I samband med Laboration 7 bör ni göra färdigt de delar av SMoL Tutor som ni inte hunnit igenom tidigare.
Del 1: Rättstavning
Redovisning och kompletteringar
- Information om den muntliga redovisningen, samt eventuella kompletteringar kan ni läsa om sidan Redovisning.
Checklista att gå igenom vid redovisning
Vid redovisning ska ni gå igenom nedanstående checklista för den assistent ni redovisar för.
- Visa att ni kan köra ert program:
- Demonstrera att det går att använda med olika ordfrekvensdatafiler och att ni kan kontrollera olika texter.
- Peka ut och visa att alla krav på utskrifter och innehåll i rapporterna finns med.
- Visa att
pycodestyle
ochpydocstyle
inte ger några anmärkningar. - Den assistent som ni redovisar för kommer att be er redogöra för en eller
fler av följande moment i ert program:
- Översiktlig genomgång inläsning av ordfrekvensdata
- Översiktlig genomgång av flöde vid utskrift av rapport - vilka instanser är inblandade
- Hur upptäcks ett okänt ord, vilka instanser är inblandade i den processen?
- Hur plockas förslag på “rättstavade” ord fram?
- Vad tar/tog lång tid i er kod? Varför? Har ni lyckats få det att gå snabbare? Eller om inget tar lång tid, vad skulle kunna tänkas ta lång tid ett program som detta?
- Koden ska följa PEP 8.
- Moduler (själva filen), funktioner, klasser och metoder ska kommenteras enligt PEP 257.
- Koden ska följa koddispositionen nedan.
- Koden ska utföra uppgifterna enligt respektive uppgiftsbeskrivning.
- Koden ska vara uppdelad i olika filer enligt instruktionerna för respektive uppgift.
För hjälp med kontroll av PEP, se PEP 8 och PEP 257.
Uppgift
I denna uppgift ska ni skriva ett program som kontrollerar stavning på alla ord i en fil. Stavningskontrollen ska använda ordfrekvensdata för att kontrollera orden. I de fall där ett ord inte finns med bland ordfrekvens-data (dvs att ordet är okänt för programmet), ska förslag på rättstavning visas.
Denna laboration blir lite av en fortsättning på laboration 2 i kursen. I
laboration 2 använde ni ordfrekvensdata för att föreslå möjliga fortsättningar
på ett ord användaren skrev in, t.ex. "hopps"
-> "hoppsan"
.
I denna uppgift ska ni beräkna det kortaste redigeringsavståndet (minimum edit distance) mellan okända ord ni stöter på i en text och ord som finns bland ordfrekvens-datat. För varje okänt ord ska programmet ge förslag på kända ord som skulle kunna ersätta det okända ordet med.
Programmet ska också informera om hur lång tid det tar att köra, skriva ut information under körning, samt spara en rapport med förslag på ordersättningar.
Förrutom att ert program ska uppfylla kraven nedan så ska ni även se till att koden följer kodkraven.
Se vidare avsnitten nedan om
- Förberedelser innan ni börjar implementera
- Kortaste redigeringsavståndet
- Ordfrekvens-data
- Texter ni kan kontrollera
- Räkna ut hur lång tid något tar
- Förslag på kända ord
- Modulen argparse (frivilligt)
Förberedelser innan ni börjar programmera
Innan ni börjar programmera, gör nedanstående förberedelser och visa dem för en labassistent.
- Läs igenom informationen om implementationskrav m.m. (listan ovan).
- Diskutera och beskriv med egna ord vad ert program ska göra. Vad behöver ert program göra? I vilken ordning? Skriv ner detta som modulkommentar i er skriptfil.
- Utöver
Report
ochSpellingWarning
, som beskrivs nedan, vilka klasser behöver ni? Skissa ett UML-diagram och kom ihåg att uppdatera det om ni ändrar er design. - Beskriv kortfattat i text vad olika klasser ska göra. Detta är dels för att ni i pargruppen ska vara överrens om hur ni vill strukturera programmet, samt för att underlätta för labassistenterna när de hjälper er och vid redovisning. Skriv beskrivningar av era klasser i er skriptfil som docstrings till de klasser som ni har beskrivit i ert UML-diagram.
UML-diagram
Ett första klassdiagram för er kod skall stämmas av med assistent innan ni börjar skriva kod. Detta skall uppdateras om ni vid implementationen lägger till eller ändrar i er design.
Om ni skissat ert initiala klassdiagram på papper är det rekommenderat att använda ett program eller webbtjänst för att rita upp klassdiagrammet. På så sätt kan man enkelt uppdatera sitt klassdiagram.
- På datorerna i SU-salarna och på ThinLinc finns programmet Umbrello installerat (under kategorin “Development”)
- Gratis webbtjänster ni kan använda: draw.io, umletino
Krav på implementationen
Ni får definiera fler klasser än de som beskrivs nedan. Ni får också skriva ut mer information utöver det som anges nedan.
Körtid: Ert program får inte ta mer än 1 minut per körning på datorerna i labbsalen (alt. via Remote SSH).
Se tipsen nedan för saker ni kan tänka på för att minska körtiden.
Klasser
- Koden ska definiera klassen
SpellingWarning
vars instanser representerar upptäckta eventuella stavfel (bara för att ett ord inte finns i ordfrekvensdatat betyder inte att det är fel). - Koden ska definiera klassen
Report
som innehåller allaSpellingWarning
-instanser som skapas under rättstavningskontrollen.
Spara rapport i textfil
Efter att ha kontrollerat en textfil ska en rapport sparas som en textfil (en rapportfil för varje fil som kontrolleras). Rapporten ska innehålla följande:
- namnet på filen som kontrollerats
- hur lång tid det tagit att kontrollera filen
- alla potentiella fel som upptäckts
För varje potentiellt fel som upptäckts ska följande information finnas:
- radnummer som felet upptäckts på
- det potentiellt felstavade ordet
- minst tre förslag på korrekta ord
Utskrifter vid körning
När skriptet körs ska minst följande information skrivas ut:
- Efter att ordfrekvensdata har laddats, skriv ut information hur många ord som det laddats in frekvenser för, samt från vilken fil som informationen laddats in ifrån.
- När programmet börjar kontrollera en text, skriv namnet på filen som kontrolleras.
- När rapporten sparas, skriv namnet på den fil som rapporten sparats i.
Köra skriptet
Skriptet ska gå kunna anropas direkt från prompten i ett terminalfönster och ska kunna ta emot en eller fler filer att kontrollera (se exempel längre ner)
$ ./spellcheck.py ordfrekvensdata.tsv filattkontrollera.txt
Frivilligt - använd modulen argparse
Använd modulen argparse
för att hantera flaggor och argument till skriptet (se
nedan).
Uppgiftsinformation
Sidansvarig: Johan Falkenjack
Senast uppdaterad: 2025-05-02