201671010412 郭佳 英文文本統計分析

項目 內容
項目名稱 實驗四 英文文本統計分析
Github的倉庫主頁 https://github.com/HaiYou667/WordCount_Analysis
所屬課程 http://www.cnblogs.com/nwnu-daizh/
做業要求 實驗四 軟件工程結對項目
課程學習目標 體驗兩人合做,練習結對編程;
掌握Github上增量發佈軟件的操做方法


任務一:

點評對象 :201671010434王雯涵
點評做業的地址 :http://www.javashuo.com/article/p-rmlcutft-ce.html
點評內容 :
      博文的結構基本符合實驗要求。博文內容:存在一些小問題:在設計實現雖然列出了功能設計個程序流程圖,可是對於流程圖中的方法沒有必要的說明。只列出了psp,若是能對PSP進行分析和思考就更好了。從你的psp能夠看出,在具體編碼階段耗費了大量時間,需求分析,具體編碼和測試的實際用時都超出預期不少,這說明在這些開發階段還有待提升。以前下載運行了你的我的項目代碼,代碼還算規範,功能方面除了柱狀圖其餘也基本符合要求,但願後期能獲得完善。
點評心得:
      從個人博文和結對隊友王雯涵的項目對比能夠看出,咱們對於設計階段的內容都不夠詳細,應該更具體的描述該系統的設計,而且對涉及到的類或方法進行要進行必要說明。在具體編碼中,個人代碼不夠規範,對於一些類型和方法名起的過於簡單,不可以直接明瞭的體現出類或方法的含義,讓人不容易理解,然而王雯涵在這方面作的很好,因此在實驗四中,我會彌補實驗二中的不足,讓代碼更規範。html


任務二:

1. 需求分析

本次實驗任務是在實驗二我的軟件項目的基礎上實現英文文本的統計分析。
因此本次實驗的需求除了實驗二所提到的還需實現下列需求:git

  • 統計該文本中的行數及字符數;
  • 各類統計功能均提供計時功能,顯示程序統計所消耗時間(單位:ms);
  • 可處理任意用戶導入的任意英文文本;
  • 人機交互界面要求GUI界面(WEB頁面、APP頁面均可);
  • 附加功能:統計文本中除冠詞、代詞、介詞以外的高頻詞;
  • 附加功能:統計前10個兩個單詞組成的詞組頻率。


2. 功能設計

根據需求分析中提到的內容,本程序中設計如下幾個功能:github

  • 基於web的人機交互界面
  • 可處理用戶輸入的任意文本文件
  • 統計用戶指定文件中單詞及其詞頻數,且輸出到指定文件;
  • 統計用戶任意輸入的單詞在文件中出現的次數;
  • 以降序輸出用戶輸入的前K個高頻詞的個數及其柱狀圖;
  • 統計該文本文件中的行數及字符數
  • 計算實現各類功能的消耗時間

    web

    3. 設計實現

類圖

  1. Count1類用於對文件獲取和處理,它裏面主要有三個方法,其中:編程

    • readandprocessfile()方法是用來獲取用戶輸入的文件,讀取和處理文件內容
    • Compare()方法是對處理後的文件中的詞頻進行降序排序
    • wcount()方法是用來對排序處理的統計結果以文件方式保存

  2. wordCountMain類用於處理前臺頁面中的用戶請求,它裏面主要有五個方法,其中:瀏覽器

    • Getfilename()方法實現用戶輸入文件路徑統計詞頻
    • givenWordCount()方法是實現統計用戶輸入的任意單詞在文件中出現的次數
    • showHistogram()方法是實現用戶輸入任意有效範圍K個高頻詞的統計
    • countRowNumber()方法是實現對指定文件的行數的統計
    • countCharacterNumber()方法是實現對指定文件中的各種字符數的統計


4.測試運行



1.啓動Tomcat服務器,在瀏覽器中輸入訪問地址,進入主界面
主界面

服務器

2.選擇功能選項1:統計詞頻個數,可輸入任意文本文件地址


jsp

3.顯示詞頻總數,統計結果及其消耗時間


學習

4.選擇功能選項2:統計指定單詞詞頻個數


測試

5.選擇功能選項3:查詢k個高頻詞的詞頻及其統計圖



6.選擇功能選項4:統計指定文本中的行數及其消耗時間


7.選擇功能選項5:統計指定文件中的字符數及其消耗時間


5. 部分代碼展現

1.統計給定單詞詞頻

