Analyser text och ord
Analysera text och ord
Section titled “Analysera text och ord”Vi har i Marvin byggt ett program bestående av två moduler och ett antal funktioner som samverkar för att Marvin kan svara på frågor. Vi har även bekantat oss med dictionary
där vi kan spara nyckel-värde par. Vi ska i denna uppgift skapa ett Marvin liknande program som tar emot inmatning och kan analysera en text.
Förkunskaper
Section titled “Förkunskaper”Du har en bra förståelse för dictionary
och har jobbat igenom Dictionaries och tupler i Python och Att läsa filer till en lista i Python.
Introduktion
Section titled “Introduktion”I kursrepot finns en del av “Phil, the Fiddler”, phil.txt
. Du skall använda den texten och låta ditt CLI-program analysera den.
Vill du lära dig mer om vad textanalys kan innebära “på riktigt” så läser du lite om text analys och text mining på Wikipedia.
Du kommer göra en övning med ordfrekvens, läs gärna om det på Wikipedia Letter Frequency och studera bilden som visar bokstävernas procentuella förekomst i det engelska språket.
För samtliga uppgifter gäller att ett ord består av bokstäverna [A-z]. Ett tips är att konvertera alla ord till enbart små bokstäver [a-z], det kan göra uppgiften enklare.
Googla “online word counter” eller “online letter counter” så hittar du verktyg som gör precis det du skall göra. Testa att köra in texten i ett av dem och se hur det ser ut. Då får du en referens och mental bild som kan hjälpa dig att se om du är på rätt väg eller ej.
Du ska i uppgiften göra ett program som analyserar en text från en fil. Det kan se ut på detta sättet när vi kör programmet:
Skriv DRY kod, funktioner som kan återanvändas för mer än 1 menyval.
Lösningar som använder konstruktionerna list/dict comprehension eller lambda funktioner godkänns inte i denna kurs.
Varje uppgift ska lösas med grundläggande Python konstruktioner som vi går igenom i kursen.
Börja med att kopiera text-filen phil.txt och lorum.txt.
Se till att din katalog analyzer
innehåller filen phil.txt
och lorum.txt
. phil.txt
ska vara FÖRVALT i programmet när man startar det.
-
Ni får inte använda externa moduler för att göra analyzen. T.ex. får ni inte använda
collections
modulen. Ni ska skriva koden själva. Däremot får ni använda t.ex.itemgetter
för att sortera er data. -
Ditt program ska bestå av två moduler:
main.py
ochanalyzer.py
. -
Du skall skapa funktioner för textanalysering i modulen
analyzer.py
. -
Filen
main.py
skall enbart innehålla kommandoloopen, tänk while-loopen i marvin, och använda sig av modulenanalyzer
för att lösa uppgiften. Koden ska ligga i en funktion som hetermain
. Glöm inteif __name__ == "__main__"
i main.py för att starta programmet. -
Analysera antal rader (ej tomma), ord och bokstäver med menyvalen
lines
,words
ochletters
. Skriv minst en funktion för varje kommando ianalyzer.py
.input: "lines" output: "17"input: "words" output: "199"input: "letters" output: "907"- Tags:
count
(gemensam för alla tre),words
,lines
,letters
.
- Tags:
-
Analysera även ord- och bokstavsfrekvensen och skriv ut de sju mest förekommande orden och bokstäverna. Använd menyvalen
word_frequency
ochletter_frequency
. Ange frekvensen i % av totala mängden ord eller bokstäver. Avrunda till en (1) decimal. Använd strukturen"<bokstav/ord>: <antal> | <procent>%"
i utskriften. Utskriften ska vara sorterad i storleks ordning och bokstavsordning sjunkande. Om två ord har 5 ska orden sorteras i bokstavsordning sjunkande. Skriv minst en funktion för varje kommando ianalyzer.py
.input: "word_frequency" output: "the: 12 | 6.0%to: 8 | 4.0%and: 7 | 3.5%of: 6 | 3.0%street: 5 | 2.5%him: 5 | 2.5%he: 5 | 2.5%"input: "letter_frequency" output: "e: 108 | 11.9%t: 91 | 10.0%o: 77 | 8.5%h: 67 | 7.4%n: 66 | 7.3%i: 64 | 7.1%a: 64 | 7.1%"- Tags:
freq
(gemensam för alla båda),word_frequency
,letter_frequency
.
- Tags:
-
Ditt program skall klara av menyvalet
all
som kör alla analyserings funktioner i följd och skriver ut resultatet. Utskriften ska vara sorterad i storleks ordning och bokstavsordning sjunkande. Om två ord har 5 ska orden sorteras i bokstavsordning sjunkande tips (använd er av en lista och tupler för att göra sorteringen).input: "all" output: "17199907the: 12 | 6.0%to: 8 | 4.0%and: 7 | 3.5%of: 6 | 3.0%street: 5 | 2.5%him: 5 | 2.5%he: 5 | 2.5%"e: 108 | 11.9%t: 91 | 10.0%o: 77 | 8.5%h: 67 | 7.4%n: 66 | 7.3%i: 64 | 7.1%a: 64 | 7.1%"- Tags:
freq
(gemensam för alla båda),word_frequency
,letter_frequency
.
- Tags:
-
Ditt program ska klara av menyvalet
change
. Det ska användas för att byta ut vilken fil som används vid övriga menyval. Använd ett input anrop för att fråga användaren om vad den nya filen heter som ska användas. Ni kan testa byta mellanphil.txt
ochlorum.txt
för att kolla att det fungerar.- Tags:
change
.
PS. följande är rätt svar för
all
medlorum.txt
filen:input: "all" output: "325140dolor: 2 | 8.0%vivamus: 1 | 4.0%vitae: 1 | 4.0%varius: 1 | 4.0%urna: 1 | 4.0%sit: 1 | 4.0%pellentesque: 1 | 4.0%i: 18 | 12.9%e: 16 | 11.4%u: 12 | 8.6%a: 12 | 8.6%t: 10 | 7.1%l: 10 | 7.1%s: 9 | 6.4%" - Tags:
-
Gör menyvalet
q
som avslutar programmet. -
Bedömning
- Programmet fungerar enligt specifikationen (alla menyval fungerar).
- Koden ska vara DRY (don’t repeat yourself).
- Felhantering och edge cases hanteras korrekt.
- Onödigt komplicerade lösningar kan ge komplettering.
-
Testa, validera och publicera din kod.
Extrauppgift
Section titled “Extrauppgift”-
Bygg ut ditt program så att det även kan skriva ned resultatet i en fil. Lägg till menyvalet
write [choice]
där[choice]
är något av de andra menyvalen. Ditt program ska skriva ner resultatet i en fil som heteroutput.txt
. Om filen redan innehåller ett värde ska det skrivas över med det nya värdet.input: "write lines" file content: "17"input: "write words" file content: "199"