zoukankan      html  css  js  c++  java
  • 第一次个人项目作业

    第一次个人项目作业

    python实现简单论文查重

    这个作业属于哪个课程 课程链接
    作业要求 作业要求
    这个作业的目标 论文查重
    github项目地址:https://github.com/wptr-777/3119005439

    词句解析

    使用jieba分词库,可以对中文进行分词处理,具体可参照github

    import jieba
    seg_list = jieba.cut("他来自中国")
    print(", ".join(seg_list))
    

    运行结果

    image

    读取文件内容

    读取文件中的内容

    def get_file(path):
        content = ''
        with open(path) as fd:
            content = fd.read()
        return content
    

    过滤特殊符号

    使用正则表达式过滤特殊符号,再用jieba分词

    def filter_string(string):
        my_re = re.compile(u"[^a-zA-Z0-9u4e00-u9fa5]")
        string = my_re.sub("", string)
        result = jieba.lcut(string)
        return result
    

    计算相似度

    使用gensim库计算余弦相似度,实现方法如下

    def calc_similarity(text1,text2):
        texts=[text1,text2]
        dictionary = gensim.corpora.Dictionary(texts)
        corpus = [dictionary.doc2bow(text) for text in texts]
        similarity = gensim.similarities.Similarity('-Similarity-index', corpus, num_features=len(dictionary))
        test_corpus_1 = dictionary.doc2bow(text1)
        cosine_sim = similarity[test_corpus_1][1]
        return cosine_sim
    

    代码实现

    import gensim
    import jieba
    import re
    import sys
    
    
    def get_file(path):
        with open(path) as fd:
            content = fd.read()
        return content
    
    
    def filter_string(string):
        my_re = re.compile(u"[^a-zA-Z0-9u4e00-u9fa5]")
        string = my_re.sub("", string)
        result = jieba.lcut(string)
        return result
    
    
    def calc_similarity(text1, text2):
        texts = [text1, text2]
        dictionary = gensim.corpora.Dictionary(texts)
        corpus = [dictionary.doc2bow(text) for text in texts]
        similarity = gensim.similarities.Similarity('-Similarity-index', corpus, num_features=len(dictionary))
        test_corpus_1 = dictionary.doc2bow(text1)
        cosine_sim = similarity[test_corpus_1][1]
        return cosine_sim
    
    
    def main():
        try:
            #        path1 = "../test_txt/orig.txt"
            #        path2 = "../test_txt/orig_0.8_add.txt"
            #        save_path = "../result.txt"
            path1 = sys.argv[1]  # 论文原文的文件的绝对路径
            path2 = sys.argv[2]  # 抄袭版论文的文件的绝对路径
            save_path = sys.argv[3]  # 输出结果绝对路径
            text1 = filter_string(get_file(path1))
            text2 = filter_string(get_file(path2))
            similarity = calc_similarity(text1, text2)
            print("文章相似度: %.4f" % similarity)
            fd = open(save_path, 'w')
            fd.write("文章相似度: %.4f" % similarity)
            fd.close()
            result = round(similarity.item(), 2)  # 取小数点后两位
        except Exception as e:
            print(e)
        finally:
            return result
    
    
    
    if __name__ == '__main__':
        main()
    
    

    运行结果

    image-20210919194747427

    文章相似度99%

    单元测试

    此处使用unittest库用于单元测试,新建unit_test.py用于单元测试

    unit_test.py

    import unittest
    from main import main
    
    
    class MyTestCase(unittest.TestCase):
        def my_test(self):
            self.assertEqual(main(), 0.99)  # 预测运行结果
    
    
    if __name__ == '__main__':
        unittest.main()
    

    image-20210919201308036

    预测结果正确

    此处可更换论文路径对余下样例,进行测试

    代码覆盖率

    使用python库coverage生成代码覆盖率报告

    image-20210919204200581

    使用如下命令生成网页版代码覆盖率报告

    coverage html -d report
    

    使用浏览器查看

    没有被覆盖的地方都是异常处理部分的代码

    image-20210919204112394

    性能分析

    使用pycharm的插件进行性能分析

    image-20210919205437325

    异常处理

    image-20210919210812132

    对于参数不合理的情况,进行异常处理

        except Exception as e:
            print(e)
    

    PSP表格记录

    PSP Personal Software Process 预估耗时(分钟) 实际耗时(分钟)
    Planning计划 计划 120 150
    Estimate · 估计这个任务需要多少时间 120 150
    Development 开发 480 300
    · Analysis · 需求分析 (包括学习新技术) 120 100
    · Design Spec · 生成设计文档 30 10
    · Design Review · 设计复审 30 10
    · Coding Standard · 代码规范 (为目前的开发制定合适的规范) 20 5
    · Design · 具体设计 10 5
    · Coding · 具体编码 120 120
    · Code Review · 代码复审 20 5
    · Test · 测试(自我测试,修改代码,提交修改) 20 20
    Reporting 报告 30 20
    · Test Repor · 测试报告 20 10
    · Size Measurement · 计算工作量 5 5
    · Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 5 5
    Total 总计 1150 915
  • 相关阅读:
    坐火车/长途汽车去
    图书管理系统设计
    电梯演说模板练习
    敏捷开发
    团队形式
    android app demo
    classic code review
    code review
    阅读思考
    单元测试
  • 原文地址:https://www.cnblogs.com/z2yh/p/15312913.html
Copyright © 2011-2022 走看看