第一次個人專案

莫放修芦碍月生發表於2024-09-11
這個作業屬於 首頁 - 計科22級12班 - 廣東工業大學 - 班級部落格 - 部落格園 (cnblogs.com)
這個作業要求在哪 個人專案 - 作業 - 計科22級12班 - 班級部落格 - 部落格園 (cnblogs.com)
這個作業的目標 嘗試個人專案的實現,熟悉開發環境

Github專案連結

futureseek/SE-test: SE-test (github.com)

PSP表格

*PSP2.1* *Personal Software Process Stages* *預估耗時(分鐘)* *實際耗時(分鐘)*
Planning 計劃 60 60
· Estimate · 估計這個任務需要多少時間 480 360
Development 開發 120 90
· Analysis · 需求分析 (包括學習新技術) 150 300
· Design Spec · 生成設計文件 60 30
· Design Review · 設計複審 60 30
· Coding Standard · 程式碼規範 (為目前的開發制定合適的規範) 60 45
· Design · 具體設計 120 60
· Coding · 具體編碼 120 100
· Code Review · 程式碼複審 20 20
· Test · 測試(自我測試,修改程式碼,提交修改) 20 30
Reporting 報告 120 150
· Test Repor · 測試報告 120 120
· Size Measurement · 計算工作量 20 20
· Postmortem & Process Improvement Plan · 事後總結, 並提出過程改進計劃 20 30
· 合計 1530 1445

專案設計

主函式

對控制檯引數進行處理,呼叫各個模組程式碼依次進行。

Jieba類

對長語段進行分詞處理

計算詞頻函式

對分開來的所有詞語進行統計,計算在原語段的出現頻率

計算餘弦相似度

將不同的詞出現頻率作為空間向量各個維,所有的詞語出現頻率相乘作為點積,除以倆個語段的模長,求出餘弦值。

image-20240909192431332

程式流程圖

image-20240910162623511

演算法的關鍵有三處:利用cppjie庫分詞處理,統計詞頻,計算餘弦相似度

計算模組介面部分的效能改進

記憶體方面

image-20240910161141960

utf-8字尾檔案由cppjieba分詞庫所呼叫,這些檔案佔據了檔案IO的主要部分

透過減少單詞庫可以減少檔案IO方面的消耗,或者選用模型更下的分詞演算法。

各函式消耗時間

image-20240910170005007

image-20240910170014373

由圖可知,大量的時間消耗在了構建分詞模型上

異常處理說明

讀取檔案介面

void readfile(string& text, string path) {
    ifstream fstream;
    fstream.open(path);
    if (fstream.is_open()) {
        string line;
        while (getline(fstream, line)) {
            //cout<<line<<endl;
            text += line;
        }
    }
    else {
        cout << "Failed to open the file" << endl;
        return;
    }
    //cout<<text<<endl;
    cout << "read over" << endl;
    fstream.close();
}

檢測輸出流是否正確開啟

對於輸出檔案介面做同樣操作

控制檯引數讀取

try {
    if (argc < 4) {
        throw string("the input is error");
    }
}
catch (string e) {
    cout << e << endl;
    return 0;
}

判斷是否輸入正確的引數

相關文章