第一次个人编程作业
软件工程 | Here |
---|---|
作业要求 | Here |
作业目标 | 使用git管理代码/PSP表格/查重算法/单元测试 |
GitHub代码地址:
PSP表格
PSP2.1 | Personal Software Process Stages |
预估耗时 (分钟) |
实际耗时 (分钟) |
---|---|---|---|
Planning | 计划 | 60 | 50 |
·Estimate | ·估计这个任务需要多少时间 | 100 | 90 |
Development | 开发 | 980 | 1110 |
·Analysis | ·需求分析(包括学习新技术) | 300 | 360 |
·Design Spec | ·生成设计文档 | 180 | 150 |
·Design Review | ·设计复审 | 30 | 20 |
·Coding Standard | ·代码规范(为目前的开发制定合适的规范) | 20 | 10 |
·Design | ·具体设计 | 30 | 30 |
·Coding | ·具体编码 | 240 | 180 |
·Code Review | ·代码复审 | 60 | 30 |
·Test | ·测试(自我测试,修改代码,提交修改) | 120 | 240 |
Reporting | 报告 | 80 | 100 |
·Test Repor | ·测试报告 | 40 | 50 |
·Size Measurement | ·计算工作量 | 10 | 10 |
·Postmortem & Process Improvement Plan |
·事后总结,并提出过程改进计划 | 30 | 40 |
·合计 | 1220 | 1350 |
计算模块接口的设计与实现过程
类
1.Main:包含方法main,pocess和work
2.convert:包含方法textToString和StringTotext
3.getCos:包含方法getCos
大概流程
*通过命令行接收三个参数,分别为原文档、抄袭文档和答案文档
*将原文档和抄袭文档转换为字符串
*对比两个字符串的相似度
*将相似度输出到制定的文档中
具体实现
分词
使用hanlp工具分词,使用的是比较方便的第一种方法,不用另外下载data包,在pom.xml文件中加入
<dependency>
<groupId>com.hankcs</groupId>
<artifactId>hanlp</artifactId>
<version>portable-1.7.8</version>
</dependency>
就能使用基本功能。
附上github地址:https://github.com/hankcs/HanLP/tree/1.x
以及配置好后的第一次使用截图
相似度算法--使用余弦相似度算法
公式
具体介绍地址:<https://blog.csdn.net/u012160689/article/details/15341303
除了博客中提到的计算词频的方式,我还找到了另一种:把词的出现位置用Map<String,Vector
代码性能测试
堆内存:
内存消耗:
耗时:
CPU Load:
单元测试
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.Before;
import org.junit.After;
import org.junit.runners.MethodSorters;
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
/**
* Main Tester.
*
* @author <QS>
* @since <pre>Sept, 24, 2020</pre>
* @version 1.0
*/
public class MainTest {
@Before
public void before() throws Exception {
System.out.println("begin");
}
@After
public void after() throws Exception {
System.out.println("finish");
}
/*相似度为零的测试*/
@Test
public void testshouldb0() throws Exception{
Main.work("src/test/test1/orig.txt","src/test/test1/empty.txt","src/result/shouldb0");
}
/*相似度为1的测试*/
@Test
public void testshouldb1() throws Exception {
Main.work("src/test/test1/orig.txt","src/test/test1/orig.txt","src/result/shouldb1");
}
@Test
public void testmain1() throws Exception {
Main.work("src/test/test1/orig.txt","src/test/test1/orig_0.8_add.txt","src/result/testmain1");
}//部分代码
测试结果
总结
这是我作为一条咸鱼第一次遇到一个相对完整的项目,所要完成的东西不仅是代码,还有除了代码以外的很多。对于我而言几乎是从零开始,所以借此机会也学到了很多东西,一开始想过用python实现这个算法,但想想这完全就是从零开始了,遂放弃。只是我的Java知识也不是非常扎实,于是乎也花了不少时间在寻求代码实现的路上。除此之外,更难的还是学习git、JProfiler等等没接触过的新事物。总而言之,完成这份作业的途中学到了很多新东西,不管是在这个作业里用不得到的还是用不到的,总归是一份很不错的积累。