美文网首页Go lang学习陪你刷算法系列
Go语言编写从文件中统计词频并升序输出

Go语言编写从文件中统计词频并升序输出

作者: SHAN某人 | 来源:发表于2017-12-25 17:35 被阅读3次

    1.文件读取

    这里需要用到逐行读取文件内容并将其切片化

    func readFile(filePath string) []string { // 返回切片
        // 初始化一个切片
        list := []string{}
    
        f, err := os.Open(filePath)
        if err != nil {
            //panic(err)
            p("%s 文件不存在", filePath)
        }
        defer f.Close()
    
        rd := bufio.NewReader(f)
        for {
            line, err := rd.ReadString('\n') //以'\n'为结束符读入一行
    
            if err != nil || io.EOF == err {
                break
            }
            list = append(list, line)
            //fmt.Println("=====", line)
        }
        return list
    }
    

    2. 统计词频

    这里用 map 进行词频统计,然后怎么对map 根据 v值 升序输出呢。
    我这里采用的思路如下,自己瞎想的,可以完善。

      1. 将map 逆转 使得 map1<k,v> 变成 map2<v,k>
      1. 将v无重复切片化
      1. 遍历切片 打印 map2 就ok 了
    func wordCount(list []string) {
        s_map := make(map[string]int) //建立map
        //对s_arr中的每个字符进行循环
        for _, str := range list {
            if s_map[str] == 0 { //当还没有统计过该字符时,赋值为1
                s_map[str] = 1
            } else { //当统计过该字符时,更新计数值+1
                s_map[str] = s_map[str] + 1
            }
        }
        // 对map 按 值排序
    
        r_map := make(map[int][]string) // 逆转后的map
        // 新建一个切片
        values := []int{}
        // 逆转 <k,v> --&gt;  <v,k>
        for k, v := range s_map {
            r_map[v] = append(r_map[v], k)
        }
        // 将 value 切片化
        for k, _ := range r_map {
            values = append(values, k) // 这里key 不重复
        }
        sort.Ints(values) // 对切片进行排序,注意这里的排序是原地排序,并且是降序
    
        for i := range values {
            p("  ", values[i], r_map[values[i]])
           // 也可以按照如下输出
                        /*count := values[i]
            slice := r_map[values[i]]
    
            for i := 0; i < len(slice); i++ {
                p("  ", count, slice[i])
            }*/
        }
    }
    

    </v,k></k,v></v,k></k,v>


    运行结果

    相关文章

      网友评论

        本文标题:Go语言编写从文件中统计词频并升序输出

        本文链接:https://www.haomeiwen.com/subject/ywalgxtx.html