登录
首页 >  Golang >  Go问答

迭代多个文件计算唯一单词频率的方法

来源:stackoverflow

时间:2024-03-20 15:03:24 304浏览 收藏

本代码旨在统计文本文件中唯一单词的出现频率。它使用 bufio.Scanner 将文本拆分为单词,并将其添加到一个映射中,其中键是单词,值是出现次数。此代码可用于处理单个文件。为了同时处理多个文件,可以使用 errgroup.Group 来并发地执行此任务,确保对映射的并发写入得到适当处理。

问题内容

这是我的代码,用于计算文件中所有唯一单词的出现次数:

package main

import (
    "bufio"
    "fmt"
    "log"
    "os"
)

func main(){
    file, err := os.Open("file1.txt")
    if err != nil {
        log.Fatal(err)
    }
    words := make(map[string]int)
    /*asking scanner to split into words*/
    scanner := bufio.NewScanner(file)
    scanner.Split(bufio.ScanWords)
    count := 0
    //scan the inpurt
    for scanner.Scan() {
        //get input token - in our case a word and update it's frequence
        words[scanner.Text()]++
        count++
    }
    if err := scanner.Err(); err != nil {
        fmt.Fprintln(os.Stderr, "reading input:", err)
    }
    for k, v := range words {
        fmt.Printf("%s:%d\n", k, v)
    }
}

我必须同时在 n 个文件上迭代此映射,才能计算所有唯一单词的出现次数。


解决方案


您可以使用 errgroup.Group 使其并发。

请记住,如果您使所有 goroutine 都可以访问映射,请正确处理对映射的并发写入。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>