Ö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 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:
- Bir metin dizesi alan ve
countWordsdöndürenmap[string]intadlı bir işlev oluşturun:- Anahtarlar tek tek kelimelerdir (dizeler)
- Değerler her kelimenin sıklık sayısıdır (tam sayılar)
strings.Fieldskullanarak (her türlü boşluk karakterine göre böler) girdi metnini tek tek kelimelere ayırarak ayrıştırın- 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
- Sonuçları, yalnızca eşik değeri kadar veya daha fazla görünen kelimeleri gösterecek şekilde filtreleyin
- 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
- Başlık:
- Ö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
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ışlarKendi başına pratik yap: Online Go derleyicisi