201671030116宋菲菲 《英文文本統計分析》結對項目報告


信息表:

項目 內容
做業所屬課程 http://www.cnblogs.com/nwnu-daizh/
做業要求 https://www.cnblogs.com/nwnu-daizh/p/10569690.html/
課程學習目標 熟悉軟件開發總體流程,提高自身能力
幫助實現目標 第一次體驗一個完整的工程

任務1

博客地址
github地址 html

  • 點評內容:經過閱讀你的博文,我認爲你的博文的結構不是很清晰,沒有充分利用Markdown編輯的特色,我建議能夠將每一個模塊用加粗字體或副標題加以區分。博客內容很簡練。經過瀏覽你的PSP,發現你的計劃時間與實際運行時間幾乎相同,我認爲你的計劃作得很到位,可是看了實際的代碼運行結果,我發現你的不少功能都沒有實現,但願下次能夠繼續努力,完善項目。
  • 點評心得:閱讀完這位同窗的博文,我認爲她對時間的把控能力很好,PSP表能夠看出是一個很會計劃時間的人,這一點值得我去學習。可是她的部分任務沒有完善,但願此次的結對項目對她有所幫助,也但願經過此次的結對項目,相互學習,共同進步。

任務2

源碼地址 git

1.需求分析

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

2.軟件設計

項目主要包含三個類,一個是主函數Main,一個是統計單詞的類SortResult,還有一個是繪製柱狀圖paint。

  • 主函數Main中實現圖形用戶界面,實現各個功能。輸入框3個,分別是原文本文件的文件名(採用相對路徑),想要查找的一個或多個單詞及繪製柱狀圖,想要查找的N個高頻詞及其詞頻數。兩個按鈕,分別是「肯定」和「取消」。因爲兩個查找在同一個面板,防止出現衝突,若兩個輸入框均有輸入,則實現第一個輸入框的功能。點擊肯定後,直接將字典順序輸出到result.txt文本中,而且實現相應功能。
  • SortResult中將文本中的每一個單詞按照字典順序將單詞及詞頻數輸出到result.txt文本文件中。
  • paint中對柱狀圖美化。


3.核心功能代碼展現

除去冠詞、代詞、介詞兩種方法

直接刪除

int i,j;
    for(j=0;j<List.size();j++) 
    {  
        for(i=0;i<Eword.size();i++)
        {
            if(Eword.get(i).equals(List.get(j).getKey()))
            {
                List.remove(j);
                break;                  
            }
        }
   }

新建一個Map存放刪選後的單詞映射:

Map<String, Integer> map1=new LinkedHashMap<String, Integer>();
    for(Entry<String,Integer> m: map) 
    {  
        for(i=0;i<Eword.size();i++)
        {
            if(Eword.get(i).equals(m.getKey()))
            {
                break;
            }
        }
        if(i>=Eword.size())
        {
            map1.put(m.getKey(), m.getValue());  
        }
    }  
    Set<Entry<String,Integer>> Map1=map1.entrySet();  
    LinkedList<Entry<String, Integer>> List = new LinkedList<Entry<String,Integer>>(Map1);

        //排序
    Collections.sort(List, new Comparator<Entry<String,Integer>>() {  
        @Override  
        public int compare(Entry<String, Integer> wk1,  Entry<String, Integer> wk2) {
            return wk1.getKey().compareTo(wk2.getKey());  
        }  
    });

本來的代碼實如今paint中畫圖顯示,可是爲了傳參,new main()後顯示出柱狀圖後會跳出Main函數的主框架

public paint(){
    JFreeChart chart = ChartFactory.createBarChart3D(
                    "詞頻統計", 
                        "單詞", 
                        "數量",
                        new Main().dataset, 
                        PlotOrientation.VERTICAL,
                        true,         
                        false,
                        false      
                        );
   
    CategoryPlot plot=chart.getCategoryPlot();//獲取圖表區域對象
    CategoryAxis domainAxis=plot.getDomainAxis();         //水平底部列表
     domainAxis.setLabelFont(new Font("黑體",Font.BOLD,14));         //水平底部標題
     domainAxis.setTickLabelFont(new Font("宋體",Font.BOLD,12));  //垂直標題
     ValueAxis rangeAxis=plot.getRangeAxis();//獲取柱狀
     rangeAxis.setLabelFont(new Font("黑體",Font.BOLD,15));
      chart.getLegend().setItemFont(new Font("黑體", Font.BOLD, 15));
      chart.getTitle().setFont(new Font("宋體",Font.BOLD,20));//設置標題字體
         
     frame1=new ChartPanel(chart,true);
     
}

