# paper_checking_system **Repository Path**: dwbcz/paper_checking_system ## Basic Information - **Project Name**: paper_checking_system - **Description**: 基于C#和C++开发的论文查重系统。一亿字次级论文库秒级查重。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 3 - **Created**: 2019-12-25 - **Last Updated**: 2025-03-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 简体中文论文查重系统 #### 写在前面 2017年开始,学校严抓研究生论文抄袭,遂希望开发一套校内论文查重系统,将新的论文和校内历年的研究生毕业论文以及同级的学生论文进行查重作为万方和CNKI查重的补充,于是找到了我。由于校方对做PC客户端版还是web版也没要求,并且C#的界面可以直接拖拉拽很方便,于是在2017年用C#完成了第一版并投入使用。后面经过一年多的稳定运行和维护升级,有了2018年决定开源的这一版。 #### 关联项目 辅助写作工具:https://github.com/tianlian0/aided_writing #### 安装使用教程 1、clone源代码 2、使用vs打开、编译(我使用的是vs2017) 3、运行paper_checking.exe文件即可 报错排除: 1、如果运行时报pdfbox相关错误可将引用中的pdfbox-app.dll删掉重新添加,然后尝试重新编译。 2、如果PDDocument或Spire报错,可能是因为项目刚拉下来相关第三方包还未下载完毕,可等待vs自动下载或打开NuGet手动下载缺少的包。 #### 项目介绍与功能说明 该系统目前支持对简体中文的论文进行横向查重和纵向查重。 两个核心功能点说明如下: 1、纵向查重 选择一批待查重论文后,将该批论文和论文库中的历年论文进行查重比对,用以检查该批论文有没有抄袭往年论文的情况。 2、横向查重 选择一批待查重论文后,在该批次论文之间进行查重比对,用以检查该批次论文有没有论文之间互相抄袭的情况。这个功能是目前主流查重平台(万方、CNKI等)没有提供的。 软件中涉及的其它功能点及名词解释如下: 1、添加到论文库: 将论文添加到论文库中。这个功能是服务于纵向查重的,将历年的论文通过这个功能添加到论文库中,在使用纵向查重功能的就可与历年的论文进行比对。该功能使用时只需要选中存放历年论文的文件夹,然后点击“添加到论文库”按钮,按钮会变灰,等待按钮恢复正常即添加完毕。该功能只会扫描文件夹中的pdf、doc、docx、txt文件,其它类型的文件将被忽略。该过程需要耗费一定时间。 2、查重阈值的设置 该值的设置决定了待查论文连续多少个字与其它论文相同即判定为抄袭。推荐值为12——16,用户亦可根据实际情况自行设定为1~99之间的任意整数值。 3、保存查重报告的文件夹 选择一个文件夹,待查重完毕后查重报告将会输出到这个文件夹中。 4、生成统计表 勾选此复选框,查重结束后将会生成csv格式的统计表。复选框默认勾选。 5、中断恢复 选中复选框,软件将不会清除上一次查重的结果继续查重。该复选框适用于应用程序中途意外退出,想从退出时的进度继续查重。 6、查重进程数 该值的设置影响查重速度,默认为当前机器CPU逻辑核心数-2。 7、格式转换线程数 论文在查重前会进行格式转换,该值的设置影响论文格式转换的速度,默认为当前机器CPU逻辑核心数-2。 几个注意事项: ①系统支持支pdf、doc、docx、txt格式的论文,文件夹中存在的其余格式的文件将被直接忽略。②非标准格式的论文查重时可能会由于转换失败导致查重失败。③如果有查重失败的论文,会在查重结束后弹窗提示。④如果待查论文在论文库中存在,且文件名不相同,则可能会导致查重重复率高于90%的情况(因为相当于是两篇一样的论文进行比对,至于为什么不是100%,下方的整体流程的第一段有说明)。 #### 查重整体流程说明 查重的原理: 每两篇论文之间比对连续相同的字符串,超过查重阈值即认为这些字是重复的。但是,如果但篇论文重复率在0.25%以下或重复字数在30字以下,将不认为重复。也就是说,如果单篇复率0.25%以下或重复字数少于30字的,将不配判定为重复。同时,如果一篇论文从其它论文抄袭了某句话抄袭了很多次,那么只认为其中的一次为重复。也就是说,如果一篇论文,抄袭了另一篇论文中的一段话,且这段话在论文中出现了三次,只认为其中的一次是抄袭,另外两次忽略。 整个查重的流程如下: 将论文转换为txt->将txt内容格式化->调用paper_check.dll进行查重比对并生成中间文件->根据中间文件生成查重报告和统计表 分步说明: 论文格式转换:经大量对比、实验后选用pdfbox和spire word free。 文本格式化:去掉论文摘要、目录、参考文献及非中文字符。参考文献都是论文名书名,肯定会影响重复率。同时很多论文目录是很相似的,也会影响重复率。这一部分万方和CNKI也是这么处理的。 调用paper_check.dll进行查重比对并生成中间文件:paper_check.dll是一个独立模块,也是查重算法的核心模块,其核心算法是用c++实现的AC自动机。这个模块目前没有开源。paper_check.dll启动时会校验key文件,所以key文件一定和paper_check.dll在同一目录下。 生成查重报告:中间文件中,0为未重复,1为重复,把重复的部分标红导出rtf就好了。 #### 引用的库 1、IKVM 2、Spire.Doc Free 3、pdfbox #### 已知bug 极少量正常的pdf、word文件转换失败,如您发现此类文件,希望您通过issuse进行反馈并提供下载链接,十分感谢。 #### 项目目前实际运行情况 项目自2017年于生产环境上线稳定运行至今,已产出5000+篇查重报告。有些万方、CNKI查重重复率为个位数的,在这个系统上可以重率80+(后经人工核验为抄袭无误),可见还是有一些作用的。 #### 其它说明 1、18年和同学尝试过本项目开发为web版(地址:https://gitee.com/mark_liu_admin/PaperCheckSys ),后面因为一些原因没有继续维护。 2、该开源版本和为一个简化版本,拥有查重所需的所有核心功能并输出一个较为简易的查重报告,有其它定制需求见[商业合作]。 #### 项目截图 ![image](https://github.com/tianlian0/paper_checking_system/blob/master/images/pic1.png) ![image](https://github.com/tianlian0/paper_checking_system/blob/master/images/pic2.png) ![image](https://github.com/tianlian0/paper_checking_system/blob/master/images/pic3.png) 项目运行演示视频:链接:https://pan.baidu.com/s/1VM9g4CT4nAwlZXOHePkoXQ 提取码:t059 PS:①截图部分内容涉及隐私,已马赛克处理。②截图、视频和本项目略有不同,一部分是因为视频和截图使用的不是最新版,另一部分见[其它说明]第2条。 #### 欢迎打赏 ![image](https://github.com/tianlian0/paper_checking_system/blob/master/images/shang.png) #### 商业合作 本项目遵守AGPL3.0协议,同时本项目已申请两项软件著作权(证书号:3846389,4486326) 本项目可以提供c#版本的相关技术支持,也可定制java版sdk开发包及相关技术支持。欢迎各高校、机构合作或进行系统定制。商业合作专用微信/QQ:654062779 #### 感谢 感谢用户@seven2017为本项目提供的诸多可行建议。