201671010418劉佳 實驗二詞頻統計項目報告

詞頻統計我的項目:

點我查看源碼java

一.需求分析:

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

二.功能設計:

  • 基本功能:1.可讀入10萬詞以上的英文文本
    2.可查找一個或多個英文單詞並能夠統計出現次數和生成柱狀圖
    3.能夠統計出前k個高頻單詞及詞頻,並能夠輸出到文件result.txt
  • 擴展功能:無

三.設計實現:

1.文件讀入

使用Map集合存放文件,給文件建立一個文件緩衝流,方便後期取值。爲了提升文件的健壯性便使用了集合。github

2.單詞的個數統計

將以前存在TreeMap中的文本單詞拿出,和用戶輸入的單詞作對比和截取,區分單詞和鍵值對的比較,當查找到相同單詞時,返回一個數據。編程

3.單詞詞頻存放

用一個迭代器遍歷了整個單詞數組,在以前將文本文件用write方法寫入。數組

4.柱狀圖

當用戶查找出須要的單詞時,彈出的不只有單詞的詞頻數,還有柱狀圖的直觀統計。在繼承了JFrame類建立的可視化圖形界面後,經過Graphics2D方法建立一個柱狀統計圖。編程語言

四.測試運行:

程序運行截圖以下:






五.代碼部分:

如下是我比較滿意的部分代碼:(高頻單詞的顯示)

else if (i==2){
        //高頻單詞的顯示
        String st=null;
        Integer in=0;
        Integer temp;
         Iterator<String> it1 = wordsave.keySet().iterator();
            while(it1.hasNext())
            {
                String key = (String) it1.next();
                Integer value = wordsave.get(key);
                if(value>in){
                    temp=value; 
                    in=temp;
                    value=in;
                    st=key;
                }
            }
        System.out.println(st+" \t"+in);
        
    }            
        public void save(TreeMap<String, Integer> word){
   //傳入一個map類型的集合參數
 //統計該文本全部單詞數量及詞頻數,並能將單詞及詞頻數按字典順序輸出到文件result.txt
    BufferedWriter bw = null;
    try {
        File file1 = new File("result.txt");
        if (!file1.exists()) {
            file1.createNewFile();
        }
        FileWriter fw = new FileWriter(file1.getAbsoluteFile());
        bw = new BufferedWriter(fw);
        
    } catch (IOException e) {
        e.printStackTrace();
    }
    
   Iterator<String> it1 = word.keySet().iterator();//用迭代器把集合中的單詞遍歷
   while(it1.hasNext())
   {
    String key = (String) it1.next();//拿到key和value的值
    Integer value = word.get(key);
    
    try {
            bw.write(key+"="+value+"\n");//將key和value的值寫入
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
   }

}
}學習

六.總結:

經過此次詞頻統計的我的項目開發,真實地模擬了軟件開發的部分流程,瞭解到開發一個軟件並不單單只是作代碼的設計和編碼部分。真正下功夫的地方仍是需求分析和基本的功能設計。可是當明白了項目的具體要求與分析以後,技術這關仍是欠缺。不少功能沒法實現。
學習到了不少java封裝的知識點,查詢了不少資料也和同窗作了不少討論,對Java的編碼更加熟練了。測試

七.按照《構建之法》第2章中2.3所述PSP流程,使用JAVA編程語言,PSP的展現:

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