201671030111 詞頻統計軟件項目報告

 項     目   內     容 
所屬課程 軟件工程
做業要求 實驗二軟件工程我的項目
課程目標 掌握軟件項目我的開發流程,
掌握Github上發佈軟件項目的操做方法。
項目源碼 源碼連接

1、需求分析

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

2、功能設計

1.讀取英文文本的功能;
2.可輸出指定單詞的詞頻(可輸入一個或多個單詞);
3.可顯示對應單詞的柱狀圖;
4.統計並輸出前k個高頻詞及其詞頻;
5.統計文本中的單詞數量及詞頻數;
6.將單詞及詞頻數按字典順序輸出到文件result.txt。git

3、設計實現

  • 1.項目包含兩個類,分別是主函數Main類和實現功能的Function類。
  • 2.Main類的做用是實現用戶選擇功能、退出功能和讀取英文文本的功能。
  • 3.Function類的做用是實現指定單詞詞頻統計功能、統計並輸出前k個高頻詞及其詞頻功能、統計文本全部單詞數量及詞頻數並將單詞及詞頻數按字典順序輸出到文件result.txt的功能和退出功能。
  • 4.流程圖:

4、測試運行

  • 1.指定單詞詞頻統計功能:
  • 2.高頻詞統計功能(前k個):
  • 3.統計該文本全部單詞數量及詞頻數,並將單詞及詞頻數按字典順序輸出到文件result.txt:

  • 4.退出功能:

5、部分代碼展現

1.統計並輸出前k個高頻詞及其詞頻github

public void topword(TreeMap<String, Integer> wordFrequent) {
        Set<Map.Entry<String, Integer>> set=wordFrequent.entrySet();    
        List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(set);
        
        System.out.println("請輸入單詞個數:");
        int k = in.nextInt();
        int i;
        
        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());            
            }        
        });//end of sort
        
        for (i = 0; i < k; i++) 
        {
            System.out.println(list.get(i));
        }
        
        System.out.println("Over!");
        System.exit(0);
    }//end of topword

2.將單詞及詞頻數按字典順序輸出到文件result.txt編程

public void printresult(TreeMap<String, Integer> wordFrequent) throws IOException {
        Set<Map.Entry<String, Integer>> set=wordFrequent.entrySet();//返回treemap裏的條目規則集
        FileWriter file = new FileWriter("result.txt");
        BufferedWriter reader = new BufferedWriter(file);

        for(Map.Entry<String, Integer> e:set)
        {   
                reader.write(e.getKey() + ":" + e.getValue() + "\t");
        }
  
        reader.close();
        
        System.out.println("Over!");
        System.exit(0);
    }//end of printresult

6、總結

        主類裏實現功能選擇,簡單的退出功能和調用Function類中的函數的功能,Function類裏實現指定單詞詞頻統計功能,高頻詞統計功能(前k個)和統計該文本全部單詞數量及詞頻數,並將單詞及詞頻數按字典順序輸出到文件result.txt的功能,每一個功能用一個函數實現,以實現軟件設計的「模塊化」原則。模塊化

7、PSP

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

        經過本項目,我對軟件的開發流程有了大體的瞭解,這種規範化的流程對比我以往的代碼編寫方法確實有許多的優勢;經過本項目,我也學到了一些新知識,好比怎樣將TreeMap按value值排序,怎樣在Github上發佈軟件項目;經過本項目,我也發現了本身還有許多不足之處,好比Java基礎很差,編程實現困難。在本次項目開發中,我也有一點遺憾,一是沒有實現選擇功能的循環錄入,二是因我的能力不足沒有將指定單詞的柱狀圖徹底實現,而是用一種投機取巧的方式實現。函數

相關文章
相關標籤/搜索