第二次作业

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
posted @ 2025-09-22 18:08  lo0ng  阅读(22)  评论(0)    收藏  举报