201671030120 王晶 詞頻統計軟件項目報告


  

課程名稱2016級計算機科學與工程學院軟件工程(西北師範大學)

課程要求實驗二 軟件工程我的項目

  


1、需求分析

使用JAVA編程語言,開發一個統計英文文本詞頻的軟件。軟件基本功能要求以下:

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

  


2、功能設計

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

  


3、設計實現

一、本次詞頻統計軟件項目共有兩個類

(1)、Main.javagit

控制整個程序github

<一、實現對文本文件中數據的讀入
<二、對各項功能進行選擇,並調用wordcount.java中相應的函數實現各項功能編程

(2)、wordcount.java編程語言

包括四個功能函數:函數

<一、顯示詞頻和柱狀圖(histogram函數)——輸入從該文本中想要查找詞頻的一個或任意多個英文單詞,顯示對應單詞在文本中出現的次數
     和柱狀圖。
<二、輸出高頻詞(HighWord函數)——按文本中詞頻數降序顯示前k個單詞的詞頻及單詞。
<三、排序(sort函數)——降序排序和按字典順序排序
<四、寫文件(output函數)——將文本中全部單詞數量及詞頻數按字典順序輸出到文件result.txt中學習

  

二、程序設計流程圖

  


4、測試運行

一、顯示所要查詢的單詞詞頻和柱狀圖


  

二、輸出詞頻最高的前k個單詞


  

三、將結果輸出到文件result.txt中


  


5、關鍵代碼

  • 一、讀取英文文本

Map<String, Integer> map = new TreeMap<String, Integer>();
            BufferedReader b = null;
        try {
            b = new BufferedReader(new FileReader(A));
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("文件沒有找到,請輸入正確的文件路徑!");
        }
  • 二、顯示詞頻和柱狀圖(histogram)

void histogram(Map<String, Integer> map){
        System.out.println("請輸入須要查詢的單詞 :");
        String words = in.nextLine();
        String[] word= words.split(",");//輸入的單詞之間以逗號分隔
        float sum;  
        for(int i=0; i<word.length; i++) {
            for(Map.Entry<String,Integer> y : map.entrySet()) { //能夠查看Map類中的entrySet()方法和Entry()方法,for中是一個賦值語句
                if(word[i].equals(y.getKey()))
                {  
                    System.out.println("單詞 —— "+y.getKey() + " 出現 (" + y.getValue()+" )次");
                    sum=(float)(y.getValue())/500; 
                    for(int j=0;j<sum;j++){
                        System.out.print("*");
                    }
                    System.out.println();
                }  
            } 
        }
    }
  • 三、功能菜單

public class Main { 
    static Scanner in = new Scanner(System.in);
        public static void main(String[] args)throws IOException{  
        Map<String, Integer> map = new TreeMap<String, Integer>();
        // 讀取要處理的文件,並將它放在b中
        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("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");  
        int y= in.nextInt();  
        int i=0;

  


6、總結

    在一個軟件項目的開發過程當中,首先須要進行需求分析,對一個項目有總體的認知。其次,將整個項目按照功能分紅若干個模塊,每一個模塊完成本身對應的功能,而且各個模塊之間相互聯繫,協做完成全部功能。在本次詞頻統計軟件項目中,我建立了兩個類。Main類控制整個程序,讀入文本文件中的數據,顯示菜單並調用wordcount類中的各個函數。wordcount類中包含四個函數:histogram函數(顯示詞頻和柱狀圖)、HighWord函數(輸出高頻詞)、sort函數(降序排序和按字典順序排序)、output函數(將結果輸出到文件result.txt中),分別實現各自的功能,並相互聯繫實現整個軟件項目。測試

  


7、PSP展現

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

  


從PSP中能夠看出計劃完成須要的時間與實際完成須要的時間之間是有必定的差距的,主要緣由仍是基礎不紮實,對Java掌握的不熟練,致使寫代碼時很困難。同時,在第二次我的項目的完成過程當中,我深入認識到了本身在某些方面的薄弱,不管是在總體的構思上,仍是在分模塊的設計上,都不是很順利。最後經過查閱資料,請教同窗,才成功完成項目二。從此次項目中也明白了本身還有許多地方須要學習,對於Java的相關知識點須要儘快去回顧和學習,努力作好以後的項目。

    該詞頻統計軟件項目的源代碼可在此處查看

相關文章
相關標籤/搜索