Golang

关注公众号 jb51net

关闭
首页 > 脚本专栏 > Golang > Go词频分析

使用Go语言实现一个简单的词频分析系统

作者:程序员爱钓鱼

在数据分析和文本挖掘中,词频统计(Word Frequency Analysis) 是最基础也是最常用的技术之一,本文将带你用 Go 语言实现一个简易的 词频分析系统,感兴趣的小伙伴可以了解下

在数据分析和文本挖掘中,词频统计(Word Frequency Analysis) 是最基础也是最常用的技术之一。无论是做搜索引擎、舆情分析,还是文章关键词提取,词频分析都扮演着重要角色。本文将带你用 Go 语言实现一个简易的 词频分析系统,支持读取文件并统计词频,最终输出结果。

一、项目目标

从文本文件中读取内容。

对文本进行分词(简单处理空格、标点)。

统计每个单词的出现次数。

输出词频最高的前 N 个词。

二、核心技术点

文件读取:使用 osbufio 处理文件输入。

字符串处理:用 strings 包清洗数据。

map 统计:用哈希表存储词频。

排序:对统计结果排序,输出高频词。

三、代码实现

package main

import (
	"bufio"
	"fmt"
	"os"
	"regexp"
	"sort"
	"strings"
)

// 词频结果结构体
type WordCount struct {
	Word  string
	Count int
}

// 统计词频函数
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 统计词频
	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(" ")
	}

	// 统计词频
	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 库进行中文文本的分词统计。

命令行工具:支持用户通过命令行输入文件路径和输出前 N 个结果。

Web API 接口:将词频统计结果以 JSON 格式返回,便于前端展示。

可视化:将结果导出到 CSV,再用 ECharts 或 Excel 绘制词云图。

六、总结

本文实现了一个基础的 词频分析系统,涵盖了文件读取、字符串清洗、词频统计和排序等常见技能点。在实战项目中,你可以进一步扩展为 Web 服务、支持多语言、甚至接入大数据处理框架。

到此这篇关于使用Go语言实现一个简单的词频分析系统的文章就介绍到这了,更多相关Go词频分析内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文