Ringkasan: Penghitung Frekuensi Kata
Termasuk bagian Logika & Alur dalam perjalanan GO di Coddy. Pelajaran 30 dari 68.
Tantangan
MudahBangun 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:
- Buat fungsi bernama
countWordsyang menerima string teks dan mengembalikanmap[string]intdengan:- Key berupa kata individual (string)
- Nilai berupa jumlah frekuensi setiap kata (bilangan bulat)
- Urai teks input dengan membaginya menjadi kata-kata individual menggunakan
strings.Fields(yang membagi teks pada spasi kosong apa pun) - 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
- Filter hasilnya untuk menampilkan hanya kata yang muncul setidaknya sebanyak ambang batas
- Tampilkan hasil dalam format berikut:
- Header:
"Word Frequency Analysis:" - Untuk setiap kata yang memenuhi syarat:
"[word]: [count]" - Tampilkan kata dalam urutan alfabet
- Header:
- 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
1Alur Kontrol Lanjutan
switch dengan `fallthrough`Keluar dari Perulangan BersarangMelanjutkan Perulangan TertentuPernyataan `goto`Rangkuman, Kontrol Perulangan Lanjutan4Proyek: Daftar Tugas Sederhana
Menyiapkan ProyekMenambahkan Tugas2Struct dan Method
Mendefinisikan Method pada StructPenerima NilaiPenerima PointerMemilih PenerimaMethod vs FungsiRekap: Perilaku Struct5Map secara Mendalam
Map Berisi StructPointer sebagai Nilai MapMenguji Map NilMembandingkan MapRingkasan: Penghitung Frekuensi Kata8Proyek: Inventaris Sederhana
Gambaran Umum ProyekMemeriksa Stok3Interface (Dasar)
Apa Itu Interface?Mendefinisikan InterfaceMengimplementasikan InterfaceMenggunakan Tipe InterfaceInterface KosongType AssertionType SwitchRingkasan: Bentuk dan PerilakuLatihan sendiri: Compiler Go online