201671030109 詞頻統計軟件項目報告

項目 內容
這個做業屬於哪一個課程 任課教師博客主頁連接
這個做業的要求在哪裏 做業連接地址
課程學習目標 (1)掌握軟件項目我的開發流程。(2)掌握Github上發佈軟件項目的操做方法。
本次做業在哪一個具體方面幫助咱們實現目標 第一次體驗我的項目

需求分析:

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

功能設計:

一、讀文本功能——讀入文本數據
二、用戶輸入功能——輸入用戶想要查詢的單詞以及想要查詢高頻單詞的個數
三、排序功能——降序排序和按字典順序排序
四、詞頻統計功能——顯示輸入單詞在文本中出現的次數和柱狀圖以及降序顯示前k個單詞的詞頻及單詞
五、寫文件功能——將輸出數據存入文件中java

設計實現:

具體設計以下:
-main.java 控制整個程序
<一、實現對文本文件中數據的讀入
<二、對各項功能進行選擇,並調用wordcount.java中相應的函數實現各項功能
-wordcount.java 包括四個功能函數:
<一、顯示詞頻和柱狀圖——輸入從該文本中想要查找詞頻的一個或任意多個英文單詞,顯示對應單詞在文本中出現的次數和柱狀圖。
<二、輸出高頻詞——按文本中詞頻數降序顯示前k個單詞的詞頻及單詞。
<三、排序——降序排序和按字典順序排序
<四、寫文件——將文本中全部單詞數量及詞頻數按字典順序輸出到文件result.txt中git

關鍵代碼:

// 詞頻統計界面
        System.out.println("***************英文文本詞頻統計軟件****************");        
        System.out.println("請選擇你須要實現的功能序號:");
        System.out.println("一、讀取文本");
        System.out.println("二、顯示所要查詢的單詞詞頻");
        System.out.println("三、輸出詞頻最高的前k個單詞");
        System.out.println("四、統計該文本全部單詞數量及詞頻數,並將單詞及詞頻數按字典順序輸出到文件result.txt");
        System.out.println("0、退出");
        System.out.println("*****************************************************");  ```
//輸出前k個高頻詞
    void HighWord(Map<String, Integer> map) {  
        sort(map,2);//先利用上一個方法sort()來對統計好的單詞按單詞出現的頻數排序,而後再進行前k個單詞的選取
        System.out.println("請輸入查看單詞個數:");
        int k = in.nextInt();
        for(Entry<String,Integer> y : Map.entrySet()) {  
            System.out.println("單詞——"+y.getKey() + " 出現" + y.getValue()+"次");  
            k--;
            if(k<=0)    
                break;
        } 
    }
//將結果存入文件中result.txt
    void output(Map<String, Integer> map)throws IOException { 
        sort(map,3);
        File file = new File("result.txt");//建立一個新的文件
        FileWriter f = new FileWriter(file.getAbsoluteFile());//調用了getAbsoluteFile()方法
        for(Entry<String,Integer> y: Map.entrySet()) {
            f.write(y.getKey() + ":" + y.getValue()+"     ");
        }
        f.close();//關閉文件
        System.out.println("成功寫入result文件中!");

測試運行:

程序的運行截圖以下:


result.txt中部分結果以下圖:
github

總結:設計的程序如何實現軟件設計的「模塊化」原則

在本次詞頻統計軟件項目中建立了兩個類:Main類控制整個程序,讀入文本文件中的數據,顯示所要選擇的執行菜單並調用wordcount類中的各個函數。wordcount類中包含四個函數:histogram函數s實現顯示詞頻和柱狀圖的功能、HighWord函數顯示輸出高頻詞得功能、sort函數實現降序排序和按字典順序排序的功能、output函數是將結果輸出到文件result.txt中,各個部分分別實現各自的功能,並相互聯繫實現整個軟件項目。

項目開發過程當中,構建PSP表以下:

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

在本次軟件項目開發過程當中,在需求分析以及具體代碼編輯階段計劃時間與實際完成時間偏差較大,主要仍是由於編程不過關,對Java程序的編寫掌握的並非很好;在剛開始時,並無對需求進行充分的分析,致使功能實現不全面,如只實現了統計對應單詞出現的次數,但並不能用柱狀圖顯示;因此,在之後的學習過程當中我應該注意仔細進行相關項目的需求分析,並應具有必定的編程能力,才能更好地完成項目。編程

源碼在Github的倉庫主頁連接地址

相關文章
相關標籤/搜索