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

詹万森 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
...全文
196 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
(1)本软件不能检查已发表文档,因为已发表的文档往往已经到处传播和引用开来。 ⑵.本软件的每检测400字需要6秒钟,一篇8000字的文档至少需要2分钟,需要一点点耐心。 ⑶.本软件检测结果存在误差,用更小的文档块进行检测,可以减少误差,但需要的时间会相应增加,经过我们在多家编辑部的试用情况,块数大小定为200-400字较为合适,此时误差率也是可以接受的,文档相似率一般是比实际的要低。 ⑷.如果某个相似块未显示,说明未检索到相似的文档。 ⑸.本软件每天检测字数不能超过10万字,否则服务器过载,将封锁IP。 ⑹.本软件后台数据库覆盖188亿个网页和490万篇论文。 ⑺.本软件检测文档不得超过4000字,如需要更长的文档支持,需要购买收费版。 ⑻.当软件未能联网时,软件检测按钮将变虚。 ⑼.本免费版由于服务器压力,有时候可能不能正常检测,出现这种情况,请速联系我们,或者由单位出面购买单位版或者豪华版。 ⑽.本软件检测结果只能作为一个参考,可以使用表格右键导出详细检查结果发送给被检查本人,本软件不对是否剽窃做结论,只是告诉你与现存文献相似度高于80%的文字比例所占文章总数比例是多少。 ⑾.我们将持续投入反剽窃的研究,本人已获批国家自科基金进一步反剽窃问题,我们将继续发表一系列论文,以及继续申请相关专利。软件不完善的地方敬请原谅。 欢迎提供反馈意见,我们将持续升级本软件。 我们的联系方式:runorsoft@163.com 我们的博客:http://hi.baidu.com/whusoft -------------------------------------------------------------------- 反剽窃系统是通过比对源文档和目标文档的相似性给出相似度结果的一种信息处理系统。由武汉大学信息管理学院出版科学系教师沈阳副教授研发的ROST 文档相似性检测工具可以有效检测论文的抄袭相似情况,经过六年的研发,终于推出了功能强劲的6.0版本,在定版过程中得到了武汉大学信息管理学院多位专家教授的宝贵意见。 目前ROST 反剽窃系统6.0版已经投入多家单位进行使用,反应良好,最大程度地杜绝了有抄袭可能的论文发表问世。 ROST反剽窃系统的技术特点: 1.覆盖面广,通过混合引擎覆盖约188亿个网页和490万篇论文。系统采用自研的ROST WebSpider算法实现了对互联网和期刊网的广度覆盖。但需要提醒您的是,本反剽窃系统不能覆盖所有文献。 2.模糊检测,柔性匹配,不管抄袭者如何替换部分字符,删除部分标点符号,系统都能通过相似度来进行判定,让抄袭者无所遁形。系统采用自研的ROST Similar算法实现高速相似性检测和度量。系统采用自研的QingQing算法提取信息指纹,在P3、512MBPC上,分词速度为13MB/S,已在互联网提供评测版供业内评测。 3.引文及参考文献去除,使得误判的可能性降至最低。 4.分块检测机制,将文章的每一文本块与其他文档的相似度都精确的表示出来了,每一文本块约为200字至400字不等,以红色表示极度相似(相似度大于80%),一目了然,清晰醒目。 5.相似文档模块跟踪技术,可以通过简单操作直接定位相似文档模块位置,直观明了。 6.方便的结果分析功能,自动分析文档相似结果,给出评价意见。 7.支持多种文件格式的文档,包括PDF、DOC、PPT、XLS、TXT等文档。 (PDF文件需另行安装ROST文件格式识别引擎) 8.可将分析结果进行存盘为专有数据文件,不用反复查找浪费时间。 9.应用范围广泛:可用于抄袭鉴定、科技查新、专利查新、引用查询、转载查询等多个领域,也可用于追查文献的流传图,绘制文献的传播发布路线。可以为多类学术机构、文献机构以及个人服务。 多年来,学术界的论文著作抄袭剽窃事件屡见不鲜,这是摆在我们面前的一个重大课题。目前多是靠偶然发现后,在书山文海中逐步查找,费力劳神,时效性差,工作量极大。为促进学术事业的健康发展,采用有效科学手段,发现和打击学术腐败,极有必要进行反剽窃和相似信息检测系统的研发和推广,提升刊物和出版单位的学术信誉,净化学术风气。目前国外已深刻认识到学术腐败对科技创新的危害性,也采取了切实有效的技术措施,对侵犯知识产权或违反学术道德的不端行为加以取证。而国内只有极少数专家从事反剽窃的技术与理论研究。武汉大学信息管理学院出版科学系推出的ROST反剽窃系统技术先进,功能实用,是守住学术道德底线的有效工具,能将用户的学术及经济风险降至最低。 研发人员还先后发现了剽窃省力、格式遗留、剽窃趋同、剽窃蔓延、剽窃习惯固定、相关引文剽窃等六种现象,总结了论文剽窃的主要方式,连续推出了三个原型系统,发表了《System of twice-gathering information and Research of information fingerprint Hashtrie》、《The Research of Anti-plagiarism Monitoring System Model》、《Research on Anti-plagiarism System and the Law of Plagiarism》等6篇相关论文,申请了“基于计算机网络的防转载或/和反剽窃监控方法”(专利号:200610019074.5)、“能加快反剽窃或转载文档检测速度的方法”(专利号:200610166577.5已授权)两项相关专利。

203

社区成员

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

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