第一次個人作業
這個作業屬於哪個課程 | 課程連結https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024 |
---|---|
這個作業要求在哪裡 | 作業要求連結 https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024/homework/13136 |
這個作業的目標 | 完成個人專案並上傳至GitHub |
GitHub地址: https://github.com/3484734610/3122004501
psp表格
PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
Planning | 計劃 | 60 | 90 |
· Estimate | · 估計這個任務需要多少時間 | 60 | 60 |
Development | 開發 | 610 | 730 |
· Analysis | · 需求分析 (包括學習新技術) | 120 | 120 |
· Design Spec | · 生成設計文件 | 60 | 60 |
· Design Review | · 設計複審 | 40 | 20 |
· Coding Standard | · 程式碼規範 (為目前的開發制定合適的規範) | 20 | 20 |
· Design | · 具體設計 | 120 | 180 |
· Coding | · 具體編碼 | 180 | 240 |
· Code Review | · 程式碼複審 | 60 | 60 |
· Test | · 測試(自我測試,修改程式碼,提交修改) | 30 | 30 |
Reporting | 報告 | 90 | 90 |
· Test Repor | · 測試報告 | 30 | 30 |
· Size Measurement | · 計算工作量 | 30 | 30 |
· Postmortem & Process Improvement Plan | · 事後總結, 並提出過程改進計劃 | 30 | 30 |
· 合計 | 780 | 910 |
需求分析
題目:論文查重
描述如下:
設計一個論文查重演算法,給出一個原文檔案和一個在這份原文上經過了增刪改的抄襲版論文的檔案,在答案檔案中輸出其重複率。
原文示例:今天是星期天,天氣晴,今天晚上我要去看電影。
抄襲版示例:今天是周天,天氣晴朗,我晚上要去看電影。
要求輸入輸出採用檔案輸入輸出,規範如下:
從命令列引數給出:論文原文的檔案的絕對路徑。
從命令列引數給出:抄襲版論文的檔案的絕對路徑。
從命令列引數給出:輸出的答案檔案的絕對路徑。
我們提供一份樣例,課堂上下發,上傳到班級群,使用方法是:orig.txt是原文,其他orig_add.txt等均為抄襲版論文。
注意:答案檔案中輸出的答案為浮點型,精確到小數點後兩位
1.1、整體流程
1.2、類
MainPaperCheck:main 方法所在的類
HammingUtils:計算海明距離的類
SimHashUtils:計算 SimHash 值的類
TxtIOUtils:讀寫 txt 檔案的工具類
ShortStringException:處理文字內容過短的異常類
1.3、核心演算法
simhash+海明距離
具體可參考:
SimHash 原理與實現
2、介面的設計和實現
2.1、讀寫 txt 檔案的模組
類:TxtIOUtils
包含了兩個靜態方法:
1、readTxt:讀取txt檔案
2、writeTxt:寫入txt檔案
實現:都是呼叫 Java.io 包提供的介面,比較簡單,這裡省略。
2.2、SimHash 模組(核心模組)
類:SimHashUtils
包含了兩個靜態方法:
1、getHash:傳入String,計算出它的hash值,並以字串形式輸出,(使用了MD5獲得hash值)
2、getSimHash:傳入String,計算出它的simHash值,並以字串形式輸出,(需要呼叫 getHash 方法)
getSimHash 是核心演算法
2.3、main 主模組
main 方法的主要流程:
從命令列輸入的路徑名讀取對應的檔案,將檔案的內容轉化為對應的字串
由字串得出對應的 simHash值
由 simHash值求出相似度
把相似度寫入最後的結果檔案中
退出程式
3、介面部分的效能改進
3.1、效能分析
Overview
方法的呼叫情況
從分析圖可以看到:
呼叫次數最多的是com.hankcs.hanlp包提供的介面, 即分詞、取關鍵詞與計算詞頻花費了最多的時間。
4、單元測試
4.1、讀寫 txt 檔案的模組 的測試
基本思路:
1、測試正常讀取
2、測試正常寫入
3、測試錯誤讀取
4、測試錯誤寫入
4.2、主測試 MainTest程式碼
4.3結果檔案: