第二次作業3121001738
這個作業屬於哪個課程 | https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024-dualdegree |
---|---|
這個作業要求在哪裡 | https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024-dualdegree/homework/13147 |
這個作業的目標 | 設計一個論文查重演算法,給出一個原文檔案和一個在這份原文上經過了增刪改的抄襲版論文的檔案,在答案檔案中輸出其重複率。 |
其他參考文獻 | 餘弦演算法,jieba庫 |
git倉庫連結
目錄
- 第二次作業3121001738
- PSP表格
- 程式碼設計
- 效能分析
- 異常處理
PSP表格
PSP2.1 | Personal Software Process Stages | 預計耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
planning | 計劃 | 20 | 35 |
· Estimate | · 估計這個任務需要多少時間 | 650 | 750 |
Development | 開發 | 60 | 90 |
· Analysis | · 需求分析 (包括學習新技術) | 200 | 250 |
· Design Spec | · 生成設計文件 | 30 | 30 |
· Design Review | · 設計複審 | 20 | 25 |
· Coding Standard | · 程式碼規範 (為目前的開發制定合適的規範) | 20 | 35 |
· Design | · 具體設計 | 30 | 60 |
· Coding | · 具體編碼 | 80 | 100 |
· Code Review | · 程式碼複審 | 10 | 20 |
· Test | · 測試(自我測試,修改程式碼,提交修改) | 45 | 60 |
Reporting | 報告 | 20 | 35 |
· Test Repor | · 測試報告 | 10 | 15 |
· Size Measurement | · 計算工作量 | 5 | 10 |
· Postmortem & Process Improvement Plan | · 事後總結, 並提出過程改進計劃 | 10 | 20 |
· 合計 | 645 | 785 |
程式碼設計
- 使用了sys介面來讀檔案,寫檔案
import sys
original_file_path = sys.argv[1]
plagiarized_file_path = sys.argv[2]
output_file_path = sys.argv[3]
- 使用了jieba庫來分詞
def extract_keywords(text):
words = jieba.cut(text)
keywords = [word for word in words if word not in stop_words]
return " ".join(keywords)
- 計算餘弦相似度
def calculate_cosine_similarity(text1, text2):
vectorizer = CountVectorizer().fit_transform([text1, text2])
vectors = vectorizer.toarray()
return cosine_similarity(vectors[0].reshape(1, -1), vectors[1].reshape(1, -1))[0][0]
效能分析
程式碼比較簡單,時間大部分在命令列輸入上,可以考慮一下內建文字可能會更高效一點
異常處理
if len(sys.argv) != 4:
print("Usage: python main.py <original_text_file> <plagiarized_text_file> <output_file>")
sys.exit(1)
else:
print("輸入錯誤")