第一次个人编程作业

软件工程 Here
作业要求 Here
作业目标 使用git管理代码/PSP表格/查重算法/单元测试

GitHub代码地址:

clickme


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等等没接触过的新事物。总而言之,完成这份作业的途中学到了很多新东西,不管是在这个作业里用不得到的还是用不到的,总归是一份很不错的积累。

>
posted @ 2020-09-25 01:11  qinSi77774  阅读(148)  评论(0编辑  收藏  举报