福大軟工1816 · 第五次做業 - 結對做業2

博客連接:http://www.cnblogs.com/SoundOfSilence/

github項目地址:https://github.com/BenjaminAlvis/pair-project/commits/master

具體分工:

基本功能部分:王彬前端

附加題部分:葛亮python

PSP表格:

PSP2.1 Personal Software Process Stages 預估耗時(分鐘) 實際耗時(分鐘)
Planning 計劃 40 40
· Estimate · 估計這個任務須要多少時間 1000 800
Development 開發 400 400
· Analysis · 需求分析 (包括學習新技術) 400 400
· Design Spec · 生成設計文檔 20 20
· Design Review · 設計複審 40 40
· Coding Standard · 代碼規範 (爲目前的開發制定合適的規範) 20 0
· Design · 具體設計 400 400
· Coding · 具體編碼 200 200
· Code Review · 代碼複審 40 40
· Test · 測試(自我測試,修改代碼,提交修改) 40 40
Reporting 報告 60 80
· Test Repor · 測試報告 20 20
· Size Measurement · 計算工做量 20 0
· Postmortem & Process Improvement Plan · 過後總結, 並提出過程改進計劃 40 20
合計 2100

解題思路

解題思路

爬蟲使用:

  • 本次做業須要使用網絡爬蟲技術,在一開始進行需求評估的時候,我就認爲用C++實現爬蟲太過繁瑣,由於C++相對於python等腳本語言來講抽象程度還不夠高,從套接字編程到網頁爬取都須要親力親爲。並且網絡上關於C++爬蟲的資料也很少,因此我就選用了相對更方便的python來完成任務,經過對CVPR網站的分析,我發現須要爬取的內容格式工整,且整個網站也沒有反爬蟲措施,因此我直接使用python的urllib庫和正則表達式完成了論文列表的抓取

spider.png

代碼組織與內部實現設計

  • 代碼由四個部分組成:
    • WordCount:程序的入口,負責調用其餘函數
    • argHandle: 負責對傳入參數的合法性進行判別
    • CountChar:負責對傳入文本進行字符數統計
    • CountWord:負責對文本進行單詞處理
    • 類圖
      類圖

說明算法的關鍵與關鍵實現部分流程圖

  • 由於此次的做業是在上一次結對做業的基礎上進行的,因此問題的核心難點依舊是在單詞(詞組)的劃分上,針對指定長度詞組,我使用的方法的基本理念是一方面使用做業一中的劃詞程序將符合條件的單個單詞取出,另外一方面不斷維護詞組的開始和結束兩個哨兵節點,這樣每當規定長度的詞組被取出,就可根據詞組頭尾兩個哨兵節點取出整個字符串的字串(即所需詞組)
  • 在爬出的CVPR頂會論文列表中,TITLE和ABSTRACT以後的內容都是單獨一行呈現的,因此個人劃詞程序是以一次讀入一整行字符串開始的,這樣處理後能自然的劃分出的單詞(詞組)是屬於Title或是屬於Abstract
  • 另外一方面,爲了維護針對詞組的滑動窗口,劃詞函數額外維護每一個詞組的第二個單詞的起始位置,這樣就能在整個字符串的維度上,實現必定長度詞組的步進

核心算法流程圖:c++

core-process

核心代碼展現:git

1.png
2.png
3.png
4.png
5.png
6.png

附加題

  • 考慮到獲得topN後的高頻詞中有着很多像「the,that,show,then」這些出現頻率很高但對主題並無很短關聯的助詞和無心義詞彙,咱們決定寫個過濾掉他們的小功能,爲了在N很小的時候能夠篩選出更有用的信息。因而就有了這樣一句十分暴力的比較。
    github

  • 然後我也對輸出作了相對直觀的改進,讓詞頻的輸出不侷限與數字,而是以😊的形式按照詞頻所佔詞頻總數的比例輸出一個相似於能量條的笑臉串。
    正則表達式

  • 咱們還有一個大膽的設想就是給這個小程序增長美麗的邊框,研究了一番命令提示符工具後增長了一個關於輸出界面的源文件。
    算法

性能改進

  • 針對咱們的程序,在性能測試上使用了從CVPR上爬取的論文列表來做爲性能測試的樣本,在最開始的測試中,跑徹底文本耗時12.09s
  • 性能分析:

performance_before

performA.png

performA.png

  • 經過分析,能夠發現代碼邏輯在所指出的地方存在不合理的地方,通過改正後:

performence_after.png

  • 運行相同文本的時間由原來的12.09s變成11.45秒,性能提高5.3%

單元測試

  • 安排的十個單元測試:
  • 缺乏3個必要參數時程序提示參數錯誤
  • 缺省2個附加參數程序能按照缺省值正確運行
  • 輸入全部參數時程序正確運行
  • 輸入重複參數程序提示參數錯誤
  • 傳入較大文件時程序正確運行
  • 當詞組長度爲1時,程序能正確運行
  • 當一行的單詞數少於詞組長度時無輸出
  • 詞組內有其餘符號時劃詞後能保留
  • 輸入文件不存在時程序提示參數錯誤
  • 輸入文件沒法打開時程序提示參數錯誤

github代碼簽入記錄

遇到的代碼模塊異常或結對困難及解決方法

在最初「WordCount.exe -i input.txt -m 3 -n 3 -w 1 -o output.txt」的識別問題上咱們遇到了一下小情況,總結緣由是咱們全局變量的聲明與上用上出現了問題,也暴露了咱們基礎不牢固的問題,後經趙暢同窗通過指導下修復成功。
另外一方面就是我閱讀王彬同窗所寫的基礎代碼時,因爲本身過於菜以及和王彬同窗以前我的項目上所用思路不一樣,產生了必定的障礙,也沒別的,國慶幾天盯着屏幕研究了很長時間,差很少搞懂後纔在其基礎上加上了一部分附加內容。編程

評價你的隊友

個人隊友王彬同窗是個責任心與實力都很是強的同窗,在解決問題和提出問題方面都有不錯的能力,主要的基礎代碼和核心設想都是王彬同窗完成的,他的業務能力是值得我學習的。小程序

學習進度條

第N周 新增代碼(行) 累計代碼(行) 本週學習耗時(小時) 累計學習耗時(小時) 重要成長
2 100 100 4 6 爲團隊項目的須要學習了前端的相關知識 ,學習c++基礎,學習原型設計網絡

相關文章
相關標籤/搜索