這個作業屬於哪個課程 | 軟體工程2024 |
---|---|
這個作業的要求在哪裡 | 作業要求的連結 |
這個作業的目標 | 瞭解個人專案開發流程,學習在GitHub上傳程式碼檔案, |
GitHub連結
需求
題目:論文查重
設計一個論文查重演算法,給出一個原文檔案和一個在這份原文上經過了增刪改的抄襲版論文的檔案,在答案檔案中輸出其重複率。
- 原文示例:今天是星期天,天氣晴,今天晚上我要去看電影。
- 抄襲版示例:今天是周天,天氣晴朗,我晚上要去看電影。
要求
- 從命令列引數給出:論文原文的檔案的絕對路徑。
- 從命令列引數給出:抄襲版論文的檔案的絕對路徑。
- 從命令列引數給出:輸出的答案檔案的絕對路徑。
計算模組介面的設計與實現過程
用python的庫來簡化開發流程,如jieba,sklearn,re等
jieba
利用jieba對中文進行分詞用於計算文字相似度用處很大,支援四種分詞模式
sklearn
餘弦相似度在計算文字相似度等問題中有著廣泛的應用,scikit-learn中提供了方便的呼叫方法
re
去除文字中的標點符號、空格和換行符,是文字在計算餘弦相似度時更精準
呼叫邏輯
程式的主要邏輯為 讀取檔案路徑->讀取檔案文字並去除標點符號->將文字轉化為向量->計算餘弦相似度->返回值以兩位小數百分比的格式寫入輸出檔案
計算模組介面的效能
透過VizTracer來測試效能
程式總執行用時為 1 s 138 ms 270 us 600 ns
其中tokenize模組兩次呼叫用時分別為 414 ms 670 us 400 ns 和 60 ms 218 us 40 ns
效能較低
改進方法
- jieba呼叫jieba.cut()方法的效能較低,可以尋找更高效的分詞方法,或者新增停用詞減少程式工作量
計算模組測試
測試思路
逐個模組測試功能是否正常執行,最後建立臨時檔案測試輸出結果是否符合預期
分詞函式展示
def tokenize(text):
return list(jieba.cut(deletepunct(text)))
分詞模組測試程式碼
def test_tokenize(self):#測試簡單文字的分詞
txt="廣東工業大學軟體工程"
expected_result=['廣東','工業','大學','軟體工程']
result=tokenize(txt)
self.assertEqual(result,expected_result)
coverage工具檢驗
測試覆蓋率基本為100%,未測試部分以做好異常處理
異常處理
當輸入路徑有誤是,會自動退出並列印使用指導
if len(sys.argv) != 4:
print("輸入格式為: python main.py <原文路徑> <對比文路徑> <輸出路徑>")
sys.exit(1)
PSP
PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
Planning | 計劃 | 60 | 80 |
Estimate | 估計這個任務需要多少時間 | 60 | 60 |
Development | 開發 | 120 | 180 |
Analysis | 需求分析 (包括學習新技術) | 60 | 90 |
Design Spec | 生成設計文件 | 30 | 20 |
Design Review | 設計複審 | 20 | 30 |
Coding Standard | 程式碼規範 (為目前的開發制定合適的規範) | 30 | 40 |
Design | 具體設計 | 60 | 90 |
Coding | 具體編碼 | 100 | 180 |
Code Review | 程式碼複審 | 30 | 40 |
Test | 測試(自我測試,修改程式碼,提交修改) | 30 | 60 |
Reporting | 報告 | 30 | 50 |
Test Report | 測試報告 | 30 | 20 |
Size Measurement | 計算工作量 | 20 | 20 |
Postmortem & Process Improvement Plan | 事後總結, 並提出過程改進計劃 | 30 | 30 |
總計 | 710 | 990 |