个人项目作业-论文查重

个人项目作业-论文查重

一.作业链接

这个作业属于哪个课程https://bbs.csdn.net/forums/qq_40085543?typeId=2549409
这个作业要求在哪里https://bbs.csdn.net/topics/613858565
这个作业的目标设计一个论文查重算法
其他参考文献https://www.cnblogs.com/sddai/p/10088007.html

二.预估耗费时间

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划6060
· Estimate· 估计这个任务需要多少时间12001200
Development开发800800
· Analysis· 需求分析 (包括学习新技术)3025
· Design Spec· 生成设计文档2015
· Design Review· 设计复审1530
· Coding Standard· 代码规范 (为目前的开发制定合适的规范)2010
· Design· 具体设计240300
· Coding· 具体编码120150
· Code Review· 代码复审4020
· Test· 测试(自我测试,修改代码,提交修改)2015
Reporting报告5050
· Test Report· 测试报告2020
· Size Measurement· 计算工作量1010
· Postmortem & Process Improvement Plan· 事后总结, 并提出过程改进计划2020
· 合计960885

三.计算模块接口的设计与实现过程

请添加图片描述

1. 读取论文原文和抄袭版论文的文件

函数txtToString把txt文本读取保存在一个字符串里

2. 对两份论文进行分词处理

使用第三方库HanLp对字符串进行分词

3. 使用Simhash算法生成它们的Simhash值。

img

4. 计算两份论文的Simhash值的汉明距离,得出它们的重复率。

(海明距离:两个simhash对应二进制(01串)取值不同的数量称为这两个simhash的海明距离)

5. 将重复率输出到答案文件中。

四.计算模块接口部分的性能改进

性能分析图:

请添加图片描述

五.计算模块部分单元测试展示

import java.util.List;

public class Test {
    public static void test(String[] args) {
       String originalFilePath = "D:\\java\\PaperReview\\origin.txt ";         //原文文件地址
       String plagiarismFilePath = "D:\\java\\PaperReview\\origin_add.txt";    //抄袭文件地址
       String resultFilePath = "D:\\java\\PaperReview\\answer.txt";            //查重率结果文件地址

//对字符串进行分词并且返回到关键字队列
        List<String> originalTextKeywordsList=Text.WordSegmentation(Text.txtToString(originalFilePath));
        List<String> plagiarismTextKeywordsList=Text.WordSegmentation(Text.txtToString(plagiarismFilePath));

        //词语转换为哈希值
        List<String> originalHash= SimHash.getHash(originalTextKeywordsList);
        List<String> plagiarismHash=SimHash.getHash(plagiarismTextKeywordsList);
        //统计频数用作权重
        List<Integer> originalCount=SimHash.getCount(originalTextKeywordsList);
        List<Integer> plagiarismCount=SimHash.getCount(plagiarismTextKeywordsList);
//

        //原文的simHash值数组
        int [] originalSimHashArray=SimHash.getSimHash(originalHash,originalCount);
        int [] originalSimHash =new int[originalSimHashArray.length];
        for (int i = 0; i < originalSimHashArray.length; i++) {
            originalSimHash[i] = originalSimHashArray[i];
        }


        //抄袭文的simHash值数组
        int [] plagiarismSimHashArray=SimHash.getSimHash(plagiarismHash,plagiarismCount);
        int [] plagiarismSimHash =new int[plagiarismSimHashArray.length];
        for (int i = 0; i < plagiarismSimHashArray.length; i++) {
            plagiarismSimHash[i] = plagiarismSimHashArray[i];
        }

        int dis=HammingDistance.hammingDistance(originalSimHash,plagiarismSimHash);
        // System.out.println(dis);
        double reviewRate=(128-dis)*100/128;
         System.out.printf("查重率为:%.2f%%",reviewRate);

        Text.writeFile(reviewRate,resultFilePath);

    }
}

请添加图片描述

六.计算模块部分异常处理说明

请添加图片描述

分词有标点符号,需要过滤掉

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值