使用Go語言統(tǒng)計(jì)文件中每個字母出現(xiàn)頻率的方法
案例目標(biāo)
讀取一個本地文本文件,統(tǒng)計(jì)并打印出其中每個英文字母(忽略大小寫)出現(xiàn)的次數(shù)和頻率。
應(yīng)用場景
- • 文本分析、自然語言處理前的預(yù)處理
- • 編寫字頻統(tǒng)計(jì)工具
- • 簡化數(shù)據(jù)分析或可視化處理的前置步驟
涉及知識點(diǎn)
- • 使用
os.Open()讀取文件 - •
bufio.Scanner按行讀取 - • 字符串遍歷與判斷
- • 使用
map[rune]int統(tǒng)計(jì)頻率 - • 轉(zhuǎn)換大小寫
unicode.ToLower
示例代碼:統(tǒng)計(jì)字母頻率
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()
// 用于存儲每個字母出現(xiàn)的次數(shù)
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++
}
}
}
// 打印結(jié)果
fmt.Println("字母頻率統(tǒng)計(jì):")
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)
}
}
}
示例文本內(nèi)容(sample.txt)
Go is expressive, concise, clean, and efficient. Its concurrency mechanisms make it easy to write programs.
執(zhí)行結(jié)果示例
字母頻率統(tǒng)計(jì): 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%)
技術(shù)說明
| 函數(shù) | 說明 |
|---|---|
| os.Open() | 打開文件 |
| bufio.NewScanner() | 按行掃描文本 |
| unicode.IsLetter() | 判斷字符是否為英文字母 |
| unicode.ToLower() | 轉(zhuǎn)換為小寫字母以便統(tǒng)計(jì)統(tǒng)一 |
| map[rune]int | 使用字符為鍵的字典進(jìn)行計(jì)數(shù) |
小結(jié)
這個案例幫助你掌握了如何在 Go 中進(jìn)行文本分析,特別是字母頻率統(tǒng)計(jì)。這是數(shù)據(jù)清洗和自然語言處理中的常見需求。
以上就是使用Go語言統(tǒng)計(jì)文件中每個字母出現(xiàn)頻率的方法的詳細(xì)內(nèi)容,更多關(guān)于Go統(tǒng)計(jì)字母出現(xiàn)頻率的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
golang中的select關(guān)鍵字用法總結(jié)
這篇文章主要介紹了golang中的select關(guān)鍵字用法總結(jié),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06
GoLang的sync.WaitGroup與sync.Once簡單使用講解
sync.WaitGroup類型,它比通道更加適合實(shí)現(xiàn)這種一對多的goroutine協(xié)作流程。WaitGroup是開箱即用的,也是并發(fā)安全的。同時(shí),與之前提到的同步工具一樣,它一旦被真正的使用就不能被復(fù)制了2023-01-01
Go基本數(shù)據(jù)類型與string類型互轉(zhuǎn)
本文主要介紹了Go基本數(shù)據(jù)類型與string類型互轉(zhuǎn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
Golang編程并發(fā)工具庫MapReduce使用實(shí)踐
這篇文章主要為大家介紹了Golang并發(fā)工具庫MapReduce的使用實(shí)踐,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04
Go|使用Options模式和建造者模式創(chuàng)建對象實(shí)戰(zhàn)
這篇文章主要介紹了Go使用Options模式和建造者模式創(chuàng)建對象實(shí)戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04

