Bogklubbens analyseværktøj
Case

Du arbejder som programmør for en bogklub, der ønsker at analysere anmeldelser af bøger skrevet af medlemmerne. Bogklubben har samlet en stor mængde tekstdata fra anmeldelser og ønsker at få indsigt i, hvilke ord der bruges hyppigst i disse anmeldelser. Denne indsigt kan hjælpe med at forstå medlemmernes præferencer og fokusområder, samt identificere almindelige temaer i anmeldelserne.

Opgave

Du har fået udleveret et grundlæggende program, der læser en tekstfil og tæller forekomsten af hvert ord. Programmet er dog ikke fuldstændigt og kan indeholde fejl. Din opgave er at rette programmet, så det fungerer korrekt og opfylder kravene. Pexels Photo 694740

Forstå og forklar koden:

  • Forklar, hvad funktionen cleanText(String text) gør, og hvorfor den er nødvendig.
  • Hvad er setup()-funktionen ansvarlig for i dette program?

Rens teksten:

  • Forklar hvordan replaceAll(“[^a-zA-Z0-9\\s]”, “”) fungerer, og hvorfor det er vigtigt at fjerne tegnsætning og konvertere til små bogstaver.
  • Ændre replaceAll(“[^a-zA-Z0-9\\s]”, “”) så den også tager højde for æøå, da teksterne er skrevet på dansk.

Tæl ordene:

  • Beskriv, hvordan findWord(String word) fungerer, og hvad den bruges til i countWords(String text).
  • Implementer koden til at få vist det samlede antal unikke ord.

Forbedr koden:

  • Ændr funktionen printWordCount() til at sortere ordene efter hyppighed, så de mest hyppige ord vises først.
  • Tilføj en simpel grafisk visualisering af ordhyppighederne (f.eks. som et søjlediagram).
  • Udskriv kun de ti mest hyppige ord.
Udleveret kode
 
String[] words;
int[] counts;
int uniqueWords;

void setup() {
  size(800, 600);
  background(255);

  // Angiv stien til din tekstfil her
  String[] lines = loadStrings("Tekst.txt");
  String text = join(lines, " ");

  // Rens tekst og tæller ord
  text = cleanText(text);
  countWords(text);

  // Udskriv resultaterne
  printWordCount();
}

String cleanText(String text) {
  // Fjern tegnsætning og gør teksten til små bogstaver
  text = text.toLowerCase();
  text = text.replaceAll("[^a-zA-Z0-9\\s]", "");
  return text;
}

void countWords(String text) {
  words = new String[1000];
  counts = new int[1000];
  uniqueWords = 0;
  
  String[] allWords = splitTokens(text, " ");
  for (String word : allWords) {
    int index = findWord(word);
    if (index == -1) {
      words[uniqueWords] = word;
      counts[uniqueWords] = 1;
      uniqueWords++;
    } else {
      counts[index]++;
    }
  }
}

int findWord(String word) {
  for (int i = 0; i < uniqueWords; i++) {
    if (words[i].equals(word)) {
      return i;
    }
  }
  return -1;
}

void printWordCount() {
  int y = 20; // Startposition for tekstudskrivning
  for (int i = 0; i < uniqueWords; i++) {
    fill(0);
    text(words[i] + ": " + counts[i], 10, y);
    y += 20;
  }
}

Teksten der skal analyseres

tekst.txt

Tændstikmønster
Case

Du sidder og roder med en æske tændstikker og begynder at placere dem i et fint mønster. For hver tom ende ligger du en ny tændstik på tværs. Dvs. hvis der ligger to tændstikker i forlængelse af hinanden så skal der kun ligges tændstikker i hver af enderne og ikke imellem de to.

Aktiv 1

  1. Lav et klasse diagram for en tændstikke. Tændstikken skal have et X/Y koordinat for hver ende og en retning (dvs. om den er vandret eller lodret). Derudoveer skal den have en metode for at vise en tændstik.
  2. Lav et flow diagram der illustrere hvordan du vil lave en simulation af tændstikkemønsteret.
  3. Hvis du har mere tid lav simuleringen af tændstikkemønstret. Find ud af hvor mange tændstikker der skal til at lave 14 iterationer af mønstret. Eller skriv pseudokoden til programmet.