個人專案_查重
軟體工程 | 19網工34班 |
---|---|
作業要求: 1.在Github倉庫中新建一個學號為名的資料夾 2.在開始實現程式之前,在PSP表格記錄下在程式開發各個步驟耗費時間,實現程式後,在PSP表格記錄各個模組上實際花費時間 3.語言不限,實現程式後將程式碼釋出到Github倉庫的realease中 4.提交的程式碼要求經過Code Quality Analysis工具分析並消除所有警告 5.完成專案首個版本之後,使用效能分析工具StudioProfiling Tools找出程式碼效能瓶頸 6.使用Github來管理原始碼和測試用例,程式碼有進展即簽入Github 7.使用單元測試對專案進行測試,並使用外掛檢視測試分支覆蓋率等指標 | 作業要求連結 |
GitHub連結
一、PSP表格
PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
Planning | 計劃 | ||
· Estimate | · 估計這個任務需要多少時間 | 960 | 1180 |
Development | 開發 | ||
· Analysis | · 需求分析 (包括學習新技術) | 200 | 400 |
· Design Spec | · 生成設計文件 | 60 | 90 |
· Design Review | · 設計複審 | 30 | 20 |
· Coding Standard | · 程式碼規範 (為目前的開發制定合適的規範) | 30 | 20 |
· Design | · 具體設計 | 250 | 200 |
· Coding | · 具體編碼 | 200 | 200 |
· Code Review | · 程式碼複審 | 30 | 40 |
· Test | · 測試(自我測試,修改程式碼,提交修改) | 100 | 120 |
Reporting | 報告 | ||
· Test Repor | · 測試報告 | 20 | 30 |
· Size Measurement | · 計算工作量 | 20 | 30 |
· Postmortem & Process Improvement Plan | · 事後總結, 並提出過程改進計劃 | 20 | 30 |
· 合計 | 960 | 1180 |
二、整體流程
類
PaperCheckerMain:main 方法所在的類
HammingUtils:計算海明距離的工具類
SimHashUtils:計算 SimHash 值的工具類
TxtIO:讀寫 txt 檔案的類
ShortTxtException:處理短文字的異常類
核心演算法
simhash+海明距離
具體可參考:
通過查閱資料,得到論文查重可以運用simhash和海明距離來判斷,得到學習路徑部落格。使用simhash以及海明距離判斷內容相似程度
要把文章變為數字計算才能提高相似度計算效能。中文分詞器hankcs/HanLP.github
三、介面的設計和實現
讀寫 txt 檔案的模組
類:TxtIO
包含了兩個靜態方法:
1、readTxt:讀取txt檔案
2、writeTxt:寫入txt檔案
實現:都是呼叫 Java.io 包提供的介面。
SimHash 模組(核心模組)
類:SimHashUtils
包含了兩個靜態方法:
1、getHash:傳入String,計算出它的hash值,並以字串形式輸出,(使用了MD5獲得hash值)
2、getSimHash:傳入String,計算出它的simHash值,並以字串形式輸出,(需要呼叫 getHash 方法)
getSimHash 是核心演算法,主要流程如下:
1、分詞(使用了外部依賴 hankcs 包提供的介面)
2、獲取 hash 值
3、加權、合併
4、降維
海明距離模組
類:HammingUtils
包含了兩個靜態方法:
1、getHammingDistance:輸入兩個 simHash 值,計算出它們的海明距離 distance
2、getSimilarity:輸入兩個 simHash 值,呼叫 getHammingDistance 方法得出海明距離 distance,在由 distance 計算出相似度。
main 主模組
四、效能分析
Overview
方法呼叫情況
首次測試
明顯看到float佔用運算太多,修改一下演算法,用int代替
修改後測試
修改後效能上基本沒有需要提升的
五、測試
在IDEA上即可傳參:
正常文字測試:
短文字測試:
結果輸出檔案:
總結
在命令列傳參總是編譯不成功,後來才直接在IDEA裡面傳參,也挺方便的。