zoukankan      html  css  js  c++  java
  • 第一次编程作业

    这个作业属于哪个课程 软件工程
    这个作业要求在哪里 作业要求
    这个作业的目标 实现论文查重算法+单元测试+Git应用,熟悉软件开发流程

    作业代码

    psp表格

    PSP2.1 ( Personal Software Process Stages ) 预估耗时(分钟) 实际耗时(分钟)
    Planning(计划) 30 40
    Estimate(估计这个任务需要多少时间) 30 40
    Development(开发) 1060 1485
    Analysis(需求分析 (包括学习新技术)) 300 480
    Design Spec(生成设计文档) 30 25
    Design Review(设计复审) 60 30
    Coding Standard(代码规范 (为目前的开发制定合适的规范)) 30 30
    Design(具体设计) 90 60
    Coding (具体编码) 200 480
    Coding Review(代码复审) 100 180
    Test(测试(自我测试,修改代码,提交修改)) 250 200
    Reporting(报告 40 30
    Test Report(测试报告) 40 40
    Size Measurement(计算工作量) 10 20
    Postmortem & Process Improvement Plan (事后总结,并提出过程改进计划) 20 20
    合计 1200 1635

    设计步骤

    1. 对文本文件实施分词操作;
    2. 去除不必要的符号;
    3. 提取特征值,计算相似值;
      语言:python
      设计流程图:

    实现步骤

    • LSI模型
      LSI模型是一种简单使用的主题模型,LSI是基于奇异值分解(SVD)的方法来得到文本的主题的。把高维空间中的词和文档向量投影到更低维的空间使之降维并更易于得到两者之间的关系,将在高维空间中没有关系的文本(高维度文本向量不重合),在没有相同的词的情况下也可以用同样的向量进行表达。通过 LSI 模型得到文本主题矩阵之后使用余弦相似度的方法就可以用该矩阵进行文本相似度的计算。
    • 引入的python包
    import jieba#结巴分词
    import re#正则计算去符号
    from gensim import corpora, models, similarities
    #基于LSI模型的相似度计算
    
    • Get_file函数
    def Get_file(doc):#1.文件预处理:读取文本文件,构造分词向量
    ...
    
    • Dis_sig函数
    def Dis_sig(str,stopwords):# 2.去符号及停用字
    ...
    if (re.match(u"[a-zA-Z0-9u4e00-u9fa5]", tags)):# 去符号
    if tags not in stopwords:#去停用字
    ...
    ...
    
    • Com_sim函数
    
    def Com_sim(all_doc_list, doc_test_list):# 3.计算相似值
       text=[all_doc_list, doc_test_list]
       dictionary = corpora.Dictionary(text)#构造语料库
       corpus = [dictionary.doc2bow(doc) for doc in text]
       doc_test_vec = dictionary.doc2bow(doc_test_list)
       lsi = models.LsiModel(corpus)#模型训练
        ...
       similarity = similarities.SparseMatrixSimilarity...#计算相似值
       ...
    
    

    性能改进

    • 最初设计是以TF-IDF模型 对文本相似度进行处理,但是由于TF-IDF模型是用于通过提取关键字以区分文本之间的关系的模型,对于IDF来说,它本身是一种试图抑制噪声的加权,本身倾向于文本中频率小的词,这使得TF-IDF算法的精度不高。故在此基础上修改为LSI模型,将词和文档向量投影到更低维的空间使之降维并更易于得到两者之间的关系。修改后性能如下:

    异常处理

    对于文件的输入输出采取了异常处理,当输入路径出错时会捕获异常,并停止运行。

    测试结果


    main2.py覆盖率为100%,且总体运行时间小于2.5s。

    运行结果

    • orig与orig_0.8_del的对比结果为0.98

    • orig与orig_0.8_dis_15的对比结果为0.94

    • 终端运行结果
      需要4个路径输入,顺序分别为:原文本txt文件,待比较文本txt文件,输出结果的txt文件,停用词的txt文件,

    由图可见,原文本文件与修改后的文本相似度较高,在打乱顺序后相似度仍为0.94,由此可得基于LSI模型求解文本相似度对顺序调整不敏感。

    总结

    1. 由于python包含处理文本的包,能够较好的解决文本难以分解的问题。但由于之前并没有接触过python,通过查询资料和询问同学,可能存在不足,但自己也能够写完python脚本,这次也算是有所突破。
    2. 发现了自己对相关知识了解甚少,仅靠着强大的搜索引擎不断的学习,才能够有思路,代码能力也存在不足,需要之后不断练习来提高。

    待改进

    • 求解结果均高于0.9,由于测试文本是重复度过高,但用其他不相干的文章做检测并也会有较高的相似度,故查重算法还需再改进。
  • 相关阅读:
    Day10 作业
    深浅拷贝
    列表,字符串,字典,元组,集合内置方法
    Notification操作大全
    Recyclerview 顶部悬停 stick
    扩展AutoCompleteTextView让其默认显示一组列表。setThreshold
    获得了Root权限后Read-only file system
    Called attach on a child which is not detached
    CollapsingToolbarLayout Toolbar的title覆盖问题
    【转】Material Design 折叠效果 Toolbar CollapsingToolbarLayout AppBarLayout
  • 原文地址:https://www.cnblogs.com/blockchik/p/13727045.html
Copyright © 2011-2022 走看看