這個作業屬於 | 首頁 - 計科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類
對長語段進行分詞處理
計算詞頻函式
對分開來的所有詞語進行統計,計算在原語段的出現頻率
計算餘弦相似度
將不同的詞出現頻率作為空間向量各個維,所有的詞語出現頻率相乘作為點積,除以倆個語段的模長,求出餘弦值。
程式流程圖
演算法的關鍵有三處:利用cppjie庫分詞處理,統計詞頻,計算餘弦相似度
計算模組介面部分的效能改進
記憶體方面
utf-8字尾檔案由cppjieba分詞庫所呼叫,這些檔案佔據了檔案IO的主要部分
透過減少單詞庫可以減少檔案IO方面的消耗,或者選用模型更下的分詞演算法。
各函式消耗時間
由圖可知,大量的時間消耗在了構建分詞模型上
異常處理說明
讀取檔案介面
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;
}
判斷是否輸入正確的引數