个人编程作业
第一次个人编程项目
| 课程 | 软件工程 | 
|---|---|
| 要求 | 个人项目作业 | 
| 题目 | 论文查重 | 
一、题目要求
设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。
原文示例:今天是星期天,天气晴,今天晚上我要去看电影。 抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。 
要求输入输出采用文件输入输出,规范如下:
从命令行参数给出:论文原文的文件的绝对路径。 从命令行参数给出:抄袭版论文的文件的绝对路径。 从命令行参数给出:输出的答案文件的绝对路径。 
二、项目实现
实现思路: 

关键类: 

 //算词频
 for (String s : JieBaUtil.startParticiple(str1)) {
            if (vectorMap.containsKey(s)) {
                vectorMap.get(s)[0]++;
            } else {
                tempArray = new int[2];
                tempArray[0] = 1;
                tempArray[1] = 0;
                vectorMap.put(s, tempArray);
            }
        }
        for (String s2 : JieBaUtil.startParticiple(str2)) {
            if (vectorMap.containsKey(s2)) {
                vectorMap.get(s2)[1]++;
            } else {
                tempArray = new int[2];
                tempArray[0] = 0;
                tempArray[1] = 1;
                vectorMap.put(s2, tempArray);
            }
        }
核心算法:余弦相似度计算。
步骤
分词
列出所有词
使用Map记录词数
代入公式
![]()
三、性能
测试覆盖率截图 

单元测试 

类的内存消耗 

CPU Load 

堆内存 

我的 github 

四、PSP表格
| PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) | 
|---|---|---|---|
| Planning | 计划 | 30 | 50 | 
| Estimate | 估计这个任务需要多少时间 | 715 | 930 | 
| Development | 开发 | 200 | 300 | 
| Analysis | 需求分析 (包括学习新技术) | 60 | 90 | 
| Design Spec | 生成设计文档 | 30 | 40 | 
| Design Review | 设计复审 | 50 | 20 | 
| Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 10 | 20 | 
| Design | 具体设计 | 35 | 30 | 
| Coding | 具体编码 | 200 | 250 | 
| Code Review | 代码复审 | 20 | 20 | 
| Test | 测试(自我测试,修改代码,提交修改) | 10 | 10 | 
| Reporting | 报告 | 40 | 50 | 
| Test Repor | 测试报告 | 10 | 30 | 
| Size Measurement | 计算工作量 | 20 | 10 | 
| Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 5 | 10 | 
| Total | 合计 | 715 | 930 | 
本文使用 mdnice 排版
                    
                
                
            
        
浙公网安备 33010602011771号