使用Go语言统计文件中每个字母出现频率的方法
目录
- 案例目标
- 应用场景
- 涉及知识点
- 示例代码:统计字母频率
- 示例文本内容(sample.txt)
- 执行结果示例
- 技术说明
- 小结
案例目标
读取一个本地文本文件,统计并打印出其中每个英文字母(忽略大小写)出现的次数和频率。
应用场景
- • 文本分析、自然语言处理前的预处理
- &bjsull; 编写字频统计工具
- • 简化数据分析或可视化处理sPsagD的前置步骤
涉及知识点
- • 使用
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) } } }
示例文本内容(sample.txt)
Go is expressive, concise, clean, ahttp://www.devze.comnd 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.http://www.devze.com77%) w: 1 (0.97%)
技术说明
函数 | 说明 |
---|---|
os.Open() | 打开文件 |
bufio.NewScanner() | 按行扫描文本 |
unicode.IsLetter() | 判断字符是否为英文字母 |
unicode.ToLower() | 转换为小写字母以便统计统一 |
map[rune]int | 使用字符为键的字典进行计数 |
小结
这个案例帮助你掌握了如何在 Go 中进行文本分析,特别是字母频率统计。这是数据清洗和自然语言处理中的常见需求。
以上就是使用Go语言统计文件中每个字母出现频率的方法的详细内容,更多关于Go统计字母出现频率的资料请关注编程客栈(www.devze.com)其它相关文章!
精彩评论