論文查重算法

這個作業屬于哪個課程 信安1912
這個作業要求在哪里 個人項目要求
這個作業的目標 設計論文查重算法,學習PSP+單元測試+性能分析+git管理代碼

Github鏈接:

https://github.com/mightbealie/3219005443

PSP表格

PSP2.1 Personal Software Process Stages 預估耗時(分鐘) 實際耗時(分鐘)
Planning 計劃 90 90
· Estimate · 估計這個任務需要多少時間 30 30
Development 開發 710 810
· Analysis · 需求分析 (包括學習新技術) 100 120
· Design Spec · 生成設計文檔 40 30
· Design Review · 設計復審 40 40
· Coding Standard · 代碼規范 (為目前的開發制定合適的規范) 10 10
· Design · 具體設計 90 80
· Coding · 具體編碼 300 400
· Code Review · 代碼復審 30 30
· Test · 測試(自我測試,修改代碼,提交修改) 100 100
Reporting 報告 50 70
· Test Report · 測試報告 20 40
· Size Measurement · 計算工作量 10 10
· Postmortem & Process Improvement Plan · 事后總結, 并提出過程改進計劃 20 20
· 合計 850 970

模塊接口的設計與實現過程

主模塊

獲取路徑下文件內容,輸出相似度

Analyse類

Analyse

  • TF-IDF

\[詞頻(TF)=\frac{某個詞在文章中的出現次數}{該文出現次數最多的詞的出現次數} \]

\[逆文檔頻率(IDF)=\log\frac{語料庫的文檔總數}{包含該詞的文檔數+1} \]

\[TF-IDF=\times{詞頻(TF)}{逆文檔頻率(IDF)} \]

計算模塊接口部分的性能改進

性能分析圖

注意到答案輸出中有這個問題,雖然不影響答案輸出,但改進后可以使總體耗時降低

在import jieba庫時加入以下這句

import jieba.analyse
jieba.setLogLevel(jieba.logging.INFO)

計算模塊部分單元測試展示

單元測試結果

文本1 文本2 相似度
orig.txt orig_0.8_add.txt 0.85
orig.txt orig_0.8_del.txt 0.75
orig.txt orig_0.8_dis_1.txt 0.90
orig.txt orig_0.8_dis_10.txt 0.70
orig.txt orig_0.8_dis_15.txt 0.65

覆蓋率

計算模塊部分異常處理說明

如果在輸入路徑時輸入錯誤,會導致程序錯誤運行。需要在開始計算前判斷程序是否存在,若存在才繼續計算,若不存在則結束程序。

  • 引入 os.path.exists檢查文件路徑是否存在
  • 在main_test中加入以下代碼
    if not os.path.exists(path1) :
        print("論文原文文件不存在!")
        exit()
    if not os.path.exists(path2):
        print("抄襲版論文文件不存在!")
        exit()

自我總結

在這次項目完成中遇到了比較大的困難,由于在代碼簽入的過程中存在障礙,簽入過程不太順利,于是是在所有代碼完成后一次性簽入。
本次作業還是讓我收獲到了很多,比如學會了PSP,代碼性能分析,覆蓋率分析。