main.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package main
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "path/filepath"
  6. "sort"
  7. "strings"
  8. )
  9. type Pair struct {
  10. key string
  11. value int
  12. }
  13. type PairSlice []Pair
  14. func (s PairSlice) Len() int {
  15. return len(s)
  16. }
  17. func (s PairSlice) Swap(i, j int) {
  18. s[i], s[j] = s[j], s[i]
  19. }
  20. func (s PairSlice) Less(i, j int) bool {
  21. if s[i].value == s[j].value {
  22. return s[i].key < s[j].key
  23. } else {
  24. return s[i].value > s[j].value
  25. }
  26. }
  27. func main() {
  28. const path = "../testdata"
  29. dataDir, err := ioutil.ReadDir(path)
  30. if err != nil {
  31. fmt.Println("Directory not found!")
  32. return
  33. }
  34. dict := make(map[string]int)
  35. for _, file := range dataDir {
  36. data, _ := ioutil.ReadFile(filepath.Join(path, file.Name()))
  37. word := ""
  38. for i := range data {
  39. if data[i] >= 'A' && data[i] <= 'Z' {
  40. data[i] += 'a' - 'A'
  41. }
  42. if data[i] >= 'a' && data[i] <= 'z' || word != "" && data[i] == '\'' {
  43. word = strings.Join([]string{word, string(data[i])}, "")
  44. } else if word != "" {
  45. dict[word]++
  46. word = ""
  47. }
  48. }
  49. if word != "" {
  50. dict[word]++
  51. }
  52. }
  53. answer := make(PairSlice, 0)
  54. for word, cnt := range dict {
  55. answer = append(answer, Pair{word, cnt})
  56. }
  57. sort.Sort(answer)
  58. for _, pair := range answer {
  59. fmt.Println(pair.key, pair.value)
  60. }
  61. }