201671030103 仇素龍 實驗二詞頻統計軟件項目報告

1、課程名稱:

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

2、課程要求:

實驗二 軟件工程我的項目java

3、實驗目標:

(1)掌握軟件項目我的開發流程。
(2)掌握Github上發佈軟件項目的操做方法。git

4、實驗內容:

(一)需求分析

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

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

(二)功能設計

  • 文件的讀入輸出功能:讀取文件sourse.txt,能容納10萬單詞以上。
  • 指定單詞詞頻統計功能:用戶可輸入從該文本中想要查找詞頻的一個或任意多個英文單詞,運行程序的統計功能可顯示對應單詞在文本中出現的次數和柱狀圖。
  • 高頻詞統計功能:用戶輸入高頻詞個數k,程序返回k個高頻詞以及每一個單詞的詞頻。
  • 排序功能:實現按照詞頻數降序,按照字典順序排序。
  • 菜單功能:利用do-while語句實現詞頻統計的基本功能循環使用。

(三)設計實現

該詞頻統計軟件項目共有一個主類,包含主函數和三個功能函數。
主函數Main.java用來控制整個流程:讀入文本、單詞詞頻統計、柱狀圖展現。
三個基本函數:
函數WordNum():統計指定單詞的詞頻,可用柱狀圖顯示。
函數Before():可按文本中詞頻數降序顯示前k個單詞的詞頻及單詞。
函數WriteTxt():將文本中的單詞及其詞頻按照字典順序輸出到文件result.txt文件中。編程

5、測試運行

一、指定單詞詞頻統計以及統計前8個單詞的詞頻及單詞

二、將sourse.txt文本中的單詞及其詞頻按照字典順序輸出到文件result.txt文件中。

result.txt文件:
編程語言

6、優秀代碼片斷

一、篩選出文章中的英文單詞函數

BufferedReader br = new BufferedReader(new FileReader(fileName));  
        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);  
                }  
        }

二、存儲單詞計數信息,並進行降序排列學習

Map<String, Integer> wordsCount = new TreeMap<String,Integer>();  //存儲單詞計數信息,key值爲單詞,value爲單詞數                       
        for (String li : lists) {  
            if(wordsCount.get(li) != null){  
                wordsCount.put(li,wordsCount.get(li) + 1);  
            }else{  
                wordsCount.put(li,1);  
            }
    }
    ArrayList<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(wordsCount.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
                return o2.getValue() - o1.getValue(); // 降序排列
            }
    });

7、總結

我在作這個項目以前,本來打算着手寫代碼,但是寫着寫着感受沒有一點思緒,最後實在寫不出來,就對此進行分析,結果發現此次程序設計包含的模塊其實很清楚。我先進行需求分析,而後對功能模塊進行具體分析,將該程序設計的文本輸入輸出、單詞儲存排序以及統計詞頻都串聯起來,各功能獨立實現,最終完成了本次項目設計。測試

8、PSP

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

9、設計經驗

在設計項目的過程當中,必定要進行需求分析,而且劃分模塊。
點擊查看源代碼
編碼

相關文章
相關標籤/搜索