Apache License 2.0

技术解读

以下内容由 GitRead 中文社区 编辑团队基于项目 README 与官方资料整理, 结合中文开发者的常见使用场景补充技术选型建议。具体以项目官方文档为准。

技术分析:fanghon/antiplag 项目深度解析

项目背景与痛点

在现代教育体系中,学术诚信是任何高校和学术机构关注的焦点。在软件开发、文档编写和图像处理中,确保原创性是至关重要的。然而,手动检查作业相似度不仅耗时,而且容易出错。为此,fanghon/antiplag 提供了一个全面的解决方案,它可以有效检测程序代码、文档文本和图像的相似度,从而帮助教育工作者和研究人员快速识别潜在的抄袭行为。

核心技术揭秘

技术栈与设计思想

fanghon/antiplag 是一个多模态的本质相似性检测工具,其核心技术栈结合了编程语言处理工具(如 Pygments)、文本处理技术(如 TF-IDF 和余弦相似度)以及图像处理算法(如 SSIM 和 Histogram Matching)。

首先,程序获取用户提供的文件,无论是源代码、文本文档还是图像文件,系统会自动解析文件内容并提取特征。对于源代码,系统使用 AST (Abstract Syntax Tree) 生成器解析代码结构;对于文本,系统用 TF-IDF 进行特征提取,并通过余弦相似度计算文本相似度;对于图像,系统使用 SSIM 算法比较图像的结构相似度,并通过直方图匹配技术进一步增强图像相似度检测的准确性。

graph TD A[用户上传文件] --> B("解析文件类型") B --> C1[源代码] & C2[文本] & C3[图像] C1 --> D1{"生成 AST"} --> E1[计算代码相似度] C2 --> D2[TF-IDF 特征提取] --> E2[计算文本相似度] C3 --> D3[图像特征提取] --> E3[计算图像相似度] E1 & E2 & E3 --> F[生成相似度报告]

实现细节

在实际实现中,fanghon/antiplag 的代码结构清晰,模块化程度高。它将主要功能模块封装成独立的库,并使用 Python 编写。值得注意的是,该项目对多线程的支持非常灵活,能够实现高效并行计算,极大地缩短了相似性检测的时间。

功能亮点与差异

相比于其他同类竞品,fanghon/antiplag 在以下几个方面表现优异:

  1. 全面性:不仅涵盖代码和文档文本的比对,而且支持图像相似度检测。
  2. 灵活性:支持用户自定义相似度阈值。
  3. 用户友好:提供丰富的 API 接口和清晰的报告文件,方便开发者和研究者集成与使用。

应用场景与落地建议

在生产环境中使用 fanghon/antiplag 时,需注意以下几点:

  1. 性能优化:对于大规模作业数据的批量检测,建议采用分布式计算框架进行优化,比如使用 Docker 容器化技术进行并发处理。
  2. 数据安全:确保用户上传的数据经过严格的加密处理,避免隐私泄露问题。
  3. 用户体验:简化用户操作环节,提供友好易用的 Web 界面或者命令行工具实现无缝集成。

综合评价

总体来看,fanghon/antiplag 提供了一个简洁高效的代码、文档和图像相似度检测解决方案,适用于教育、学术和各类需要避免抄袭的场景。其设计上的模块化、灵活性和可扩展性使得在各类复杂环境中实现无缝集成变得更为简单。此外,代码质量高,文档完善,特别适合作为参考进行二次开发。

当然,fanghon/antiplag 也存在一些潜在改进空间,例如增加可视化功能以增强用户对检测结果的理解,以及进一步提升对多媒体数据的处理能力。不过,这款工具已经成功解决了许多现代开发和科研互动中不可避免的问题,无论从理念还是技术方面都值得称道。

关于

GitHub 原始描述(英文)

作业查重软件,它实现了程序代码、文档文本、图片之间的相似度检查。a code-similarity, text-similarity and image-similarity computation software for the codes, documents and images of assignment.

