软件工程作业
软件工程作业
PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | ||
| Estimate | 估计这个任务需要多少时间 | 790 | 920 |
| Development | 开发 | ||
| Analysis | 需求分析 (包括学习新技术) | 200 | 250 |
| Design Spec | 生成设计文档 | 80 | 80 |
| Design Review | 设计复审 | 40 | 30 |
| Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 50 | 60 |
| Design | 具体设计 | 20 | 40 |
| Coding | 具体编码 | 150 | 180 |
| Code Review | 代码复审 | 60 | 60 |
| Test | 测试(自我测试,修改代码,提交修改) | 100 | 100 |
| Reporting | 报告 | ||
| Test Repor | 测试报告 | 50 | 50 |
| Size Measurement | 计算工作量 | 10 | 20 |
| Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 30 | 50 |
| 合计 | 790 | 920 |
计算模块接口的设计与实现
1.代码结构
- 文本预处理函数
用cppjieba进行分词,进行词频统计。 - cosineSimilarityTFIDF
计算 TF-IDF 权重向量,基于TF-IDF权重计算余弦相似度。 - main函数
处理命令行参数,读取文件,计算相似度,输出结果。 - textio
读取文档,异常处理。
2.关键算法分析
- 核心思想: 基于 TF-IDF 向量和余弦相似度的文本相似度计算,来判断原文与抄袭版的相似度。
- 分词,使得中文文本可以拆分成可分析的词。
- IDF计算,反映个词在整个语料库中出现的频率。
- TF-IDF,是结合了词频(TF)和逆文档频率(IDF)的权重计算方法,用来衡量词在文本中的重要性。
- 余弦相似度,计算出两个文本之间的相似度.
- 优点:
- 使用了 cppjieba 分词工具,适用于中文文本分析。
- TF-IDF 是一种有效的文本向量化方式,能够突显重要词汇,忽略常见词汇,提高准确度。
- 限制:
- 文本预处理和分词质量会直接影响最终相似度计算的准确性。
- 对于长文本的相似度计算可能存在性能瓶颈,尤其是计算大量词的 TF-IDF 和相似度时。
3.流程图
- cosineSimilarity流程
![]()
性能分析

cppjieba::Jieba::KeywordExtractor 占用较多 CPU,分词和关键词提取的计算速度较慢。可以预加载 IDF 词典,避免重复计算。
异常处理
`// 读取文件内容
string readFile(const string& filePath) {
ifstream file(filePath);
if (!file) {
throw runtime_error("无法打开文件: " + filePath);
}
stringstream buffer;
buffer << file.rdbuf();
return buffer.str();
}
// 写入文件(输出相似度)
void writeFile(const string& filePath, double similarity) {
ofstream file(filePath);
if (!file) {
throw runtime_error("无法打开输出文件: " + filePath);
}
file.precision(2);
file << fixed << similarity << endl;
}`
当文件路径不正确或是文件不存在时,会抛出异常。
使用方法
- 下载Source code(zip)
- 在命令行输入 cd .\x64\Debug
& ".\Paper plagiarism check.exe" "论文原文的文件的绝对路径" "抄袭版论文的文件的绝对路径" "输出的答案文件的绝对路径"

浙公网安备 33010602011771号