java實現論文查重

Zcann發表於2024-03-15
這個作業屬於哪個課程 軟體工程2024
這個作業要求在哪裡 個人專案
個人gitte地址 https://gitee.com/zcan86/zcan86
PSP2.1 Personal Software Process Stages 預估耗時(分鐘) 實際耗時(分鐘)
Planning 計劃 60 60
· Estimate · 估計這個任務需要多少時間 60 60
Development 開發 1200 960
· Analysis · 需求分析 (包括學習新技術) 300 360
· Design Spec · 生成設計文件 60 60
· Design Review · 設計複審 30 30
· Coding Standard · 程式碼規範 (為目前的開發制定合適的規範) 30 30
· Design · 具體設計 90 90
· Coding · 具體編碼 360 360
· Code Review · 程式碼複審 60 60
· Test · 測試(自我測試,修改程式碼,提交修改) 240 180
Reporting 報告 240 240
· Test Repor · 測試報告 60 70
· Size Measurement · 計算工作量 60 60
· Postmortem & Process Improvement Plan · 事後總結, 並提出過程改進計劃 120 120

| · 合計 | | 1320 | 1680 |

1.模組介面的設計與實現

設計思路:利用Hamming與SimHash,透過將文字轉換為字串來實現關鍵詞提取與SimHash計算,最後透過Hamming求距離及相似度。
由此可設計4個函式:1,文字的提取與轉換為字串 2,simhash的計算函式 3,海明距離的計算函式 4,特殊文字的處理

2.模組介面部分的效能改進

在進行相似度計算之前,對文字進行預處理,如去除停用詞、標點符號、轉換為小寫等,以減少計算量並提高準確性。

3.模組部分單元測試展示

這是海明距離計算的程式碼

public class HammingUtils {
// 輸入兩個simHash值,計算它們的海明距離
public static int getHammingDistance(String simHash1, String simHash2) {
int distance = 0;
if (simHash1.length() != simHash2.length()) {
// 出錯,返回-1
distance = -1;
} else {
for (int i = 0; i < simHash1.length(); i++) {
// 每一位進行比較
if (simHash1.charAt(i) != simHash2.charAt(i)) {
distance++;
}
}
}
return distance;
}
// 輸入兩個simHash值,輸出相似度
public static double getSimilarity(String simHash1, String simHash2) {
// 透過 simHash1 和 simHash2 獲得它們的海明距離
int distance = getHammingDistance(simHash1, simHash2);
// 透過海明距離計算出相似度,並返回
return 0.01 * (100 - distance * 100 / 128);
}

下圖是覆蓋率

4.異常處理

有一些關鍵字無法提取,透過第四個類實現無障礙執行。

相關文章