Özet - Kelime Frekansı Sayacı
Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 30 / 68.
Görev
KolayBir belgedeki kelime frekanslarını sayan bir metin analizi aracı oluşturun. Bu meydan okuma, her bir benzersiz kelimenin bir metin parçasında kaç kez geçtiğini takip ederek, map yapılarının verileri toplama konusunda ne kadar başarılı olduğunu göstermektedir.
İki girdi alacaksınız:
- Analiz edilecek metni temsil eden bir dize (örneğin,
"the quick brown fox jumps over the lazy dog the fox is quick") - Minimum frekans eşiğini temsil eden bir dize (örneğin,
"2")
Önemli: Girdi metni boşluklar içerebilir, bu nedenle tam satırı ReadString('\n') ile bufio.NewReader kullanarak veya bir bufio.Scanner ile okumalısınız — metin girişi için fmt.Scanln kullanmayın, çünkü ilk boşlukta okumayı durdurur.
Göreviniz şunları yapmaktır:
- Bir metin dizesi alan ve aşağıdakileri içeren bir
map[string]intdöndürencountWordsadında bir fonksiyon oluşturun:- Anahtarlar (Keys) tekil kelimelerdir (dizeler)
- Değerler (Values) her kelimenin frekans sayısıdır (tam sayılar)
- Girdi metnini
strings.Fields(herhangi bir boşluk karakterine göre böler) kullanarak tekil kelimelere ayırarak ayrıştırın - Metindeki her kelimenin frekansını sayın:
- Tutarlı sayım için tüm kelimeleri küçük harfe dönüştürün
- Her kelime için map'teki sayısını artırın
- Bir kelime henüz map'te yoksa, 0'dan başlar ve 1'e artırılır
- Sonuçları, yalnızca en az eşik değeri kadar görünen kelimeleri gösterecek şekilde filtreleyin
- Sonuçları aşağıdaki formatta görüntüleyin:
- Başlık:
"Word Frequency Analysis:" - Her uygun kelime için:
"[word]: [count]" - Kelimeleri alfabetik sırayla görüntüleyin
- Başlık:
- Özet istatistikleri hesaplayın ve görüntüleyin:
"Total unique words: [total_unique_count]""Words above threshold: [filtered_count]""Most frequent word: [word] ([count] times)"
Örneğin, "hello hello world" girdi metni ve "2" eşiği verildiğinde, çıktı şöyle olmalıdır:
Word Frequency Analysis: hello: 2 Total unique words: 2 Words above threshold: 1 Most frequent word: hello (2 times)
Girdi satırlarının tamamını okumak için bufio paketini, metni bölmek ve küçük harfe dönüştürmek için strings paketini, eşik dizesini bir tam sayıya dönüştürmek için strconv paketini ve kelimeleri alfabetik olarak sıralamak için sort paketini kullanın. Bu meydan okuma, map'lerin verileri saymak ve toplamak için nasıl zarif bir çözüm sunduğunu ve map'lerin sıfır-değer (zero-value) davranışının sayma mantığını nasıl basit ve verimli hale getirdiğini göstermektedir.
Kendin dene
package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
// Metin satırının tamamını oku (boşluklar dahil)
scanner.Scan()
text := scanner.Text()
// Eşik değerini oku
scanner.Scan()
thresholdStr := scanner.Text()
// Eşik değerini tam sayıya dönüştür
threshold, _ := strconv.Atoi(thresholdStr)
// TODO: Kodunuzu aşağıya yazın
// 1. map[string]int döndüren countWords fonksiyonunu oluşturun
// İpucu: kelimeleri ayırmak ve normalize etmek için strings.Fields ve strings.ToLower kullanın
// 2. Kelime frekanslarını saymak için fonksiyonu kullanın
// 3. En az 'threshold' (eşik) kez geçen kelimeleri filtreleyin
// 4. Filtrelenen kelimeleri alfabetik olarak sıralayın ve görüntüleyin
// 5. Özet istatistikleri hesaplayın ve görüntüleyin
_ = text
_ = threshold
fmt.Println("Word Frequency Analysis:")
}Mantık ve Akış bölümündeki tüm dersler
1İleri Seviye Kontrol Akışı
`fallthrough` ile Switchİç İçe Döngülerden ÇıkmaBelirli Bir Döngüye Devam Etme`goto` İfadesiÖzet - İleri Seviye Döngü Kontrolü4Proje: Basit Görev Listesi
Proje KurulumuGörev Ekleme2Structlar ve Metotlar
Structlarda Metot TanımlamaValue Receiver'larPointer Receiver'larReceiver SeçimiMetotlar ve FonksiyonlarÖzet - Struct Davranışı5Derinlemesine Map'ler
Struct Map'leriMap Değeri Olarak Pointer'larNil Map KontrolüMap'leri KarşılaştırmaÖzet - Kelime Frekansı Sayacı3Arayüzler (Temeller)
Arayüz Nedir?Bir Arayüz TanımlamaBir Arayüzü UygulamaArayüz Tiplerini KullanmaBoş ArayüzTip OnaylamalarıTip SeçimiÖzet - Şekiller ve Davranışlar