使用Go语言统计文件中每个字母出现频率的方法

Written by

in

文章目录
  • 读取一个本地文本文件,统计并打印出其中每个英文字母(忽略大小写)出现的次数和频率。
  • • 文本分析、自然语言处理前的预处理 • 编写字频统计工具 • 简化数据分析或可视化处理的前置步骤
  • • 使用 os.Open() 读取文件 • bufio.Scanner 按行读取 • 字符串遍历与判断 • 使用 map[rune]int 统计频率 • 转换大小写 unicode.ToLower
  • package main import ( “bufio” “fmt” “os” “unicode” ) func main() { filePath := “sample.txt” // 打开文件 file, err := os.Open(filePath) if err != nil { fmt.Println(“无法打开文件:”, err) return } defer file.Close() // 用于存储每个字母出现的次数 frequency := make(map[rune]int) totalLetters := 0 scanner := bufio.NewScanner(file) for scanner.Scan() { line := scanner.Text() for _, ch := range line { if unicode.IsLetter(ch) { ch = unicode.ToLower(ch) frequency[ch]++ totalLetters++ } } } // 打印结果 fmt.Println(“字母频率统计:”) for ch := ‘a’; ch <= ‘z’; ch++ { count := frequency[ch] if count > 0 { percentage := float64(count) / float64(totalLetters) * 100 fmt.Printf(“%c: %d (%.2f%%)n”, ch, count, percentage) } } }
  • Go is expressive, concise, clean, and efficient. Its concurrency mechanisms make it easy to write programs.
  • 字母频率统计: a: 5 (4.85%) c: 7 (6.80%) d: 2 (1.94%) e: 10 (9.71%) f: 2 (1.94%) g: 1 (0.97%) … t: 8 (7.77%) w: 1 (0.97%)
  • 函数 说明 os.Open() 打开文件 bufio.NewScanner() 按行扫描文本 unicode.IsLetter() 判断字符是否为英文字母 unicode.ToLower() 转换为小写字母以便统计统一 map[rune]int 使用字符为键的字典进行计数
  • 这个案例帮助你掌握了如何在 Go 中进行文本分析,特别是字母频率统计。这是数据清洗和自然语言处理中的常见需求。 以上就是使用Go语言统计文件中每个字母出现频率的方法的详细内容,更多关于Go统计字母出现频率的资料请关注风君子博客其它相关文章! 您可能感兴趣的文章: Go语言实现统计字符串中每个字符出现的次数 go goroutine实现素数统计的示例 Golang 统计字符串中数字字母数量的实现方法 关于golang利用channel和goroutine完成统计素数的思路
  • 目录
    • 案例目标
    • 应用场景
    • 涉及知识点
    • 示例代码:统计字母频率
    • 示例文本内容(sample.txt)
    • 执行结果示例
    • 技术说明
    • 小结

    读取一个本地文本文件,统计并打印出其中每个英文字母(忽略大小写)出现的次数和频率。

    • • 文本分析、自然语言处理前的预处理
    • • 编写字频统计工具
    • • 简化数据分析或可视化处理的前置步骤

    • • 使用 os.Open() 读取文件
    • • bufio.Scanner 按行读取
    • • 字符串遍历与判断
    • • 使用 map[rune]int 统计频率
    • • 转换大小写 unicode.ToLower

    package main
    
    import (
        "bufio"
        "fmt"
        "os"
        "unicode"
    )
    
    func main() {
        filePath := "sample.txt"
    
        // 打开文件
        file, err := os.Open(filePath)
        if err != nil {
            fmt.Println("无法打开文件:", err)
            return
        }
        defer file.Close()
    
        // 用于存储每个字母出现的次数
        frequency := make(map[rune]int)
        totalLetters := 0
    
        scanner := bufio.NewScanner(file)
        for scanner.Scan() {
            line := scanner.Text()
            for _, ch := range line {
                if unicode.IsLetter(ch) {
                    ch = unicode.ToLower(ch)
                    frequency[ch]++
                    totalLetters++
                }
            }
        }
    
        // 打印结果
        fmt.Println("字母频率统计:")
        for ch := 'a'; ch <= 'z'; ch++ {
            count := frequency[ch]
            if count > 0 {
                percentage := float64(count) / float64(totalLetters) * 100
                fmt.Printf("%c: %d (%.2f%%)n", ch, count, percentage)
            }
        }
    }
    

    Go is expressive, concise, clean, and efficient.
    Its concurrency mechanisms make it easy to write programs.
    

    字母频率统计:
    a: 5 (4.85%)
    c: 7 (6.80%)
    d: 2 (1.94%)
    e: 10 (9.71%)
    f: 2 (1.94%)
    g: 1 (0.97%)
    ...
    t: 8 (7.77%)
    w: 1 (0.97%)
    

    函数 说明
    os.Open() 打开文件
    bufio.NewScanner() 按行扫描文本
    unicode.IsLetter() 判断字符是否为英文字母
    unicode.ToLower() 转换为小写字母以便统计统一
    map[rune]int 使用字符为键的字典进行计数

    这个案例帮助你掌握了如何在 Go 中进行文本分析,特别是字母频率统计。这是数据清洗和自然语言处理中的常见需求。

    以上就是使用Go语言统计文件中每个字母出现频率的方法的详细内容,更多关于Go统计字母出现频率的资料请关注风君子博客其它相关文章!

    您可能感兴趣的文章:

    • Go语言实现统计字符串中每个字符出现的次数
    • go goroutine实现素数统计的示例
    • Golang 统计字符串中数字字母数量的实现方法
    • 关于golang利用channel和goroutine完成统计素数的思路

    站内搜索