使用Go語言統(tǒng)計(jì)文件中每個(gè)字母出現(xiàn)頻率的方法
案例目標(biāo)
讀取一個(gè)本地文本文件,統(tǒng)計(jì)并打印出其中每個(gè)英文字母(忽略大小寫)出現(xiàn)的次數(shù)和頻率。
應(yīng)用場景
- • 文本分析、自然語言處理前的預(yù)處理
- • 編寫字頻統(tǒng)計(jì)工具
- • 簡化數(shù)據(jù)分析或可視化處理的前置步驟
涉及知識(shí)點(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() // 用于存儲(chǔ)每個(gè)字母出現(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é)
這個(gè)案例幫助你掌握了如何在 Go 中進(jìn)行文本分析,特別是字母頻率統(tǒng)計(jì)。這是數(shù)據(jù)清洗和自然語言處理中的常見需求。
以上就是使用Go語言統(tǒng)計(jì)文件中每個(gè)字母出現(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-06GoLang的sync.WaitGroup與sync.Once簡單使用講解
sync.WaitGroup類型,它比通道更加適合實(shí)現(xiàn)這種一對多的goroutine協(xié)作流程。WaitGroup是開箱即用的,也是并發(fā)安全的。同時(shí),與之前提到的同步工具一樣,它一旦被真正的使用就不能被復(fù)制了2023-01-01Go基本數(shù)據(jù)類型與string類型互轉(zhuǎn)
本文主要介紹了Go基本數(shù)據(jù)類型與string類型互轉(zhuǎn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03Golang編程并發(fā)工具庫MapReduce使用實(shí)踐
這篇文章主要為大家介紹了Golang并發(fā)工具庫MapReduce的使用實(shí)踐,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04Go|使用Options模式和建造者模式創(chuàng)建對象實(shí)戰(zhàn)
這篇文章主要介紹了Go使用Options模式和建造者模式創(chuàng)建對象實(shí)戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04