词频统计
难度:⭐ 基础
考点
- map 基本 CRUD 操作
- 字符串分割处理
- map 排序输出
题目描述
函数1:WordCount
统计文本中每个单词出现的次数。单词以空格分隔,需要转为小写后统计。
函数2:TopN
从词频 map 中找出出现次数最多的 N 个单词。 如果出现次数相同,按字母顺序排列。
函数3:UniqueWords
返回文本中只出现一次的单词列表(按字母顺序)。
函数签名
go
func WordCount(text string) map[string]int
func TopN(freq map[string]int, n int) []string
func UniqueWords(text string) []string提示
strings.Fields按空白字符分割strings.ToLower转小写- 排序可以用
sort.Slice
参考答案(Go)
点击展开参考答案
go
//go:build ignore
package answer
import (
"sort"
"strings"
)
func WordCount(text string) map[string]int {
result := make(map[string]int)
for _, word := range strings.Fields(text) {
result[strings.ToLower(word)]++
}
return result
}
func TopN(freq map[string]int, n int) []string {
if n <= 0 {
return []string{}
}
words := make([]string, 0, len(freq))
for w := range freq {
words = append(words, w)
}
sort.Slice(words, func(i, j int) bool {
if freq[words[i]] != freq[words[j]] {
return freq[words[i]] > freq[words[j]]
}
return words[i] < words[j]
})
if n > len(words) {
n = len(words)
}
return words[:n]
}
func UniqueWords(text string) []string {
freq := WordCount(text)
var result []string
for word, count := range freq {
if count == 1 {
result = append(result, word)
}
}
sort.Strings(result)
if result == nil {
return []string{}
}
return result
}