该项目旨在通过结合 SimHash 算法与 BERT-Base-Chinese 模型,实现对高校学生作业的智能查重,支持文件批量处理与历史作业比对,自动生成查重结果的 Excel 报告。系统后端基于 Spring Boot 构建,采用 MySQL 存储数据,并集成多种第三方工具(如 EasyExcel、HanLP、Apache POI 等)实现文件解析、文本分词、相似度计算以及结果输出;系统前端基于 Vue3、Pinia、Element Plus、Axios、Vite、Sass 等前端框架实现交互与展示。
similarity_outcome
与 files
),提供文件信息管理和查重结果存储,方便后续数据查询与管理。确保已安装 Node.js(我使用的是:v18.20.5版本) 和 npm/yarn,然后执行以下命令安装项目依赖:
npm install
# 或
yarn install
启动本地开发服务器:
npm run dev
# 或
yarn dev
默认访问地址:http://localhost:5137
构建生产环境代码:
npm run build
# 或
yarn build
在构建完成后,可以使用以下命令预览生产环境:
npm run preview
# 或
yarn preview
生成Excel路径不填默认生成在文件夹路径。
先运行sql文件:
修改.yml的数据库配置:
下载BERT模型:
因为文件过大,不能上传仓库,因此需要你自己现在模型,安装下面步骤进行:
Hugging Face下载网址:Hugging Face
步骤一:
步骤二:
最后将下载好的pytorch_model.bin放入Bert-Base-Chinese文件夹下。
项目后端采用 Spring Boot 框架,前端采用 Vue3 主要模块包括:
files
)及查重结果(表 similarity_outcome
),支持数据的增删改查操作。技术名称 | 版本 | 描述 |
---|---|---|
框架 | Vue 3 | 基于组件的现代化前端框架,支持组合式 API 和响应式系统。 |
状态管理 | Pinia | 轻量级、模块化的状态管理库,专为 Vue 3 设计,提供更好的开发体验。 |
路由管理 | Vue Router | 提供动态路由和视图切换功能,支持嵌套路由和导航守卫。 |
UI 组件库 | Element Plus | 基于 Vue 3 的 UI 组件库,提供丰富的组件和主题定制选项。 |
HTTP 请求 | Axios | 基于 Promise 的 HTTP 客户端,支持浏览器和 Node.js 环境,用于与后端进行数据交互。 |
开发工具 | Vite | 新一代前端构建工具,快速冷启动和热更新,优化开发体验。 |
ESLint | 代码检查工具,帮助开发者遵循一致的代码风格并发现潜在问题。 | |
Sass | 强大的 CSS 预处理器,支持变量、嵌套、混合等功能,提升样式编写效率。 |
项目基于 Maven 构建,主要依赖如下(具体版本请参考 pom.xml
):
名称 | 版本号 | 说明 |
---|---|---|
JDK | 21 | |
**Spring Boot ** | 3.0.5 | 项目的基础框架,统一管理 Spring Boot 相关配置与依赖版本 |
Knife4j | 4.2.0 | 用于生成和展示 REST API 文档,方便接口调试与查看 |
Guava | 31.1-jre | 提供多线程工具及高性能集合类,优化并发及数据处理 |
EasyExcel | 4.0.0 | Excel 文件读写工具,方便生成查重结果报表 |
Apache Commons Lang3 | 3.15.0 | Java 常用工具类库,扩展 JDK 核心 API 功能 |
Jsoup | 1.10.3 | HTML 解析工具,用于解析网页及文件中的内容 |
HanLP | portable-1.7.6 | 中文分词及自然语言处理库,用于提取文本特征和语义向量 |
Apache PDFBox | 2.0.24 | PDF 文件解析工具,用于处理作业中的 PDF 文件 |
Apache POI | 5.2.3 | 处理 Office 文件(Excel、Word 等)的工具,支持文件内容解析和生成 |
Apache POI OOXML | 5.2.3 | 专用于处理 OOXML 格式文件(如 .xlsx)的扩展包 |
Apache POI OOXML Schemas | 4.1.2 | 补充 Apache POI 处理 OOXML 文件所需的额外 Schema 支持 |
Apache POI Scratchpad | 5.2.2 | 提供额外的 POI 工具支持,便于处理特殊格式或旧版 Office 文件 |
OkHttp | 4.11.0 | 高效的 HTTP 客户端,用于发起网络请求和远程服务交互 |
MinIO | 8.5.7 | 对象存储客户端库,支持与 MinIO 服务器进行数据存储与读取 |
**MySQL ** | 8.0.33 | MySQL 数据库连接驱动,确保与 MySQL 数据库的高效连接 |
Druid | 1.2.24 | 数据库连接池及监控工具,提高数据库访问性能和稳定性 |
Spring Boot Starter Data Redis | 2.2.0.RELEASE | Redis 数据操作与缓存支持库,提升系统数据访问效率 |
Java Mail (javax.mail / com.sun.mail) | 1.6.2 | 用于发送邮件通知或报警,支持邮件 API 交互 |
Hutool | 5.8.18 | 工具库,提供丰富的实用工具和方法,简化日常开发任务 |
**MyBatis Plus ** | 3.5.8-001 | 集成 MyBatis Plus,实现简化数据库 CRUD 操作及增强 SQL 功能 |
Fastjson | 2.0.21 | 高性能 JSON 处理库,实现对象与 JSON 数据间的快速转换 |
Lombok | (自动配置) | 通过注解减少样板代码,提高开发效率,自动生成 getter、setter 等方法 |
序号 | 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 小数位 | 注释 |
---|---|---|---|---|---|---|---|
1 | id | bigint | -- | NO | -- | 0 | 主键ID |
2 | absolutePath | varchar(255) | 255 | NO | -- | -- | 文件绝对路径 |
3 | fileName | varchar(255) | 255 | NO | -- | -- | 文件名 |
4 | fileSize | bigint | -- | NO | -- | 0 | 文件大小 |
5 | fileType | varchar(50) | 50 | NO | -- | -- | 文件类型(扩展名) |
6 | pictureParentPath | varchar(255) | 255 | YES | -- | -- | 本文所有图片的父路径 |
7 | word_json | varchar(255) | 255 | NO | -- | -- | 分词结果 |
8 | picture_hash_json | varchar(255) | 255 | NO | -- | -- | 图片hash指纹 |
9 | create_time | datetime | -- | NO | CURRENT_TIMESTAMP | -- | 创建时间 |
10 | update_time | datetime | -- | NO | CURRENT_TIMESTAMP | -- | 修改时间 |
11 | create_user | varchar(255) | 255 | YES | -- | -- | 创建人 |
12 | update_user | varchar(255) | 255 | YES | -- | -- | 修改人 |
13 | is_deleted | tinyint(1) | -- | NO | 0 | 0 | 逻辑删除标识,0:未删除,1:已删除 |
序号 | 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 小数位 | 注释 |
---|---|---|---|---|---|---|---|
1 | id | bigint | -- | NO | -- | 0 | 主键id |
2 | outcome | varchar(255) | 255 | YES | -- | -- | 结果 |
3 | source_file_name | varchar(255) | 255 | NO | -- | -- | 文件名 |
4 | target_file_name | varchar(255) | 255 | NO | -- | -- | 被比较的文件名 |
5 | jaccard_sim | varbinary(255) | 255 | NO | -- | -- | 杰卡德相似度 |
6 | hamming_distance | varchar(255) | 255 | YES | -- | -- | 海明距离 |
7 | hash_sim | varchar(255) | 255 | YES | -- | -- | 相似度 |
8 | con_sim | varchar(255) | 255 | YES | -- | -- | 余弦相似度 |
9 | avgpic_sim | varchar(255) | 255 | YES | -- | -- | 图片相似度 |
10 | weighted_sim | varchar(255) | 255 | YES | -- | -- | 加权相似度 |
11 | weighted_sim_double | double | -- | YES | -- | -- | 加权相似度数阈值 |
12 | create_time | datetime | -- | NO | CURRENT_TIMESTAMP | -- | 创建时间 |
13 | update_time | datetime | -- | NO | CURRENT_TIMESTAMP | -- | 修改时间 |
14 | create_user | varchar(255) | 255 | YES | -- | -- | 创建人 |
15 | update_user | varchar(255) | 255 | YES | -- | -- | 修改人 |
16 | is_deleted | tinyint(1) | -- | NO | 0 | 0 | 逻辑删除标识,0:未删除,1:已删除 |
similarity_outcome
表获取详细的比对数据。项目使用的 BERT 模型 为 BERT-Base-Chinese
,用于从文本中提取语义向量,增强对文本相似度的判断能力,与传统的 SimHash 算法结合,进一步提高查重的准确率。
欢迎对项目进行改进和贡献:
如有问题,可以有些邮箱联系我,也可以进行交流,项目不足之处,还请多多担待。
作者: linyi 邮箱: jingshuihuayue@qq.com GitHub: BERT-SimHashHomeworkCheck
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。