Menu
CoddyTech

Ringkasan: Penghitung Frekuensi Kata

Termasuk bagian Logika & Alur dalam perjalanan GO di Coddy. Pelajaran 30 dari 68.

challenge icon

Tantangan

Mudah

Bangun alat analisis teks yang menghitung frekuensi kata dalam dokumen. Tantangan ini menunjukkan keunggulan map dalam mengagregasi data dengan melacak berapa kali setiap kata unik muncul dalam teks.

Kamu akan menerima dua input:

  • String yang mewakili teks untuk dianalisis (misalnya, "the quick brown fox jumps over the lazy dog the fox is quick")
  • String yang mewakili ambang batas frekuensi minimum (misalnya, "2")

Penting: Teks input mungkin berisi spasi, jadi kamu harus membaca seluruh baris menggunakan bufio.NewReader dengan ReadString('\n') atau bufio.Scanner: jangan gunakan fmt.Scanln untuk input teks, karena proses itu berhenti membaca saat menemukan spasi pertama.

Tugasmu adalah:

  1. Buat fungsi bernama countWords yang menerima string teks dan mengembalikan map[string]int dengan:
    • Key berupa kata individual (string)
    • Nilai berupa jumlah frekuensi setiap kata (bilangan bulat)
  2. Urai teks input dengan membaginya menjadi kata-kata individual menggunakan strings.Fields (yang membagi teks pada spasi kosong apa pun)
  3. Hitung frekuensi setiap kata dalam teks:
    • Ubah semua kata menjadi huruf kecil agar penghitungan konsisten
    • Untuk setiap kata, tambahkan hitungannya di map
    • Jika kata belum ada di map, nilainya akan dimulai dari 0 lalu ditambah menjadi 1
  4. Filter hasilnya untuk menampilkan hanya kata yang muncul setidaknya sebanyak ambang batas
  5. Tampilkan hasil dalam format berikut:
    • Header: "Word Frequency Analysis:"
    • Untuk setiap kata yang memenuhi syarat: "[word]: [count]"
    • Tampilkan kata dalam urutan alfabet
  6. Hitung dan tampilkan statistik ringkasan:
    • "Total unique words: [total_unique_count]"
    • "Words above threshold: [filtered_count]"
    • "Most frequent word: [word] ([count] times)"
    • Jika beberapa kata memiliki hitungan tertinggi yang sama, laporkan kata yang lebih dahulu muncul dalam urutan alfabet. Jika setiap kata muncul sekali, kata itu adalah kata pertama dalam daftar yang sudah diurutkan.

Misalnya, jika teks inputnya "hello hello world" dan ambang batasnya "2", outputnya seharusnya:

Word Frequency Analysis:
hello: 2
Total unique words: 2
Words above threshold: 1
Most frequent word: hello (2 times)

Gunakan package bufio untuk membaca seluruh baris input, package strings untuk membagi teks dan mengubahnya menjadi huruf kecil, package strconv untuk mengubah string ambang batas menjadi bilangan bulat, dan package sort untuk mengurutkan kata berdasarkan alfabet. Tantangan ini menunjukkan bagaimana map memberikan solusi yang elegan untuk menghitung dan mengagregasi data, dengan perilaku nilai nol pada map yang membuat logika penghitungan menjadi sederhana dan efisien.

Coba sendiri

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

func main() {
	scanner := bufio.NewScanner(os.Stdin)

	// Baca seluruh baris teks (termasuk spasi)
	scanner.Scan()
	text := scanner.Text()

	// Baca nilai threshold
	scanner.Scan()
	thresholdStr := scanner.Text()

	// Ubah threshold menjadi bilangan bulat
	threshold, _ := strconv.Atoi(thresholdStr)

	// TODO: Tulis kodemu di bawah ini
	// 1. Buat fungsi countWords yang mengembalikan map[string]int
	//    Petunjuk: gunakan strings.Fields dan strings.ToLower untuk memisahkan dan menyeragamkan kata
	// 2. Gunakan fungsi tersebut untuk menghitung frekuensi kata
	// 3. Saring kata yang muncul setidaknya 'threshold' kali
	// 4. Urutkan kata yang telah disaring berdasarkan abjad dan tampilkan
	// 5. Hitung dan tampilkan statistik ringkasan

	_ = text
	_ = threshold
	fmt.Println("Word Frequency Analysis:")
}

Semua pelajaran di Logika & Alur

Latihan sendiri: Compiler Go online