201671030114 馬秀麗 實驗二軟件工程我的項目

課程名稱:2016級計算機科學與工程學院軟件工程(西北師範大學)

課程要求:實驗二 軟件工程我的項目

GetHub源代碼網址

嘗試按照《構建之法》第2章中2.3所述PSP流程,使用JAVA編程語言,獨立完成一個英文文本詞頻統計的軟件開發。

需求分析:

根據英文文本文件讀出文本內容,將讀出內容中的單詞進行統計,輸出單詞和頻數,輸入想要查詢的單詞,獲得它的出現次數,也可輸出根據輸入的個數的高頻詞。html

基本功能:

1.程序可讀入任意英文文本文件,該文件中英文詞數大於等於1個。
2.程序須要很壯健,能讀取容納英文原版《哈利波特》10萬詞以上的文章。
3.指定單詞詞頻統計功能:用戶可輸入從該文本中想要查找詞頻的一個或任意多個英文單詞,運行程序的統計功能可顯示對應單詞在文本中出現的次數和柱狀圖。
4.高頻詞統計功能:用戶從鍵盤輸入高頻詞輸出的個數k,運行程序統計功能,可按文本中詞頻數降序顯示前k個單詞的詞頻及單詞。
5.統計該文本全部單詞數量及詞頻數,並能將單詞及詞頻數按字典順序輸出到文件result.txt。java

功能設計:

1.讀取文本文件,存儲過濾後單詞的列表 ;
2.輸入單詞的詞頻統計,並畫出柱狀圖;
3.輸出輸出輸入個數的高頻詞;
4.按單詞的頻數降序排序並將結果輸出在文本文件。git

設計實現:

1.menu()函數,根據輸入指令完成相應功能;
2.Frontk()函數,根據輸入單詞輸出出現頻數並畫出柱狀圖;
3.SortMap()函數,根據讀入文件統計英文文本詞頻並降序輸出;
4.Draw()函數,顯示前k個高頻詞頻數。github

運行結果:

選擇s指令統計某單詞頻數並畫出其柱狀圖:
編程

選擇k指令顯示前k個高頻詞頻數:
編程語言

選擇t指令統計文本文件中的詞頻並降序輸出在result.txt文件
ide

代碼展現:

讀出文本文件,過濾並存儲單詞:函數

BufferedReader br = new BufferedReader(new FileReader("content.txt"));  
    List<String> lists = new ArrayList<String>();            //存儲過濾後單詞的列表  
    String readLine = null;
    while((readLine = br.readLine()) != null){  
        String[] wordsArr1 = readLine.split("[^a-zA-Z]");     //過濾出只含有字母的  
        for (String word : wordsArr1) {  
            if(word.length() != 0){        //去除長度爲0的行  
                lists.add(word);  
            }  
        }  
    }  
      
    br.close();

統計每一個單詞出現頻數:學習

Map<String, Integer> wordscount = new TreeMap<String,Integer>();  //存儲單詞計數信息,key值爲單詞,value爲單詞數       
      
    //單詞的詞頻統計  
    for (String e : lists) {  
        if(wordscount.get(e) != null){  
            wordscount.put(e,wordscount.get(e) + 1);  
        }
        else{  
            wordscount.put(e,1);  
        }  

    }

根據單詞出現頻數降序排序:測試

ArrayList<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(tmap.entrySet());  
    Collections.sort(list,new Comparator<Map.Entry<String,Integer>>(){  
        @Override  
        public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {  
            return o2.getValue() - o1.getValue();  //降序  
        }  
    });

總結:

在剛看到題目的時候就很擔憂,由於學過java後再不多用它,有點懵,通過看書和網上查資料以及之前寫過的代碼後,就有點信心了,可是對於畫柱狀圖壓力很大,也看了網上的畫柱狀圖的例子,可是不太會應用,後來看到有同窗用輸出方格的方式畫,很簡單也很粗糙,大體能表現出柱狀圖的內容,若是能夠的話,之後會改進這部份內容,正真的畫出柱狀圖。

psp

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