第二次作業——論文查重

3121001738發表於2024-03-18

第二次作業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("輸入錯誤")