201671010401 包稚潼+《英文文本統計分析》結隊項目報告

實驗目的與要求

-體驗軟件項目開發中的兩人合做,練習結對編程(Pair programming)。
-掌握Github上增量發佈軟件的操做方法。html

項目名稱:英文文本統計分析 項目要求:http://www.javashuo.com/article/p-bjcswxqf-ma.html
任課教師:代老師 博客地址:http://www.cnblogs.com/nwnu-daizh/
結隊人:201671010413葛進花 博客地址:https://www.cnblogs.com/gejinhua/p/10550323.html/
點評內容: 排版比較整齊,功能設計的描述不夠完整,沒有實現柱狀圖,從博客中看出來前期仍是深刻學習的,就psp而言,規劃較爲完美,可是後期拖延較多,說明準備不夠充分。計劃和完成程度有偏差,可能對於計劃的初期分配不正確。
點評心得: 點評的過程當中發現,兩人的進度基本一致,對於實驗的要求一致,部分沒有實現的功能也類似。須要後期一塊兒加深學習,互相學習對方的優勢,彌補自身缺點,爭取此次結隊項目完成順利。

實驗內容與步驟

任務一:兩兩自由結對,對結對方的《實驗二 軟件工程我的項目》的項目成果進行評價,具體要求以下:

-對項目博文做業進行閱讀並進行評論,評論要點包括:博文結構、博文內容、博文結構與PSP中「任務內容」列的關係、PSP中「計劃共完成須要的時間」與「實際完成須要的時間」兩列數據的差別化分析與緣由探究。
-克隆結對方項目源碼到本地機器,閱讀並測試運行代碼,結合運行結果評論程序代碼,評論要點包括:軟件結構、代碼規範、功能實現、人機交互等。
-嘗試利用github中的Fork、Clone、Push、Pull request、Merge pull request對結對方倉庫中的源碼進行合做修改。git

任務二:採用兩人合做方式,設計開發一個英文文本統計分析軟件,使之具備如下功能:

-實驗2要求的功能;
-單詞頻數可視化柱狀圖要求是如下樣式:

-統計該文本行數及字符數;
-各類統計功能均提供計時功能,顯示程序統計所消耗時間(單位:ms);
-可處理任意用戶導入的任意英文文本;
-人機交互界面要求GUI界面(WEB頁面、APP頁面均可);
-附加分功能:統計文本中除冠詞、代詞、介詞以外的高頻詞;
-附加分功能:統計前10個兩個單詞組成的詞組頻率。github

軟件設計:

-需求分析:
-1.可處理用戶任意輸入的英文文本
-2.統計該文本的行數及字符數功能
-3.指定單詞詞頻統計功能
-4.前k個高頻詞的輸出
-5.統計該文本的單詞數,而後輸出到result.txt文件。
-6.統計功能耗時
-7.GUI人機交互界面
-8.統計文本除冠詞、代詞、介詞以外的高頻詞編程

核心功能代碼展現:

public class CountOccurrenceOfWords {
    public static void main(String[] args) {
        long t1 = System.currentTimeMillis();
        String s;
        String fileName1 = "D:\\Workspaces\\jiedui\\src\\text.txt";
        String fileName2 = "D:\\Workspaces\\jiedui\\src\\result.txt";
        try {
            BufferedReader br = new BufferedReader(new FileReader(fileName1));
            BufferedWriter bw = new BufferedWriter(new FileWriter(fileName2));
            StringBuffer sb = new StringBuffer();
            //將文件內容存入StringBuffer中
            while((s = br.readLine()) != null) {
                sb.append(s);
            }
            String str = sb.toString().toLowerCase();
            //分隔字符串並存入數組
            String[] elements = str.split("[^a-zA-Z0-9]+");
            int count = 0;
            Map<String, Integer> myTreeMap = new TreeMap<String, Integer>();
            //遍歷數組將其存入Map<String, Integer>中
            for(int i = 0; i < elements.length; i++) {
                if(myTreeMap.containsKey(elements[i])) {
                    count = myTreeMap.get(elements[i]);
                    myTreeMap.put(elements[i], count + 1);
                }
                else {
                    myTreeMap.put(elements[i], 1);
                }
            }                                          
            System.out.println("單詞統計的結果請見當前目錄result.txt文件");
            //將map.entrySet()轉換成list
            List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(myTreeMap.entrySet());
            //經過比較器實現排序
            Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
                //降序排序
                public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
                    return o2.getValue().compareTo(o1.getValue());
                }
            });
            int num = 1;
            //將結果寫入文件
            for(Map.Entry<String, Integer> map : list) {
                
                if(num <= sb.length()) {
                    bw.write("出現次數第" + num + "的單詞爲:" + map.getKey() + ",出現頻率爲" + map.getValue() + "次");
                    bw.newLine();
                    System.out.println(map.getKey() + ":" + map.getValue());
                    num++;
                }
                else break;
            }
            bw.write("耗時:" + (System.currentTimeMillis() - t1) + "ms");
            br.close();
            bw.close();
            System.out.println("耗時:" + (System.currentTimeMillis() - t1) + "ms");
        } catch (FileNotFoundException e) {
            System.out.println("找不到指定文件!");
        } catch (IOException e) {                                    
            System.out.println("文件讀取錯誤!");
        }
    }
}
public class Word {
    // 統計數字或者字符出現的次數
    public static TreeMap<Character, Integer> Pross(String str) {
        char[] charArray = str.toCharArray();
 
        TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>();
 
        for (int x = 0; x < charArray.length; x++) {
            if (!tm.containsKey(charArray[x])) {
                tm.put(charArray[x], 1);
            } else {
                int count = tm.get(charArray[x]) + 1;
                tm.put(charArray[x], count);
            }
        }
        return tm;
    }
 
    public static void main(String[] args) {
        BufferedReader br = null;
        int line = 0;
        String str = "";
        StringBuffer sb  = new StringBuffer();
        try {
            br = new BufferedReader(new FileReader("D:\\Workspaces\\jiedui\\src\\text.txt"));
            while ((str = br.readLine()) != null) {
              sb.append(str);
                ++line;
            }
            System.out.println("\n文件行數: " + line);
            TreeMap<Character, Integer> tm = Pross(sb.toString());
            System.out.println("\n字符統計結果爲:" + tm);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
}

程序運行截圖:






結隊過程:

-初期尋找隊友,兩人互評博客,找出對方的優點和不足,而後相互補充,作出psp表,初期有了大體的計劃,後期投入實踐,在編程過程遇到的問題較多。數組

結隊照片:

實驗總結:

-從實驗二到實驗四,老師給出的實驗,在開發和代碼編寫上花費大量時間,錯誤頻繁出現修改失敗,一直有bug,很崩潰,可是bug修復後心情也是很激動。在結隊中咱們相互促進,共同尋找實現的方法,可是很惋惜因爲技術方面的不足,附加功能沒有實現。PSP展現了咱們的開發過程,計劃趕不上變化,實際操做的時間遠遠大於計劃時間,程序語言方面存在很大問題,在中途也請教過其餘同窗,有所收穫,可是仍然有解決不了的問題,後續要強加練習和學習,相互討論和監督,獲得了不一樣的提高,在合做過程當中磨合不斷,要學會發現別人身上的閃光點。app

任務三:博文信息表psp:

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

Github地址:https://github.com/aaabaoo/wordcount學習

相關文章
相關標籤/搜索