1. 程式人生 > 其它 >個人專案_查重

個人專案_查重

軟體工程 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裡面傳參,也挺方便的。