44 lines
956 B
Go
44 lines
956 B
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"log"
|
|
"regexp"
|
|
"sort"
|
|
"strings"
|
|
)
|
|
|
|
type keyval struct {
|
|
key string
|
|
val int
|
|
}
|
|
|
|
func main() {
|
|
reg := regexp.MustCompile(`\p{Ll}+`)
|
|
bs, err := ioutil.ReadFile("135-0.txt")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
text := strings.ToLower(string(bs))
|
|
matches := reg.FindAllString(text, -1)
|
|
groups := make(map[string]int)
|
|
for _, match := range matches {
|
|
groups[match]++
|
|
}
|
|
var keyvals []keyval
|
|
for k, v := range groups {
|
|
keyvals = append(keyvals, keyval{k, v})
|
|
}
|
|
sort.Slice(keyvals, func(i, j int) bool {
|
|
return keyvals[i].val > keyvals[j].val
|
|
})
|
|
fmt.Println("Rank Word Frequency")
|
|
fmt.Println("==== ==== =========")
|
|
for rank := 1; rank <= 10; rank++ {
|
|
word := keyvals[rank-1].key
|
|
freq := keyvals[rank-1].val
|
|
fmt.Printf("%2d %-4s %5d\n", rank, word, freq)
|
|
}
|
|
}
|