Menu
Coddy logo textTech

Özet - Kelime Frekansı Sayacı

Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 30 / 68.

challenge icon

Görev

Kolay

Bir 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:

  1. Bir metin dizesi alan ve aşağıdakileri içeren bir map[string]int döndüren countWords adında bir fonksiyon oluşturun:
    • Anahtarlar (Keys) tekil kelimelerdir (dizeler)
    • Değerler (Values) her kelimenin frekans sayısıdır (tam sayılar)
  2. Girdi metnini strings.Fields (herhangi bir boşluk karakterine göre böler) kullanarak tekil kelimelere ayırarak ayrıştırın
  3. 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
  4. Sonuçları, yalnızca en az eşik değeri kadar görünen kelimeleri gösterecek şekilde filtreleyin
  5. 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
  6. Ö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