第一次个人编程作业——论文查重

论文查重

这个作业属于哪个课程 2023软件工程-双学位 (广东工业大学 - 计算机学院
这个作业的要求在哪 个人项目作业——论文查重
这个作业的目标 做一个简易个人项目

PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 60 120
·Estimate ·估计这个任务需要多长时间 180 150
Development 开发 500 600
·Analysis ·需求分析(包括学习技术) 400 700
·Design Spec ·生成设计文档 30 30
·Design Review ·设计复审 90 180
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 30 40
· Design · 具体设计 60 80
· Coding · 具体编码 180 200
· Code Review · 代码复审 180 180
· Test · 测试(自我测试,修改代码,提交修改) 120 180
Reporting 报告 60 80
· Test Repor · 测试报告 60 50
· Size Measurement · 计算工作量 40 60
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 60 150
· 合计 2030 2800

目录

  • gitcode地址
  • 基本框架
  • 关键代码
  • 运行结果
  • 部分测试展示

Gitcode地址:

git@gitcode.net:m0_64861143/3120001827.git

基本框架

关键代码

//求距离
public class HammingDistance {

    public static int getHammingDistance(String simHash1, String simHash2){
        int D = 0; //距离
        if (simHash1.length() != simHash2.length())
            D = -1;
        else {
            //bitset不行
            for (int i=0; i<simHash1.length(); i++){
                //按位比较
                if (simHash1.charAt(i)!=simHash2.charAt(i))
                    D++;
            }
        }
        return D;
    }
public class CalculateSimilar {

    public static double getSimilar(Reader reader, Reader reader1) throws IOException {
        IKSegmenter ikSegmenter = new IKSegmenter(reader,true);
        IKSegmenter ikSegmenter1 = new IKSegmenter(reader1,true);

        Map<String, Integer> fre = getFrequency(ikSegmenter);
        Map<String, Integer> fre1 = getFrequency(ikSegmenter1);

        //利用words1将两个文本都合在一起,采用HashSet就是为了去重;
        Set<String> words1 = new HashSet<>();  //T(A, B)
        words1.addAll(fre.keySet());
        words1.addAll(fre1.keySet());

        Vector<Integer> FA = new Vector<>();
        Vector<Integer> FB = new Vector<>();

        //构造比较文本的特征向量
        for (String s : words1){
           if (fre.get(s)!=null){
               FA.add(fre.get(s));
           }else
               FA.add(0);
            if (fre1.get(s)!=null)
                FB.add(fre1.get(s));
            else
                FB.add(0);
        }
        //利用余弦进行相似度计算
        int sumA = 0;
        int sumB = 0;
        int sumAB = 0;
        for (int i=0;i<words1.size();i++){
            int a = FA.get(i);
            int b = FB.get(i);
            sumAB += a*b;
            sumA += a*a;
            sumB += b*b;
        }

运行结果

部分测试展示

总结:对于本次项目经历,有很多东西都是从小白开始学习,实际上,花费的时间比PSP表上的更多,PSP表上的耗时并不准确,因为没有办法
分清各部分的归属。在本次的经历中,认识到自身的不足,还需加强对做项目的能力。

posted @ 2023-03-15 00:25  小甘学编程  阅读(41)  评论(0)    收藏  举报