論文查重算法
| 這個作業屬于哪個課程 | 信安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類

- TF-IDF
\[詞頻(TF)=\frac{某個詞在文章中的出現次數}{該文出現次數最多的詞的出現次數}
\]
\[逆文檔頻率(IDF)=\log\frac{語料庫的文檔總數}{包含該詞的文檔數+1}
\]
\[TF-IDF=\times{詞頻(TF)}{逆文檔頻率(IDF)}
\]
- jieba.analyse.textrank
jieba的具體用法
計算模塊接口部分的性能改進
性能分析圖

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

在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,代碼性能分析,覆蓋率分析。