使用Go語言實現(xiàn)一個簡單的詞頻分析系統(tǒng)
在數(shù)據(jù)分析和文本挖掘中,詞頻統(tǒng)計(Word Frequency Analysis) 是最基礎也是最常用的技術之一。無論是做搜索引擎、輿情分析,還是文章關鍵詞提取,詞頻分析都扮演著重要角色。本文將帶你用 Go 語言實現(xiàn)一個簡易的 詞頻分析系統(tǒng),支持讀取文件并統(tǒng)計詞頻,最終輸出結果。
一、項目目標
從文本文件中讀取內容。
對文本進行分詞(簡單處理空格、標點)。
統(tǒng)計每個單詞的出現(xiàn)次數(shù)。
輸出詞頻最高的前 N 個詞。
二、核心技術點
文件讀取:使用 os 和 bufio 處理文件輸入。
字符串處理:用 strings 包清洗數(shù)據(jù)。
map 統(tǒng)計:用哈希表存儲詞頻。
排序:對統(tǒng)計結果排序,輸出高頻詞。
三、代碼實現(xiàn)
package main
import (
"bufio"
"fmt"
"os"
"regexp"
"sort"
"strings"
)
// 詞頻結果結構體
type WordCount struct {
Word string
Count int
}
// 統(tǒng)計詞頻函數(shù)
func countWordFrequency(text string) map[string]int {
// 正則去掉標點符號,只保留字母和空格
reg := regexp.MustCompile(`[^a-zA-Z\s]+`)
cleanText := reg.ReplaceAllString(text, "")
// 全部轉小寫,避免大小寫重復
cleanText = strings.ToLower(cleanText)
// 按空格分割單詞
words := strings.Fields(cleanText)
// 使用 map 統(tǒng)計詞頻
wordFreq := make(map[string]int)
for _, word := range words {
wordFreq[word]++
}
return wordFreq
}
func main() {
// 打開文件
file, err := os.Open("sample.txt")
if err != nil {
fmt.Println("打開文件失?。?, err)
return
}
defer file.Close()
// 逐行讀取文件
var content strings.Builder
scanner := bufio.NewScanner(file)
for scanner.Scan() {
content.WriteString(scanner.Text())
content.WriteString(" ")
}
// 統(tǒng)計詞頻
wordFreq := countWordFrequency(content.String())
// 轉換為切片,方便排序
var wcList []WordCount
for word, count := range wordFreq {
wcList = append(wcList, WordCount{word, count})
}
// 按詞頻排序(降序)
sort.Slice(wcList, func(i, j int) bool {
return wcList[i].Count > wcList[j].Count
})
// 輸出前10個高頻詞
fmt.Println("詞頻最高的前10個單詞:")
for i, wc := range wcList {
if i >= 10 {
break
}
fmt.Printf("%s: %d\n", wc.Word, wc.Count)
}
}
四、運行效果
假設 sample.txt 內容如下:
Go is an open source programming language. Go makes it easy to build simple, reliable, and efficient software.
運行結果:
詞頻最高的前10個單詞:
go: 2
is: 1
an: 1
open: 1
source: 1
programming: 1
language: 1
makes: 1
it: 1
easy: 1
五、功能擴展
支持中文分詞:結合 gojieba 庫進行中文文本的分詞統(tǒng)計。
命令行工具:支持用戶通過命令行輸入文件路徑和輸出前 N 個結果。
Web API 接口:將詞頻統(tǒng)計結果以 JSON 格式返回,便于前端展示。
可視化:將結果導出到 CSV,再用 ECharts 或 Excel 繪制詞云圖。
六、總結
本文實現(xiàn)了一個基礎的 詞頻分析系統(tǒng),涵蓋了文件讀取、字符串清洗、詞頻統(tǒng)計和排序等常見技能點。在實戰(zhàn)項目中,你可以進一步擴展為 Web 服務、支持多語言、甚至接入大數(shù)據(jù)處理框架。
到此這篇關于使用Go語言實現(xiàn)一個簡單的詞頻分析系統(tǒng)的文章就介紹到這了,更多相關Go詞頻分析內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
數(shù)據(jù)競爭和內存重分配Golang slice并發(fā)不安全問題解決
這篇文章主要為大家介紹了數(shù)據(jù)競爭和內存重分配Golang slice并發(fā)不安全問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-10-10
Go語言并發(fā)定時任務之從Sleep到Context的8種寫法全解析
這篇文章主要為大家詳細介紹了Go語言并發(fā)定時任務之從Sleep到Context的8種寫法的相關知識,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下2025-08-08

