查重工具Jplag的使用


前言

说明一下本文章针对最新版本Jplag3.0使用JplagAPI


一、Jplag是什么?

Jplag是用来对代码进行查重的一种工具,本次创作是由于博主在本科论文中有涉及到代码查重,所以想将自己的见解分享一下。

二、使用步骤

1.下载包

github的访问地址在这里
下载地址可以从github下载,也可以从这里下载

2.java环境配置

  • Java版本必须使用Java17,Java安装我就不过多说了,网上教程很多
  • 如果使用的是eclipse,那么eclipse版本使用的是2022-03,这样才能使用Java17

3.如何使用

  • 将jar包导入到项目里
  • 可以去github查看API
    • 但是我使用时,有些小问题,这些都可以解决
  • 使用我调试之后的代码


import java.io.File;
import java.util.List;

import de.jplag.JPlag;
import de.jplag.JPlagComparison;
import de.jplag.JPlagResult;
import de.jplag.exceptions.ExitException;
import de.jplag.exceptions.ReportGenerationException;
import de.jplag.options.JPlagOptions;
import de.jplag.options.LanguageOption;
import de.jplag.reporting.Report;

public class TestCode {
	public static void main(String[] args)  {
		// TODO Auto-generated method stub
		//D:\\Testcode\\16517173285362这个文件夹下面放你需要查重的文件
		JPlagOptions options = new JPlagOptions("D:\\Testcode\\16517173285362", LanguageOption.C_CPP);
		//因为我查的是CPP文件所以用的CPP,这里可以改成你需要的语言
		options.setBaseCodeSubmissionName("template");
		//这个template文件夹放在上面那个文件夹里,外面的那些文件需要和里面的文件进行查重,当然外面的文件也会两两比较查重
		try {
				JPlag jplag = new JPlag(options);
				JPlagResult result = jplag.run();

				List<JPlagComparison> comparisons = result.getComparisons();
				File outputDir = new File("D:\\Testcode");//这个是将结果保存的文件夹
				Report report = new Report(outputDir, options);

				report.writeResult(result);	
			}
			
		} catch (ReportGenerationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch (ExitException e) {
			e.printStackTrace();
		}	
	}

}


  • 查看执行结果
    • 可以去我代码中说明的位置去查看,里面有许多网页,点开index页面,最下面有查重率,点开可以具体查看。
    • 具体如何查看外面文件之间的查重率我暂时也还不清楚,欢迎大家使用后给我留言!!!

三、总结

经过我使用后,我发现对于简单的只有输出或简单定义个变量来进行查重,一般是无法进行查重,会提示关键字太少,如果加个循环或者其他的话,则可以查重,但还是有些无法成功,具体缘由我也无从得知,大家使用后如果有什么新发现欢迎给我评论留言!!!

### 关于AI代码查重工具及方法 目前,在软件工程领域以及学术研究中,代码查重的需求日益增加。这不仅是为了检测抄袭行为,还能够提升团队协作中的代码质量控制和知识产权保护水平。以下是几种常见的AI代码查重工具及其工作原理: #### 工具介绍 1. **CodeConvert AI** CodeConvert AI 是一款多功能在线服务,除了提供代码语言之间的转换外,也支持一定程度上的相似度分析功能[^2]。虽然其主要目标并非专注于代码查重,但它可以通过比较不同版本的代码结构来间接实现部分重复性检测。 2. **火眼审阅** 火眼审阅是一款智能化文档审查平台,适用于多种类型的文件审核场景,包括但不限于合同、法律文书等领域内的差异发现与风险提示。尽管它更侧重自然语言处理方面的能力,但在特定配置下也可以用于简单的源码片段匹配任务。 3. **Moss (Measure of Software Similarity)** Moss是由斯坦福大学开发的一个强大而灵活的程序提交管理系统兼自动评估器,专为教育环境设计用来识别学生作业间的潜在雷同之处。用户只需上传待测项目压缩包即可获得一份详尽报告指出哪些地方存在高度一致的情况[^3]。 4. **JPlag** JPlag是一种开源解决方案,可以有效辨别各种编程语言编写出来的作品之间是否存在非法复制现象。该算法基于语法树构建技术,因此即使变量名有所改动也能被精准捕捉到[^4]。 5. **Simian** Simian(Similarity Analyser),即相似性分析仪,旨在快速定位同一份或多份代码库内部存在的冗余表达式或者完全相同的逻辑单元。对于维护大型遗留系统尤其有用,因为它可以帮助开发者清理不必要的重复劳动成果[^5]。 #### 方法论概述 - 利用词法解析器提取基本令牌序列作为基础特征向量; - 构建抽象语法树(ASTs)并对其进行规范化操作以便更好地忽略无关紧要的变化比如命名约定等细节区别; - 应用机器学习模型训练得到分类边界从而区分正常借鉴关系还是恶意剽窃企图; - 结合上下文信息综合判断最终得分等级范围从低概率至高可能性不等。 ```python import simhash def calculate_similarity(code1, code2): hash1 = simhash.SimHash(code1.split()) hash2 = simhash.SimHash(code2.split()) distance = hash1.distance(hash2) similarity = 1 - distance / 64.0 return similarity ``` 上述示例展示了如何利用SimHash算法计算两段文本(此处假设为代码字符串形式)之间的近似程度。这种方法简单易行但对于复杂情况可能需要进一步优化调整参数设置才能达到理想效果。 ---
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值