复制代码

第一次编程作业

论文查重

一、GitHub的链接

二、计算模块接口的设计与实现过程

  • 首先,说明我使用的算法:

    • 一开始看到这个作业我就想到了Python,然后我去搜索了一下用Python求文本相似度的常用算 法,当然,我选择了大部分人都选择了的jieba算法、gensim算法。最后用了TF-IDF这个模型
    • 关于jieba算法jieba库
    • 关于gensim算法gensim库
    • 关于TF-IDF模型TF-IDF模型
  • 然后,说明我的设计思路:

    我的思路就是非常常见的: 先读入文本-->文本分词-->建立模型-->利用稀疏矩阵进行文本相似度计算-->格式化输出

  • 现在,来看看我各个模块的代码:

    • 最开始的输入,我用的是sys库的自定义参数输入sys.argv[],然后,建立停用词,为常用的中文符号,最后进行分词,先对原文本进行分词,分词后存为list,代码如下:

      str1_list=[] 
      for line in str1:
          str1_words=' '.join(jieba.cut(line)).split(' ')
          doc_txt=[]
          for word in str1_words:
          	if word not in stop_words: #查看有没有停用词
              	doc_txt.append(word)
          str1_list.append(doc_txt)
      
    • 然后是用tf-idf模型的代码部分:

      #对原文进行处理,形成词袋
      dictionary=corpora.Dictionary(str1_list)
      #对词袋中的词进行编号
      dictionary.keys()
      #使用doc2bow制作语料库
      corpus=[dictionary.doc2bow(word) for word in str1_list]
      #对测试文档也进行制作语料库
      test_words_vec=dictionary.doc2bow(str2_list)
      #利用tfidf模型对语料库建模
      tfidf=models.TfidfModel(corpus)
      #对每个目标文档,分析测试文档的相似度			index=similarities.SparseMatrixSimilarity(tfidf[corpus],num_features=len(dictionary.keys()))
      sim=index[tfidf[test_words_vec]]
      
    • 整个代码具体也没有独到之处,基本上都是Python用来做自然语言处理常用的几个库

三、运行结果

我的测试代码如下:

    #输入原文本
    str0=call_input(sys.argv[1])
    
    #依次输入sim_0.8里的其他待测文本
    str1=call_input(sys.argv[2])
    creat_main(str0,str1)

    str2=call_input(sys.argv[3])
    creat_main(str0,str2)
    
    str3=call_input(sys.argv[4])
    creat_main(str0,str3)
    
    str4=call_input(sys.argv[5])
    creat_main(str0,str4)
    
    str5=call_input(sys.argv[6])
    creat_main(str0,str5)

    str6=call_input(sys.argv[7])
    creat_main(str0,str6)
    
    str7=call_input(sys.argv[8])
    creat_main(str0,str7)
    
    str8=call_input(sys.argv[9])
    creat_main(str0,str8)
    
    str9=call_input(sys.argv[10])
    creat_main(str0,str9)

测试结果:

四、PSP表格

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

五、反思与总结

  1. 虽然说之前有学过Python,但是因为已经很久没用了,对Python还是比较生疏了,所以还是要多练练。
  2. 在学算法的时候花的时间太多了,一直拖到ddl才搞好,学习效率不够高
posted on 2020-09-17 21:57  爱吃糖的沭  阅读(180)  评论(0编辑  收藏  举报