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

第二次作业

github链接 https://github.com/yasinalong/3123004077

首部

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience
这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/homework/13477
这个作业的目标 熟悉一套软件开发的流程

psp

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 30
· Estimate · 估计这个任务需要多少时间 240 300
Development 开发 190 250
· Analysis · 需求分析(包括学习新技术) 60 100
· Design Spec · 生成设计文档 20 15
· Design Review · 设计复审 10 15
· Coding Standard · 代码规范(为目前的开发制定合适的规范) 10 10
· Design · 具体设计 15 20
· Coding · 具体编码 45 50
· Code Review · 代码复审 15 20
· Test · 测试(自我测试,修改代码,提交修改) 15 20
Reporting 报告 50 55
· Test Report · 测试报告 20 30
· Size Measurement · 计算工作量 15 15
· Postmortem & Process Improvement Plan · 事后总结,并提出过程改进计划 15 10
合计 240 305

开发步骤

1.git clone下GitHub上面的cppjieba项目,然后进行测试

7a70f33072b972edbc9eeb3d6e2102f6

问题1.jieba的初始化非常慢,在vs的debug环境下需要大概6s的时间,这个速度实在是太慢了

解决办法:调整为release的环境下即可是快速加载大概需要500ms,提升了整整10倍的效率
image

2.加载两个文件在到内存中,然后进行分词,已经进行简单的文本初始化

image

性能消耗:分词完成平均消耗1s

3.构建词汇表,文本向量化,计算余弦相似度

image

函数解析图及其作用

image

1.std::string readFile(const std::string& filePath)

读取文件内容到内存中去

2.std::unordered_map<std::string, int> preprocessText(cppjieba::Jieba& jieba, const std::string& text)

文本处理,分词,去掉重复的词,统计词的频率

3.std::vectorstd::string buildVocabulary(const std::unordered_map<std::string, int>& freq1,const std::unordered_map<std::string, int>& freq2)

构建词汇表

4.std::vector convertToVector(const std::unordered_map<std::string, int>& wordFreq,const std::vectorstd::string& vocabulary)

将词频转化为向量

5.double cosineSimilarity(const std::vector& vec1, const std::vector& vec2)

计算余弦相似度

6.void writeFile(const std::string& ansPath, double cosineSim)

把结果写回文件

7.void displayResults(double cosineSim, const std::string& file1, const std::string& file2)

显示结果在屏幕上

性能分析

1.性能占用

image

2.函数分析

image
性能瓶颈主要是jieba的初始化词库需要加载很长的时间

算法测试

void runtext(std::string& text1, std::string& text2)
{//用于测试text1 = "自然语言处理是人工智能领域中的一个重要方向,它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。";//text2 = "量子计算是一种遵循量子力学规律调控量子信息单元进行计算的新型计算模式,它与传统计算机原理完全不同。";//text2 = "自然语言处理是人工智能领域中的一个关键方向,它研究能实现人与计算机之间用自然语言进行有效交流的各种理论和方法。";//text2 = "自然语言处理是AI领域中的一个重要方向,它研究能实现人类与电脑之间用自然语言进行有效通信的各种理论和方法。";text2 = "人工智能领域中的一个重要方向是自然语言处理,它研究各种理论和方法,能实现人与计算机之间用自然语言进行有效通信。";
}
测试函数结果 分别是 0.26 0.91 0.91 0.97
http://www.hskmm.com/?act=detail&tid=13610

相关文章:

  • 训练集,验证集,测试集
  • Android 项目:画图白板APP开发(六)——分页展示 - 教程
  • ESP32 读取旋转编码器
  • mysql/oracle LEFT JOIN 取时间最大的数据
  • 6月6日证书 - 工信部人才交流中心PostgreSQL中级PGCP高级PGCM认证
  • 基于遗传算法与非线性规划的混合优化算法在电力系统最优潮流中的实现
  • 【下一款产品】
  • 数1的个数
  • 通过ML.Net调用Yolov5的Onnx模型
  • Java-如何在Eclipse开发-数组
  • 常用数据生成器
  • 基于RSSI修正的定位算法分析
  • c# 反射动态添加Attribute
  • MyBatis-Plus 全方位深度指南:从入门到精通
  • 鸿蒙项目实战(十):web和js交互
  • 【9.24 直播】集群数据管理实战:时序数据库 IoTDB 数据分区、同步与备份详解
  • 函数计算进化之路:AI 应用运行时的状态剖析
  • 01_进程与线程
  • 第六届医学人工智能国际学术会议(ISAIMS 2025)
  • redis 6.0 多线程
  • docker 常用命令与端口映射
  • linux重启mysql服务,几种常见的方法
  • opencv学习记录3
  • 统计分析神器 NCSS 2025 功能亮点+图文安装教程
  • mysql常用语句,常用的语句整理
  • 当写脚本循环更新几百万数据发现很慢怎么办 - 孙龙
  • 服装采购跟单系统的高效管理实践 - 详解
  • 和汽车相关的国内期刊
  • 服务器CPU、内存、磁盘、网络使用率,东方通CPU使用率东方通内存使用率监控脚本
  • 3 网络基础知识+web基础知识+部署Server