天天看點

第一次個人作業

個人第一次程式設計作業

這個作業屬于哪個課程 班級連結
這個作業要求在哪裡 作業連結
這個作業的目标1 論文查重算法設計
這個作業的目标2 學習PSP表格
這個作業的目标3 單元測試
這個作業的目标4 Profile性能分析
這個作業的目标5 Git管理

代碼連結(Python)

  • 寫在前面的話:本次作業使用Python完成。
  • Github連結
  • 可運作的exe檔案已釋出至倉庫的release包内

PSP表格

PSP2.1 Personal Software Process Stages 預估耗時(分鐘) 實際耗時(分鐘)
Planning 計劃 30 45
· Estimate · 估計這個任務需要多少時間
Development 開發 180 345
· Analysis · 需求分析 (包括學習新技術) 20
· Design Spec · 生成設計文檔 15
· Design Review · 設計複審
· Coding Standard · 代碼規範 (為目前的開發制定合适的規範) 5 10
· Design · 具體設計 50
· Coding · 具體編碼 60 150
· Code Review · 代碼複審
· Test · 測試(自我測試,修改代碼,送出修改)
Reporting 報告 75 85
· Test Repor · 測試報告
· Size Measurement · 計算工作量
· Postmortem & Process Improvement Plan · 事後總結, 并提出過程改進計劃
· 合計 570 945

計算子產品接口的設計與實作過程

整體流程

  1. 建立了一個Text類和兩個函數(get_word_vector和cos_dist)
  2. 建立Text執行個體,調用Text類中的get_word_list函數分割字元串(這裡程式可以選擇兩種分割字元串的方法,一種是調用re包逐字分割,另一種是使用jieba包逐詞分割),并傳回清單
  3. 使用get_word_vector函數将字元清單轉換為向量
  4. 使用餘弦相似度函數(cos_dist)計算兩個字元清單的餘弦相似度

工程截圖

第一次個人作業

一共有三個檔案,main.py檔案,test.py檔案和text.py檔案

1、整體流程

第一次個人作業

2、函數方法

  • main函數:主函數
  • get_word_list函數:将字元串轉換為字元清單
  • get_word_vector 函數:将字元清單轉換為向量
  • cos_dist函數:計算餘弦相似度(核心算法)

3、核心算法

餘弦相似度:

第一次個人作業
第一次個人作業

性能分析

這裡使用專業版pycharm内置的profile進行性能分析

第一次個人作業

容易看出,擷取字元清單向量的操作占了程式大部分的時間(輸入輸出的時間除外)

原因是get_word_vector中擷取向量需要使用雙重for循環:

def get_word_vector(word_list1, word_list2):
    key_word = list(set(word_list1 + word_list2))
    # 給定形狀和類型的用0填充的矩陣存儲向量
    word_vector1 = np.zeros(len(key_word))
    word_vector2 = np.zeros(len(key_word))
    # 計算詞頻
    # 依次确定向量的每個位置的值
    for i in range(len(key_word)):
        # 周遊key_word中每個詞在句子中的出現次數
        for j in range(len(word_list1)):
            if key_word[i] == word_list1[j]:
                word_vector1[i] += 1
        for k in range(len(word_list2)):
            if key_word[i] == word_list2[k]:
                word_vector2[i] += 1
    return word_vector1, word_vector2
           

異常處理與單元測試

1.異常處理說明

第一次個人作業

對每種異常的情況進行提示并且傳回特定的值,友善測試子產品中的assertEqual方法進行驗證

路徑錯誤

第一次個人作業

檔案為空

第一次個人作業

2. test子產品測試

  • 測試正常讀取
  • 測試錯誤讀取
第一次個人作業
第一次個人作業

調用unittest包編寫了10個測試用例,主要對出現不存在路徑和空檔案的情況進行測試。

3.代碼覆寫率

第一次個人作業

結果展示

jieba包逐詞分割

re包逐字分割

繼續閱讀