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 sıklıklarını sayan bir metin analiz aracı oluşturun. Bu meydan okuma, her benzersiz kelimenin bir metin parçasında kaç kez göründüğünü izleyerek haritaların verileri toplamada ne kadar başarılı olduğunu gösterir.

İki girdi alacaksınız:

  • Analiz edilecek metni temsil eden bir dize (ör. "the quick brown fox jumps over the lazy dog the fox is quick")
  • Minimum sıklık eşiğini temsil eden bir dize (ör. "2")

Önemli: Girdi metni boşluklar içerebilir; bu nedenle tam satırı bufio.NewReader ile ReadString('\n') kullanarak veya bir bufio.Scanner ile okumalısınız: metin girdisi için fmt.Scanln kullanmayın, çünkü ilk boşlukta okumayı durdurur.

Göreviniz:

  1. Bir metin dizesi alan ve countWords döndüren map[string]int adlı bir işlev oluşturun:
    • Anahtarlar tek tek kelimelerdir (dizeler)
    • Değerler her kelimenin sıklık sayısıdır (tam sayılar)
  2. strings.Fields kullanarak (her türlü boşluk karakterine göre böler) girdi metnini tek tek kelimelere ayırarak ayrıştırın
  3. Metindeki her kelimenin sıklığını sayın:
    • Tutarlı sayım için tüm kelimeleri küçük harfe dönüştürün
    • Her kelime için haritadaki sayısını artırın
    • Bir kelime henüz haritada yoksa 0'dan başlayacak ve 1'e yükseltilecektir
  4. Sonuçları, yalnızca eşik değeri kadar veya daha fazla görünen kelimeleri gösterecek şekilde filtreleyin
  5. Sonuçları aşağıdaki biçimde görüntüleyin:
    • Başlık: "Word Frequency Analysis:"
    • Uygun olan her kelime için: "[word]: [count]"
    • Kelimeleri alfabetik sırada görüntüleyin
  6. Özet istatistiklerini hesaplayın ve görüntüleyin:
    • "Total unique words: [total_unique_count]"
    • "Words above threshold: [filtered_count]"
    • "Most frequent word: [word] ([count] times)"
    • Birden fazla kelime en yüksek sayıya sahipse alfabetik olarak ilk geleni bildirin. Her kelime bir kez görünüyorsa bu, sıralanmış listenin ilk kelimesidir.

Örneğin, girdi metni "hello hello world" ve eşik "2" olduğunda çı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, haritaların verileri saymak ve toplamak için nasıl zarif bir çözüm sunduğunu; haritaların sıfır değer davranışının sayma mantığını nasıl basit ve verimli hâle getirdiğini gösterir.

Kendin dene

package main

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

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

	// Metnin 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 tamsayı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ştur
	//    İpucu: kelimeleri ayırmak ve normalleştirmek için strings.Fields ve strings.ToLower kullanın
	// 2. Use the function to count word frequencies
	// 3. En az 'threshold' kez görünen kelimeleri filtrele
	// 4. Filtrelenmiş kelimeleri alfabetik olarak sırala ve görüntüle
	// 5. Özet istatistikleri hesapla ve görüntüle

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

Mantık ve Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online Go derleyicisi