第一次个人项目

这个作业属于 首页 - 计科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;
}

判断是否输入正确的参数

posted @ 2024-09-11 12:49  莫放修芦碍月生  阅读(64)  评论(0编辑  收藏  举报