个人项目作业-论文查重(作业补交)

詹万森 2022-12-29 00:40:36

1.作业信息

  • 作业信息
    这个作业属于哪个课程软件工程
    这个作业要求在哪里个人项目作业
    这个作业的目标设计一个论文查重算法
    仓库 链接仓库

    2.项目地址

  • 仓库
    仓库

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

simHash算法共有5个步骤:分词、hash、加权、合并、降维

  • 关键函数
    main.py里有四个函数:
    • 1.def getWords(text) —— 分词
    • 2.def getSimh(s) —— hash、加权、合并、降维
    • 3.def getSimilarity(simh1, simh2) —— 计算海明距离和相似度
    • 4/def main_project() —— 主函数入口
    • 5.def test() —— 测试接口

simHash算法:首先文本的内容经过splitWords函数进行分词操作,之后getSimh函数计算分词过后文本的hash值,并进行
加权、合并和降维操作,最后通过调用getSimilarity函数,其中以getSimh处理过后的hash值作为传参,得到海明距离,从而
计算出相似度。
simHash算法的独特之处在于,相较于其他传统的hash算法,simHash算法计算出两个文本之间的hash值差距比较小,这样能够
更加精确的计算出文本之间的相似度。

  • 命令行测试
    格式:python main.py [原文文件] [抄袭版论文的文件] [答案文件]

img

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

  • 性能分析
    使用profile方法进行性能分析

img

  • 性能改进

img

其中getWords函数耗时最多,则用正则表达式匹配过滤对其改进

  • 原始代码:

    def getWords(text):
        with open(text, 'r', encoding='UTF-8') as f1:
            f2 = f1.read()   f1.close()
        length = len(list(jieba.lcut(f2))) 
        s = jieba.analyse.extract_tags(f2, topK=length) 
    
  • 改进代码:

    def getWords(text):
        with open(text, 'r', encoding='UTF-8') as f1:
    
            f2 = f1.read()
        pattern = re.compile(u"[^a-zA-Z0-9\u4e00-\u9fa5]")  
        s = pattern.sub("", f2)
        f1.close()
        length = len(list(jieba.lcut(s)))
        string = jieba.analyse.extract_tags(s, topK=length) 
    

    先用正则表达式匹配过滤,再用jieba.lcut来处理,提高效率。从结果可知,改进后的算法较之前的算法提升了几百ms。

5. 单元测试

构建一个test()函数用来专门测试,然后构建一个test.py文件,定义一个testSimHash测试类,测试的方法提供至少10个,具体的代码如下所示:

  • test()函数代码
def test():
    path1 = input("请输入论文原文的路径:")
    path2 = input("请输入抄袭论文的路径:")
    path3 = 'save.txt'
    simhash1 = getSimh(splitWords(path1))
    simhash2 = getSimh(splitWords(path2))
    s1 = getSimilarity(simhash1, simhash2)
    s2 = round(s1, 2)  
    print('文章相似度为:%f' % s2)
    with open(path3, 'a', encoding='utf-8')as f: 
        f.write(path2 + '与原文的相似度为:')
        f.write(json.dumps(s2, ensure_ascii=False) + '\n')
    return s2
  • testSimHash类代码
 class testSimHash(unittest.TestCase):
   def test_1(self):
       self.assertEqual(test(), 0.70)

   def test_2(self):
       self.assertEqual(test(), 0.71)

   def test_3(self):
       self.assertEqual(test(), 0.79)

   def test_4(self):
       self.assertEqual(test(), 0.65)

   def test_5(self):
       self.assertEqual(test(), 0.55)

   def test_6(self):
       self.assertEqual(test(), 0.30)

   def test_7(self):
       self.assertEqual(test(), 0.35)

   def test_8(self):
       self.assertEqual(test(), 0.85)

   def test_9(self):
       self.assertEqual(test(), 0.77)

   def test_10(self):
       self.assertEqual(test(), 0.89)
  • 测试结果

img

  • 代码测试覆盖率

img

6. 异常处理

  • 在命令行以“python main.py [原文文件] [抄袭版论文的文件] [答案文件]”的格式运行程序不会出错,但在pycharm中运行报错。

img

  • 原因:在读取指定文件时,文件路径不存在,程序出现异常。

  • 解决方法:用input()语句接收输入,一段时间后未输入则跳出,并引入os.path.exists()方法用于检验文件是否存在,若不存在则做出响应并且结束程序。

  • 代码修改如下:

    def test():
        path1 = ','.join(sys.argv[1:2]) 
        path2 = ','.join(sys.argv[2:3])
        path3 = ','.join(sys.argv[3:])
    +    if not os.path.exists(path1):
    +       print("论文原文不存在!")
    +       exit()
    +   if not os.path.exists(path2):
    +       print("抄袭论文不存在!")
    +       exit()
        simhash1 = getSimh(splitWords(path1))
        simhash2 = getSimh(splitWords(path2))
        s1 = getSimilarity(simhash1, simhash2)
        s2 = round(s1, 2) 
        print('文章相似度为:%f' % s2)
        with open(path3, 'a', encoding='utf-8')as f:  
            f.write(path2 + '与原文的相似度为:')
            f.write(json.dumps(s2, ensure_ascii=False) + '\n')
        return s2
    
  • 修改后程序正常运行:

img

