軟工第三次作業
阿新 • • 發佈:2018-09-21
效果 包裝 文檔 國家 文本 詞頻統計 沒有 and 摘要
軟工1816 · 第三次作業 - 結對項目1
非常無敵超級優秀的結對隊友(感謝他帶我飛,這是真心的話):樂忠豪
- 他這次博客作業戳這裏
- github戳這裏
- PDF戳這裏
原型模型
原型模型設計工具:Axure RP 8.0
- 模型首頁:
功能說明:- 選擇文件:可從本地磁盤中選取論文列表文件用作查詢
- search按鈕/update data按鈕:在選擇文件之後點擊search按鈕可將爬取到的數據展示在下面的文本框中
hot words按鈕/trend of hot words按鈕:在search按鈕按下後使用,功能分別為呈現熱詞和近三年的熱詞趨勢
設計文檔
1.背景
小櫻是一名大三的學生,一直癡迷於吃雞類遊戲,某日聽聞同宿舍的小狼剛和導師去參加了CVPR會議,內心羨慕不已,便下定決心痛改前非、努力鉆研,希望能在畢業前完成一篇站在時代前沿的優秀論文。但令人苦惱的是,他不知道近幾年頂會的熱門領域和研究方向,根據論文list去一篇一篇查找總結效率又著實太低,於是求助於“軟工實踐互助愛心組織”,希望我們能幫助他設計一個平臺解決現階段的需求。
2.設計目標
- 2.1需求分析
- 用戶給定一個論文列表
- 1.要求實現通過論文列表爬取論文的題目、摘要以及原文鏈接。
- 2.可實現對論文列表的增刪改操作(今年、近兩年、近三年)。
- 對爬取的信息進行結構化處理,分析top10個熱門領域或熱門研究方向
- 1.可對論文屬性(oral、spotlight、poster)進行篩選及分析。
- 2.形成如熱詞圖譜之類直觀的查看方式。
- 可進行論文檢索,當用戶輸入論文編號、題目、作者等基本信息,分析返回相關的paper、source code、homepage等信息。
- 可對多年間、不同頂會的熱詞呈現熱度走勢對比(這裏將範疇限定在計算機視覺的三大頂會CVPR、ICCV、ECCV內)。
- 可進行數據統計,例如每個國家錄用文章的分析、每個學校錄用文章的分析、哪個學校哪方面的研究方向比較強等。
- 附加需求:
在不改變設計理念、符合用戶使用習慣的前提下,在上述需求的基礎上進行擴充升級,或發揮想象能力為原型添加自己的idea。
- 用戶給定一個論文列表
- 2.2性能指標
- 從需求來看,最主要的時間耗費在爬去論文信息以及存儲論文結構體上,用戶的目標體量在9000篇論文左右(3年的論文3大頂會每大頂會1000篇)。論文題目不超過200個字符,總體量為200W字符。
- 1.完成全部論文標題遍歷及存儲需5s的響應時間。
- 2.(爬取時間待檢測)
- 3.檢索論文題目及相應信息、形成熱詞圖譜的時間各在1s內。
4.添加功能可以通過論文編號、論文關鍵詞查找相關論文。
3.模塊設計
- 3.1模塊流程圖及說明
- 設計實現流程如下:
通過用戶給定的論文列表從網頁上爬去論文信息(論文編號、作者、原文鏈接等) - 使用C++數據結構以及map<string,class>容器存儲爬去到的論文信息
- 通過map容器實現數據檢索,熱詞統計(添加通過文章關鍵詞檢索相關文章的功能)以及數據分析
- 將統計結果以圖像的形式展現出來
- 設計實現流程如下:
- 3.2數據結構說明
//偽代碼
論文類:
{
屬性:
論文ID;論文題目;論文摘要;論文年份;論文作者;論文屬性(oral、spotlight、poster);關鍵詞(用作詞頻統計);type(表明屬於哪一個會議)
成員函數:
獲取類屬性的各個值;
};
- 3.3算法描述
- 首先使用python編寫爬蟲內嵌至C++中,將得到的數據存儲於文件中,對文件遍歷存儲於map容器中(基於key,value值存儲功能)
- 通過map容器的紅黑二叉樹進行數據查詢訪問,作出詞頻統計分析,以及檢索篩選算法。
- 3.4與其它模塊的接口
- 1.爬蟲接口
- 2.類接口
- 3.5異常處理
- 1.讀取論文列表失敗。
- 2.爬取論文信息失敗。
- 3.讀入爬取數據失敗。
- 4.論文列表中無用戶輸入的論文標題。
- 3.6測試考慮
- 單元測試:爬蟲測試,類讀取信息測試,詞頻統計排序測試
- 集成測試:測試能否得到預期需求的效果
測試工具:Visual Studio 2017
4.系統集成包裝
將系統包裝成一個擁有界面的windows窗體軟件
5.文檔總結
我們的產品“爬爬樂”是為了方便用戶獲取批量論文信息,他們需要通過給定的論文列表獲取想要得到的信息以及相應的檢索統計功能,但現有的產品並沒有很好地解決這些需求,我們有獨特的批量獲取網頁信息的方法,它們能極大地方便用戶查找論文以及更清晰地呈現出總體論文的研究走勢方向。
遇到的問題及解決方法
- 問題:論文信息的獲取
- 應對方式:百度python爬蟲嵌入C++的做法
- 問題:熱詞的統計
- 應對方式:個人作業1的詞頻統計
- 問題:信息的存儲處理及分析
- 應對方式:使用文件處理數據,構造相應數據結構進行統計分析
PSP表格
PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
Planning | 計劃 | 90 | 120 |
· Estimate | · 估計這個任務需要多少時間 | 90 | 120 |
Development | 開發 | 310 | 440 |
· Analysis | · 需求分析 (包括學習新技術) | 180 | 240 |
· Design Spec | · 生成設計文檔 | 60 | 90 |
· Design Review | · 設計復審 | 10 | 20 |
· Coding Standard | · 代碼規範 (為目前的開發制定合適的規範) | 0 | 0 |
· Design | · 具體設計 | 60 | 90 |
· Coding | · 具體編碼 | 0 | 0 |
· Code Review | · 代碼復審 | 0 | 0 |
· Test | · 測試(自我測試,修改代碼,提交修改) | 0 | 0 |
Reporting | 報告 | 25 | 40 |
· Test Repor | · 測試報告 | 0 | 0 |
· Size Measurement | · 計算工作量 | 5 | 10 |
· Postmortem & Process Improvement Plan | · 事後總結, 並提出過程改進計劃 | 20 | 30 |
合計 | 425 | 600 |
結對過程及照片
- 和樂忠豪同學進行需求的討論,起先對需求如何實現還是一知半解,於是各自進行學習,再查找完資料的基礎上繼續對目標進行討論,在多次的分析討論可行性後,才確定了現在的實現方法。結對還是非常有用的,能發現彼此的不足之處,相互促進,相互進步。
- 醜照如下:
學習進度條 (每周更新)
第N周 | 新增代碼(行) | 累計代碼(行) | 學習小時數(小時) | 累計學習小時數(小時) | 重要成長 |
---|---|---|---|---|---|
1 | 100 | 100 | 15 | 15 | 學習了C++嵌入python的方法;Axure原型設計的方法 |
軟工第三次作業