https://github.com/caiwx123/Caiwx123/tree/main/031902501
一、PSP表格
PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
Planning | 計劃 | 10 | |
· Estimate | · 估計這個任務需要多少時間 | ||
Development | 開發 | 730 | 910 |
· Analysis | · 需求分析 (包括學習新技術) | 300 | 360 |
· Design Spec | · 生成設計文檔 | ||
· Design Review | · 設計複審 | ||
· Coding Standard | · 代碼規範 (為目前的開發制定合适的規範) | ||
· Design | · 具體設計 | ||
· Coding | · 具體編碼 | 180 | 240 |
· Code Review | · 代碼複審 | 30 | |
· Test | · 測試(自我測試,修改代碼,送出修改) | ||
Reporting | 報告 | ||
· Test Repor | · 測試報告 | ||
· Size Measurement | · 計算工作量 | ||
· Postmortem & Process Improvement Plan | · 事後總結, 并提出過程改進計劃 | ||
· 合計 | 770 | 950 |
二、計算子產品接口
(3.1)計算子產品接口的設計與實作過程。設計包括代碼如何組織,比如會有幾個類,幾個函數,他們之間關系如何,關鍵函數是否需要畫出流程圖?說明你的算法的關鍵(不必列出源代碼),以及獨到之處。(18')
一共有兩個類
第一個類為結點類,就是單純的設定結點的一些屬性
第二個類為AC機類,其中包括四個函數,其中前3個是關鍵函數,其中最關鍵的是函數1。
函數1:ac_build(f)用于從檔案路徑f中讀出敏感詞檔案并建立ac自動機,其中在建立樹時一個敏感詞的單個中文我是建了不止一個結點例如 ’法‘字我建成了 ‘fa’ 與 ‘f’->'a',這樣就可以将原文中的中文搜尋與英文單詞的搜尋分開可防止将中文與英文字母混起來造成一些錯誤例如:’’白吃‘‘與’’b愛吃‘‘如果不加入中文的全拼音結點的話這兩個詞将被認為是一樣的。
函數2:search(f)用于從檔案路徑f中找尋敏感詞
函數3:out_f(out_file)向檔案路徑out_file所對的檔案中輸出答案
函數4:c_pinyin(c)将中文轉成拼音
函數5:put_in(j, word, word_in_txt)将敏感詞及一些需要輸出的東西存儲起來
(3.2)計算子產品接口部分的性能改進。記錄在改進計算子產品性能上所花費的時間,描述你改進的思路,并展示一張性能分析圖(由VS 2019、JProfiler或者Jetbrains系列IDE自帶的Profiler的性能分析工具自動生成),并展示你程式中消耗最大的函數。(12')
改進之前的性能如下圖,可以看到使用pypinyin進行中文轉拼音竟然是耗時最多的函數,是以我對他進行了改進。
通過在AC機的類中定義一個字典pinyin用于存儲已經翻譯過的字及其他所對應的拼音這樣就可以方法對于一個詞反複的去進行調用pypinyin(),改進之後pypinyin的耗時從0.038s下降到了0.011s,而消耗最大的函數也變為了 search()敏感詞搜尋函數。
(3.3)計算子產品部分單元測試展示。展示出項目部分單元測試代碼,并說明測試的函數,構造測試資料的思路。并将單元測試得到的測試覆寫率截圖,發表在部落格中。(12')
(3.4)計算子產品部分異常處理說明。在部落格中詳細介紹每種異常的設計目标。每種異常都要選擇一個單元測試樣例釋出在部落格中,并指明錯誤對應的場景。(6')
異常1:用于解決檔案的讀取異常
樣例1:
異常2:用于解決指令行輸入參數個數不對
三、心得
(4.1)在完成本次作業過程的心得體會(3')
1.學習了AC自動機算法