描述取自 GitHub 官方 API,保持仓库作者书写的原文。

简要分析

热度分
936
价值分
302
活跃状态
活跃

语言占比

Java

Release

贡献者

README

antiplag 程序代码、文档、图片作业相似度检查软件

软件主要检查、比较学生提交的电子档作业之间的相似度,能对多种编程语言(如java、c/c++、python等)、多种格式(txt、doc、docx、pdf等)的中英文、简繁体文档之间的文本、多种格式(png、jpg、gif、bmp等)的图片相似度进行比较分析,输出相似度高的代码、文本、图片,进而辅助发现学生之间互相抄袭的行为。

需求

jdk11

安装

直接下载或clone项目源代码版,或下载软件的发布版releases。 源代码版可以直接导入eclipse,主入口类是gui.plag.edu下的PlagGUI。 系统在window10,jdk11 64位下开发、运行。

使用

在发布版子目录下,双击run.bat批处理程序,就能启动程序。使用说明参见发布版子目录下的软件使用文档。程序主界面如下: 程序主界面

原理

系统采用的主要技术是字符串相似度比较算法、代码词法语法解析、自然语言处理(nlp)中的分词、图片相似度比较算法。

程序类文本的相似度比较基于3个开放系统:

  • 一是基于网络服务的MOSS系统(斯坦福大学开放的支持多种编程语言代码相似度比较的系统);
  • 二是本地执行的sim系统(支持java、c等语言的文本相似度比较)。
  • 三是本地执行的jplag系统(支持java、c/c++、python等语言的文本相似度比较)。

本系统在它们基础上进行了二次开发和封装,针对moss系统,开发出了客户端存取模块,实现了代码文件提交、结果获取和解析、结果排序等功能;针对sim和jplag,则将其集成到系统中,在moss因网络故障等原因不可用时,可作为替代产品使用。

中英文文档作业相似度的比较提供了两种算法:

第一种是基于shinglecloud算法(一种基于文本指纹的、语言无关的相似度快速计算方法),文档主要处理过程如下:

  1. 使用tika读取不同格式(txt、doc、docx、pdf、html等)不同编码文件中的文本内容,并将其转换成能统一处理的文本;
  2. 使用hanlp对文本进行预处理、分词;
  3. 使用shinglecloud算法计算文本之间的相似度;
  4. 根据相似度排序,输出比较结果。

第二种是基于jplag的GST算法,对其功能进行了扩展,增加的“doc”语言类型,可以对各种文档进行相似度计算,并提供基于网页的可视化比对功能。

图片的相似度比较基于JImageHash项目:

主要采用了图片phash指纹相似度比较算法。

参考文献:

  1. Software Plagiarism Detection Techniques:A Comparative Study
  2. JPlag: Finding plagiarisms among a set of programs
  3. Winnowing: Local Algorithms for Document Fingerprinting moss系统采用的核心算法
  4. 软件抄袭检测研究综述

TODO

  1. 将jplag整合进系统。已实现。
  2. 支持html,jsp文件代码的查重。
  3. 支持图片文件查重。已实现。
  4. 开发web版作业查重软件。已实现,请参考antiplag-web
  5. 支持存储以往作业文档,支持基于数据库的作业查重。

源于开源,还于开源,开源是美德,加星也是美德 :smile: 。

更新情况

  1. 2019.12.1 使用hanlp作为分词组件,支持pdf、html文件文本的查重,修复若干bug,发布v2.8.6版。
  2. 2019.12.3 扩展jplag功能,提供“doc”语言类型,实现了对多种格式文档文本的相似度计算及可视化比对功能。更新使用帮助,测试数据,发布v2.8.8版。
  3. 2019.12.25 实现图片相似比较功能,使用phash,实现了对多种格式图片的相似比较。更新测试数据,文档,发布v3.0.0版。

评论

暂无评论