private void givenWordCount(HttpServletRequest request, HttpServletResponse response) 
                throws ServletException, IOException {
            
            Count1 c1=new Count1();
            c1.wcount(file);
            
            List<Map.Entry<String, Integer>> ordlist = new ArrayList<Map.Entry<String,Integer>>(c1.map.entrySet());
            //排序
            Collections.sort(ordlist,c1.valcom);    
            
            String givenword=request.getParameter("givenword");
            
            String word="";
            int count=0;
            int flag=1;
            
            //查詢統計給定單詞詞頻
            for (Map.Entry<String, Integer> entry : ordlist) {
                
                if(entry.getKey().equals(givenword)){
                    word=entry.getKey();
                    count=entry.getValue();
                    flag=1;
                    break;
                }else{
                    flag=0;
                }               
            }

            if(flag==1){
                System.out.println("該單詞"+word+"出現的個數爲:"+count); 
            }else{
                System.out.println("對不起文章中沒有出現該單詞!");
            }
            
            request.setAttribute("givenword", givenword);
            request.setAttribute("word", word);
            request.setAttribute("count", count);
            request.setAttribute("file", file);
            request.getRequestDispatcher("/html/givenWordCount.jsp").forward(request, response);
    }



2.統計k個高頻詞出現的次數

private void showHistogram(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            long startTime=System.currentTimeMillis();
            long totaltime=0;
            
            Count1 c1=new Count1();
            c1.wcount(file);
            
            List<Map.Entry<String, Integer>> ordlist = new ArrayList<Map.Entry<String,Integer>>(c1.map.entrySet());
            //排序
            Collections.sort(ordlist,c1.valcom);
            
            Integer k=Integer.parseInt(request.getParameter("wordnumber"));
            int num=k;
             Map<String,Integer> map = new HashMap<String, Integer>();
            if(k>0&&k<=ordlist.size())
             {      
                for (Map.Entry<String, Integer> entry : ordlist) {
                    
                    map.put(entry.getKey(), entry.getValue());
                    
                    if(--k==0)
                        break;
                }
               }else{
                    System.out.println("輸入有誤!請從新輸入!");
              }
            long endTime=System.currentTimeMillis();
            totaltime=endTime-startTime;
            
            request.setAttribute("totaltime", totaltime);
            request.setAttribute("ordlist", map);
            request.setAttribute("k", num);
            request.setAttribute("file", file);
            request.getRequestDispatcher("/html/HighFrequencyWordsAndHistogram.jsp").forward(request, response);
        
    }


6. 總結:

      第一次嘗試兩人合做的軟件開發模式,剛開始很是的不適應,在結對編程的時候由於兩我的的編碼習慣不一樣,思惟方式也不一樣,會出現意見不一致,矛盾爭吵等問題,但慢慢的熟悉以後就會發現結對編程其實也有好多好處,我以爲最大的好處就是減小了代碼出錯的機率。一我的編程時總會出現一些細小又不易察覺的錯誤,但兩人結對時,對方就會注意到這些小問題而且及時指出,從而減小了出錯的機率。

下面是咱們結對編程過程情景:
結對編程過程


7.PSP我的軟件過程

PSP2.1 任務內容 計劃共完成須要的時間(min) 實際完成須要的時間(min)
Planning 計劃 5 6
•Estimate • 估計這個任務須要多少時間,並規劃大體工做步驟 5 6
Development 開發 562 591
••Analysis 需求分析 (包括學習新技術) 10 15
•Design Spec • 生成設計文檔 5 7
•Design Review • 設計複審 (和同事審覈設計文檔) 5 7
•Coding Standard 代碼規範 (爲目前的開發制定合適的規範) 7 7
•Design 具體設計 10 10
•Coding 具體編碼 500 510
•Code Review • 代碼複審 5 10
•Test • 測試(自我測試,修改代碼,提交修改) 20 25
Reporting 報告 15 15
••Test R1eport • 測試報告 4 3
•Size Measurement 計算工做量 5 6
•Postmortem & Process Improvement Plan • 過後總結 ,並提出過程改進計劃 6 6

對PSP分析和總結:       對比上次的我的項目PSP,能夠看出本次實驗在計劃,需求分析等方面的用時都相對減小,由於部分需求以前已分析過。本次項目是在上次項目的基礎上實現,按理說在具體編碼方面應用時更少纔對,但實際卻偏偏相反,主要緣由是本次實驗要實現基於web的人機交互,而我對於web項目又比較生疏,要實現又至關於從新學習一遍,這期間遇到了許多問題像Eclipse中服務器的配置,Tomcat服務器沒法啓動,服務器運行顯示端口占用,web項目jsp報錯,el表達式的使用,還有Echarts的學習等等,因此在這方面耗費了大量時間,但通過本身一步一步遇到問題,解決問題仍是感受挺有成就的,日後須要更加努力。

相關文章
相關標籤/搜索