第一次个人项目
这个作业属于 | 首页 - 计科22级12班 - 广东工业大学 - 班级博客 - 博客园 (cnblogs.com) |
---|---|
这个作业要求在哪 | 个人项目 - 作业 - 计科22级12班 - 班级博客 - 博客园 (cnblogs.com) |
这个作业的目标 | 尝试个人项目的实现,熟悉开发环境 |
Github项目链接
futureseek/SE-test: SE-test (github.com)
PSP表格
*PSP2.1* | *Personal Software Process Stages* | *预估耗时(分钟)* | *实际耗时(分钟)* |
---|---|---|---|
Planning | 计划 | 60 | 60 |
· Estimate | · 估计这个任务需要多少时间 | 480 | 360 |
Development | 开发 | 120 | 90 |
· Analysis | · 需求分析 (包括学习新技术) | 150 | 300 |
· Design Spec | · 生成设计文档 | 60 | 30 |
· Design Review | · 设计复审 | 60 | 30 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 60 | 45 |
· Design | · 具体设计 | 120 | 60 |
· Coding | · 具体编码 | 120 | 100 |
· Code Review | · 代码复审 | 20 | 20 |
· Test | · 测试(自我测试,修改代码,提交修改) | 20 | 30 |
Reporting | 报告 | 120 | 150 |
· Test Repor | · 测试报告 | 120 | 120 |
· Size Measurement | · 计算工作量 | 20 | 20 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 20 | 30 |
· 合计 | 1530 | 1445 |
项目设计
主函数
对控制台参数进行处理,调用各个模块代码依次进行。
Jieba类
对长语段进行分词处理
计算词频函数
对分开来的所有词语进行统计,计算在原语段的出现频率
计算余弦相似度
将不同的词出现频率作为空间向量各个维,所有的词语出现频率相乘作为点积,除以俩个语段的模长,求出余弦值。
程序流程图
算法的关键有三处:利用cppjie库分词处理,统计词频,计算余弦相似度
计算模块接口部分的性能改进
内存方面
utf-8后缀文件由cppjieba分词库所调用,这些文件占据了文件IO的主要部分
通过减少单词库可以减少文件IO方面的消耗,或者选用模型更下的分词算法。
各函数消耗时间
由图可知,大量的时间消耗在了构建分词模型上
异常处理说明
读取文件接口
void readfile(string& text, string path) {
ifstream fstream;
fstream.open(path);
if (fstream.is_open()) {
string line;
while (getline(fstream, line)) {
//cout<<line<<endl;
text += line;
}
}
else {
cout << "Failed to open the file" << endl;
return;
}
//cout<<text<<endl;
cout << "read over" << endl;
fstream.close();
}
检测输出流是否正确打开
对于输出文件接口做同样操作
控制台参数读取
try {
if (argc < 4) {
throw string("the input is error");
}
}
catch (string e) {
cout << e << endl;
return 0;
}
判断是否输入正确的参数