6. PSP

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划3010
Estimate估计这个任务需要多少时间22202060
Development开发12001000
Analysis需求分析 (包括学习新技术)240360
Design Spec生成设计文档6030
Design Review设计复审3050
Coding Standard代码规范 (为目前的开发制定合适的规范)3030
Design具体设计6030
Coding具体编码200240
Code Review代码复审6030
Test测试(自我测试,修改代码,提交修改)12080
Reporting报告9090
Test Repor测试报告6080
Size Measurement计算工作量1010
Postmortem & Process Improvement Plan事后总结, 并提出过程改进计划6030
合计22202060
...全文
274 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
现在论文抄袭、学术打假成为学术界、媒体关注的话题。有的学者心存侥幸,有的学者对学术严谨性未加重视等,以至于被相关人士揭发举报,最终身败名裂。而许多毕业生因为种种原因,并未对论文抄袭现象加以重视,最后不能顺利毕业,荒废了几年时间,得不偿失。现在提供论文检测的机构主要来源于三大中文期刊数据库,即中国知网论文检测系统,万方论文相似性检测系统,维普通达检测系统。 现在应用较多的是中国知网和万方的检测系统,但是两者都不是免费的,其中,中国知网的费用相对高,在淘宝上一篇硕士论文的检测费用达到两百元。介于此考虑,我在网上收集了一下,提供免费检测论文的几个网站。虽然与权威检测机构的检测结果不一定完全一致,但肯定对论文的修改是有一定帮助的。免费论文检测 1 PaperPass论文通行证网 www.paperpass.org/index.aspx?f=A4BBA37525E99A492050231C7323CF76 系统推出免费试用功能,通过您的手机号码即可申请。申请成功后,您将免费获得3000字的检测量(每个手机限申请一次)。 注:由于服务器服务能力有限,网站每天(从零点计算)提供1000个用户申请免费试用,申请完为止,请您在每天的较早些时候申请,敬请谅解。 PaperPass.Org网站诞生于2007年,是全球首个中文文献相似度比对系统,运营三年来,已经发展成为最权威、最可信赖的中文原创性检查和预防剽窃的在线网站。目前在用检测版本是汲取了大量的用户意见后开发的,更新了比对算法,比对的效率和准确率大大提高,另外还增加了上传文件、下载报告、引用率统计等实用功能。我们将继续贴近用户需求,升级比对算法,为用户提供更为专业的论文原创性检测服务。 2 维普通达检测系统 http://gocheck.cn/s/8059 第一次成功充值之后即赠送第一次充值额度10%的积分,截止到4月1日,先注册先得哦。 维普-通达论文引用检测系统(简称VTTMS)是由重庆维普资讯有限公司与通达恒远(北京)信息技术有限公司共同研制而成,该系统结合了维普资讯的数据资源优势与通达的数据挖掘技术并成功地应用在大规模文本比对领域上的创新产品。通过对文档关键语义片段的识别、检测,可检测出文档中存在的不当引用、过度以用,甚至是抄袭等现象,并计算出文档的引用率、复写率和自写率等重要指标,为各级论文评定、检测、发表机构提供论文评定和论文收录的检测依据。 该系统采用TONDA公司自主研发的核心算法技术,具有业内领先的检测速度。全文比对数据库由专业的期刊数据库、广泛的web互联网数据、TONDA共享数据库和用户自建库组成,保证了比对源的专业性和广泛性。VTTMS具备很高的实用性和易用性,自其成功研发以来,已经在全国范围内众多行业和部门得到了广泛使用,获得了高度的好评,取得了良好的口碑。 3 知识产权卫士-拷克网 http://www.copycheck.com.cn 拷克网成立于2009年,是专业的内容抄袭智能检测平台服务商,成立以来一直执行 “技术领先战略”,开创了具有国际领先水平的核心、高端、基础技术---互联网在线中文智能抄袭检测技术,作为一家拥有领先技术的服务商,我们致力于通过对技术的创新和应用,来满知识版权组织和个人的需要。 公司的技术核心是内容抄袭智能检测技术研究,以分词技术为基础,以结构智能方法论为指导,开发出文本语义结构化引擎、版式语义结构化引擎、行为语义分析引擎,由此构建了互联网内容抄袭智能检测服务平台。该服务平台主要提供:网站监控、数据萃取、信息标引、情报发现与分析、知识网络、行为语义分析等在线服务。 4 论文检测大师 http://www.check-paper.com/ 只支持 doc 类型文件上传!提交您的有效论文,请不要上传无用文档,每个IP仅有2次检测机会,您的检测结果将以word文档的方式发送到您的邮箱里。 5 中国搜文章照妖镜 http://www.zhongguosou.com/ 文章照妖镜不但可用来分析文章抄袭的程度,而且可用来检测自己的博客文章被别人复制、被别人疯狂传播的程度,帮你保护你博客的版权。 6 外文论文检测系统 www.turnitin.com 必杀招:智慧语料库技术+GradeMark™ +专利的 Peer Review ,在全世界90多个国家、超过7000所高等院校应用,每天检测10万篇论文。适用:英文论文抄袭检查 http://www.dustball.com/ 7 繁体论文检查网站: 网址:http://www.ppvs.org 网址:http://www.paper119.com/

203

社区成员

发帖
与我相关
我的任务
社区描述
高校教学社区
其他 高校 广东省·广州市
社区管理员
  • ryue.zh
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