爲了解決問題,將創建圖表信息的代碼寫入在main中,統計用戶輸入單詞詞頻及繪製柱狀圖

for(i=0; i<input.length; i++) 
                {
                    for(Entry<String, Integer> entry : wordsStatistics.entrySet()) 
                    { 
                        if(input[i].equals(entry.getKey()))
                        {
                            map.put(entry.getKey(), entry.getValue());

                            print2+=entry.getKey()+":\n";
                            for(int j=0;j<entry.getValue()/100;j++)
                                print2+="*";
                            print2+="\n";
                            print += entry.getKey() + ":" + entry.getValue()+"    "; 
                            dataset.addValue(entry.getValue(),entry.getKey(),entry.getValue());
                            break;
                        }
                     } 
                 }
                long end = System.currentTimeMillis();
                JOptionPane.showConfirmDialog(null, print+print2+"\n運行時長"+(end-start)+"ms","結果",JOptionPane.DEFAULT_OPTION);
                
                JFreeChart chart = ChartFactory.createBarChart3D(
                        "詞頻統計", // 圖表標題
                        "單詞", // 文件夾軸的顯示標籤
                        "數量", // 數值軸的顯示標籤
                        dataset,//.dataset, // 數據集
                        PlotOrientation.VERTICAL, // 圖表方向:水平、垂直
                        true,           // 是否顯示圖例(對於簡單的柱狀圖必須是false)
                        false,          // 是否生成工具
                        false           // 是否生成URL連接
                        );
    
                paint p = new paint(chart);
                JFrame frame=new JFrame("Java數據統計圖");
                frame.setLayout(new GridLayout(2,2,10,10));
                frame.add(p.getChartPanel());           //加入柱形圖
                frame.setBounds(50, 50, 800, 600);
                frame.setVisible(true);
            }

統計行數、列數

while((read = br.readLine()) != null)
    {  
        linenumber++;//行數
        charnumber+=read.length();//字符數
                for (String w:read.split("[^a-zA-Z]")) 
        {
               if(w.length()!= 0)
               {
                   list.add(w);  
               }  
          }  
    }

4.程序運行

程序運行前添加自定義jar包Libraries:



統計用戶輸入單詞的詞頻,顯示系統運行時間:



生成相應的柱狀圖:



若不退出程序繼續查看其它單詞詞頻,則柱狀圖將相應的單詞柱狀圖添加到原有的圖中:



要除去的冠詞、代詞、介詞:



統計用戶輸入的n個文本中除冠詞、代詞、介詞以外的高頻詞並顯示運行時間:



統計該文本行數、字符數及每一個單詞和相應的詞頻,並將其寫入到文件中,生成result.txt文件:



5.結對過程:

6.PSP

PSP2.1 任務內容 計劃完成時間(min) 實際完成時間(min)
Planning 計劃 20 20
.Estimate .估計這個任務須要多少時間,並規劃大體工做步驟 20 20
Development 開發 700 9600
.Analysis .需求分析(包括學習新技術) 30 30
.Design Spec .生成設計文檔 35 30
.Design Review .設計複審 10 10
.Coding Standard .代碼規範 5 5
.Design .具體設計 60 60
.Coding .具體編碼 480 720
.Code Review .代碼複審 60 80
.test .測試 20 25
Reporting 報告 120 120
.Test Report .測試報告 100 100
.Size Measurement .計算工做量 20 20
.Postmortem & Process Improvement Plan .過後總結,病提出過程改進計劃 28 20

7.小結感覺

此次的合做讓我切身感覺到結對項目的過程,讓我體會到了交流溝通對結對合做的重要性,有時候兩我的的想法會發生分歧,很好的溝通會使咱們的效率變得更高。
分工明確會使項目進展較快,不會在同一個問題上浪費時間。遇到問題時,會相互溝通交流,解決問題。github

相關文章
相關標籤/搜索