201671030124 詞頻統計軟件項目報告

本次開發使用了《構建之法》中我的開發流程(PSP),並使用了java語言編寫代碼。java

1.需求分析

根據老師在博文實驗二 軟件工程我的項目中的要求,軟件需求以下:git

- 程序可讀入任意英文文本文件,該文件中英文詞數大於等於1個。

 - 程序須要很壯健,能讀取容納英文原版《哈利波特》10萬詞以上的文章。

 - 指定單詞詞頻統計功能:用戶可輸入從該文本中想要查找詞頻的一個或任意多個英文單詞,運行程序的統計功能可顯示對應單詞在文本中出現的次數和柱狀圖。

 - 高頻詞統計功能:用戶從鍵盤輸入高頻詞輸出的個數k,運行程序統計功能,可按文本中詞頻數降序顯示前k個單詞的詞頻及單詞。

 - 統計該文本全部單詞數量及詞頻數,並能將單詞及詞頻數按字典順序輸出到文件result.txt。

2.功能設計

- 讀取英文文件內容的功能

 - 輸入單詞可查找出該單詞的詞頻

 - 用柱狀圖顯示查找所查找單詞的詞頻

 - 能夠降序顯示前k個單詞的詞頻和單詞

 - 統計文本中的單詞數量和詞頻數

 - 按字典順序排序文本中的單詞

 - 將按字典順序排列的單詞輸出到文本result.txt

3.設計實現

該程序有四個類,分別是main類,CountOccurrenceOfWords類,HighFrequencyWords類,WordStorage類
- main類的做用是控制整個程序,使用BufferedReader實現文本的讀取和繪製單詞詞頻的柱狀圖三個功能;
- CountOccurrenceOfWords類是使用map的鍵值對實現單詞詞頻的統計;
- HighFrequencyWords類是實現輸出前k個詞頻最高的單詞及其詞頻的功能;
- WordStorage類是實現將文本中的單詞及其詞頻輸出到result.txt文件中。github

4.測試運行

5.代碼展現

  • 1.經過BufferedReader類讀取文本內容
InputStreamReader is = new InputStreamReader(new FileInputStream(file), "utf-8");//將字節流轉換爲字符流
        BufferedReader buff = new BufferedReader(is);//提供通用的緩衝方式文本讀取
        List<String> list = new ArrayList<String>();//list中只存放純單詞文本
        String readLine = null;//單詞列表初始爲空
        while((readLine = buff.readLine())!=null){
            String[] WordsArr = readLine.split("[^a-zA-z]");
            for(String word:WordsArr){
                if(word.length()!=0){
                    list.add(word);//將截取後的純單詞放入list
                }
            }
        }
  • 2.使用map統計單詞的詞頻
public class CountOccurrenceOfWords {
    
            public String[]  query(Map<String, Integer> Map,String s) {
                String[] word= s.split(",");//使用逗號隔開單詞
                int i;
                for(i=0; i<word.length; i++) {
                    for(Entry<String,Integer> entry : Map.entrySet()) { 
                        if(word[i].equals(entry.getKey()))
                        {
                            System.out.println(entry.getKey() + ":\t " + entry.getValue()); 
                            break;
                        }
                    } 
                }
                return word;
            }
    }

6.總結

首先按照軟件開發的流程需求分析-概要設計-詳細設計-編碼-測試分析的順序,按步驟作出每步所需作的事。可是因爲以前沒有相關的經驗,仍是習慣性的想着編碼,可是最後基本都完成了。在實驗剛開始的時候,我先按照老師所給的要求分析我須要實現幾項功能,而後我先對每部分如何實現進行一些設計,好比如何讀取文件的內容使用BufferedReader等,而後開始詳細的設計實現功能所須要的數據結構和如何實現這個功能的流程等內容,以後按照前面的設計進行編碼,最後進行測試代碼是否正確。因爲並不太擅長Java,因此在編寫代碼的時候,困難很大。數據結構

7.展現PSP

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

因爲第一回按照PSP進行軟件開發,對時間的掌握還有自身能力的認識不足,致使實際花費時間比計劃花費時間多出近一倍,尤爲是編碼階段,本次軟件開發使用Java開發,可是個人Java編碼能力不是很好,致使編碼過程情況頻出,因此在編碼階段花費了大量的時間,經過本次實驗,我認識到個人編碼能力還有待提升。除此以外,我對軟件工程的流程認識也不是很好,老是習慣性的直接想去編碼,致使思路混亂。學習

8.GitHub的地址

源碼地址請點擊這裏測試

相關文章
相關標籤/搜索