個人項目:論文查重



這個作業屬於哪個課程 計科國際班軟工
這個作業要求在哪里
作業要求
這個作業的目標 編寫論文查重程序

1.github倉庫:https://github.com/yyya77/3119009472


2.PSP表格:

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

3.計算模塊接口的設計與實現過程:

算法分析:

基於Python jieba分詞的漢明距離進行文本相似度分析
整體思想如下:

關於simhash可參照:淺談simhash及其python實現
原理:
simhash是一種局部敏感hash。我們都知道什么是hash。那什么叫局部敏感呢,假定A、B具有一定的相似性,在hash之后,仍然能保持這種相似性,就稱之為局部敏感hash。
在上文中,我們得到一個文檔的關鍵詞,取得一篇文章關鍵詞集合,又會降低對比效率,我們可以通過hash的方法,把上述得到的關鍵詞集合hash成一串二進制,這樣我們直接對比二進制數,看其相似性就可以得到兩篇文檔的相似性,在查看相似性的時候我們采用海明距離,即在對比二進制的時候,我們看其有多少位不同,就稱海明距離為多少。在這里,我是將文章simhash得到一串64位的二進制,一般取海明距離為3作為閾值,即在64位二進制中,只有三位不同,我們就認為兩個文檔是相似的。當然了,這里可以根據自己的需求來設置閾值。
就這樣,我們把一篇文檔用一個二進制代表了,也就是把一個文檔hash之后得到一串二進制數的算法,稱這個hash為simhash。

由此取權重最高的多個值求出兩篇文章的simhash值再進行比較得到漢明距離,最后通過漢明距離求得兩文件的相似度。
在程序中我定義了五個函數一個類以確保程序正常運行:

部分函數代碼:

jieba分詞

求漢明距離:

算相似率:


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

性能分析圖:






關系圖:


由性能測試可以看到,由於我使用input()來使用戶輸入文件路徑,所以程序運行很大一部分時間取決於用戶輸入路徑的速度,去除手動輸入時間和time.sleep()結果呈現時間,程序運行約762ms,達到作業要求,同時在測試時的結果得出運行總時長也是在0.8s左右。結果如圖下:

反思:可以優化的地方還有很多,比如簡化輸入路徑,如輸入名字即可找到文件,加快程序總運行速度。


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

測試方法:用循環把想得到的情況都遍歷一遍,得出程序覆蓋率

測試的函數有主函數main()以及主函數里面調用的getDistance(),simHash(),string_hash(),similarity()等。

測試數據構造思路以及測試結果:

1.正常運行;

2.輸入的路徑不正確;

3.輸入的路徑正確但是文本文件內無內容;

測試結果:結果將存入文件result.txt內:

程序覆蓋率100%:


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

1.輸入的路徑不正確;

2.輸入的路徑正確但是文本文件內無內容;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM