当前位置: 首页 > news >正文

Go语言实战案例-项目实战篇:实现一个词频分析系统

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


一、项目目标

  1. 1. 从文本文件中读取内容。
  2. 2. 对文本进行分词(简单处理空格、标点)。
  3. 3. 统计每个单词的出现次数。
  4. 4. 输出词频最高的前 N 个词。

二、核心技术点

  • • 文件读取:使用 os 和 bufio 处理文件输入。
  • • 字符串处理:用 strings 包清洗数据。
  • • map 统计:用哈希表存储词频。
  • • 排序:对统计结果排序,输出高频词。

三、代码实现

package mainimport ("bufio""fmt""os""regexp""sort""strings"
)// 词频结果结构体
type WordCount struct {Word  stringCount 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.Builderscanner := bufio.NewScanner(file)for scanner.Scan() {content.WriteString(scanner.Text())content.WriteString(" ")}// 统计词频wordFreq := countWordFrequency(content.String())// 转换为切片,方便排序var wcList []WordCountfor 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

五、功能扩展

  1. 1. 支持中文分词:结合 gojieba 库进行中文文本的分词统计。
  2. 2. 命令行工具:支持用户通过命令行输入文件路径和输出前 N 个结果。
  3. 3. Web API 接口:将词频统计结果以 JSON 格式返回,便于前端展示。
  4. 4. 可视化:将结果导出到 CSV,再用 ECharts 或 Excel 绘制词云图。

六、总结

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


http://www.dtcms.com/a/394972.html

相关文章:

  • Grok 4 Fast vs GPT-5-mini:新一代高效AI模型开发者选型指南
  • LeetCode:47.从前序和中序遍历序列构造二叉树
  • MySQL安装避坑指南:从环境适配到故障修复的全场景实战手册
  • React教程(React入门教程)(React组件、JSX、React Props、React State、React事件处理、Hooks、高阶组件HOC)
  • 2025年CSP-S初赛真题及答案解析(完善程序第1题)
  • 六、页面优化
  • CVAT部署到虚拟机小记
  • scss基础学习
  • 基于衍射神经网络的光学高速粒子分类系统A1(未做完)
  • ffprobe安装与简单使用
  • close函数就像“关门“操作,用于关闭文件描述符释放系统资源
  • PyTorch 神经网络工具箱学习笔记
  • Qt常用控件之QWidget(三)
  • apache poi excel 单元格换行
  • 全能视频下载器-下载自媒体平台视频 v1.5.5 专业版
  • 状态模式指南:对象状态变化的优雅管理
  • 自动化多段视频删除:FFmpeg.AutoGen 与 C# 的完整实现​
  • C、C++、Java 和 Python:四大编程语言的对比分析
  • ESP iic驱动
  • Ai-Agent学习历程——大模型的概念
  • 5G NR-NTN协议学习系列:NR-NTN介绍(3)
  • 一场 MCP 生态的变革——详解 OpenTiny NEXT 逆向思维的技术创新
  • 【案例教程】从CNN到 Transformer:基于PyTorch的遥感影像、无人机影像的地物分类、目标检测、语义分割和点云分类
  • 私有证书不被edge浏览器认可的问题的解决-Debian13环境下
  • 团体程序设计天梯赛 L2-052 吉利矩阵 (DFS+剪枝)(Java实现)
  • 【LeetCode 每日一题】966. 元音拼写检查器
  • windows 服务器如何开启系统自带的ftp服务
  • 2025年面试经历
  • Linux 基础:目录结构
  • OpenLayers地图交互 -- 章节七:指针交互详解