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
collectionsmodulen. Ni ska skriva koden själva. Däremot får ni använda t.ex.itemgetterför att sortera er data. -
Ditt program ska bestå av två moduler:
main.pyochanalyzer.py. -
Du skall skapa funktioner för textanalysering i modulen
analyzer.py. -
Filen
main.pyskall enbart innehålla kommandoloopen, tänk while-loopen i marvin, och använda sig av modulenanalyzerfö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,wordsochletters. 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_frequencyochletter_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
allsom 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.txtochlorum.txtför att kolla att det fungerar.- Tags:
change.
PS. följande är rätt svar för
allmedlorum.txtfilen: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
qsom 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"