201671010420 詞頻統計項目

做業要求

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

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

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

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

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

做業實施

1.需求分析:

要求程序可以作出基本的單詞頻率的統計,也能夠統計出文本的全部單詞數;程序功能強大,能分析較大的文本;操做簡介易懂。一目瞭然。java

2. 功能設計:

基本功能:能夠進行基本的詞頻統計,實現中英文分別統計
擴展功能:對於具體的文本甚至網絡文本進行分析git

3. 流程圖:

4. 測試運行:

5. 代碼秀:

public class WordCount {
    public static void main(String[] args) throws FileNotFoundException,IOException{

        try{
            //使用流的方法讀取文件
            BufferedReader br = new BufferedReader(new FileReader(
                    "F:\\javademo\\softwar_pro\\MRDemo\\words.txt"));
            //使用TreeMap方法自動將結果按Integer列
            TreeMap<String,Integer> treemap = new TreeMap<String,Integer>();
            //用來存儲讀取的單詞
            String readLine = null;
            //記錄單詞的總數
            int count = 0;
            while((readLine = br.readLine())!=null){
                //將字母排序爲小寫
                readLine = readLine.toLowerCase();
                //將全部單詞以大寫輸出
                //readLine  = readLine.toUpperCase();
                //過濾出只含有字母的字段
                String[] str = readLine.split("[\\s]");
                //過濾掉多個空格,「+」表明多個空格的意思
                for(int i = 0;i<str.length;i++){
                    count++;
                    String word = str[i].trim();//trim()用來去掉字符串首尾的空格
                    if(treemap.containsKey(word)){//判斷此映射是否包含指定鍵的映射關係
                        treemap.put(word, treemap.get(word)+1);
                    }else{
                        treemap.put(word, 1);
                    }
                }
            }
System.out.println("按字典的輸出順序爲:");
            System.out.println("單詞:"+"\t"+"單詞出現的頻率:" );
            /**
             * 使用迭代器遍歷取值:
             * Iterator是迭代器
             * treemap.entrySet()是把TreeMap類型的數據轉換成集合類型
             * treemap.entrySet().iterator()獲取集合的迭代器
             */
            Iterator<Map.Entry<String,Integer>> it  = treemap.entrySet().iterator();
            //判斷是否存在下一個單詞
            while(it.hasNext()){
                Map.Entry<String, Integer> entry = it.next();//獲取map中每個鍵值
                //輸出結果
                System.out.println(entry.getKey()+"        "+entry.getValue());
                br.close();//關閉流
            }
            System.out.println("單詞總數爲:"+count+"個");

        }catch(FileNotFoundException e){//異常處理
            e.printStackTrace();
        }catch(IOException e){
            e.printStackTrace();
        }
    }

}

6. 總結:

經過本次實踐,讓我深入認識到軟件開發的不易,單人操做很是困難,須要有幾個甚至一個團隊來合做完成;
軟件開發過程當中須要嚴謹的設計與計劃,不然將會浪費不少的時間,有可能致使推倒重來,浪費財力物力;
經過開發過程我也認識到基礎知識的嚴重不足,將會在之後的學習中彌補不足。github

7. PSP:

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

源代碼地址:https://github.com/lzh2540330731/-/blob/master/%E6%96%B0%E5%BB%BA%E6%96%87%E6%9C%AC%E6%96%87%E6%A1%A3.java網絡

相關文章
相關標籤/搜索