項目 | 內容 |
---|---|
這個做業屬於哪一個課程 | 2016級軟件工程 |
這個做業的要求在哪裏 | 第四次做業要求 |
課程學習目標 | 熟悉軟件開發總體流程,提高自身能力 |
本次做業在哪一個具體方面幫助咱們實現目標 | 第一次體驗一個完整的工程 |
點評的博客:201671030103仇素龍實驗二詞頻統計軟件項目報告html
點評博客的代碼的github連接地址:實驗二代碼git
點評內容:1.本篇博客寫的很認真,排版也比較清晰,老師所要求的基本功能也都基本實現了。可是仍是存在一些問題。首先是實驗結果的截圖result.txt文件不該該在Java界面直接給出,而是應該寫在單獨的文本文件中。再一個「結果發現此次程序設計包含的模塊其實很清楚」,由此句話能夠看出來博主在編寫程序的時候沒有作好充分的準備就寫代碼,這是不對的,然後面博主在進行了需求分析等一系列工做以後對本身要編寫的代碼也有了清楚的瞭解這點很好。最後,在PSP部分,博主在「估計這個任務須要多少時間,並規劃大體工做步驟」的時候預估會花費20分鐘,這顯然是不合適的,還但願博主之後可以進行合理的PSP規劃。2.在運行對方的代碼的時候,學到了不少知識。我在第二個實驗的時候沒有實現柱狀圖的統計這一個功能,可是對方卻用了一個簡單的方法用「X」的多少來表明其柱的長短,這也是一種方法。這讓我知道了有時候在咱們遇到不會解決或者沒辦法解決的問題的時候咱們能夠試着去換一個思路,說不定效果就比咱們預期的要好不少。
點評心得:經過閱讀對方的博客和查看代碼,能夠學到不少本身沒有注意到或欠缺的東西,好比進行一個項目以前如何很好的進行需求分析,需求分析和任務分配對後續的代碼實現部分有多大的影響。在實現的時候遇到本身沒有辦法實現的功能要求的時候能夠轉換本身的想法,用簡單易懂的方法來代替沒有辦法完整描述的功能。上一次的實驗咱們兩個都沒有實現人機交互界面,因此在此次的實驗中咱們兩個在這一方面下了很大的功夫來進行學習和改善,進咱們最大的努力實現了人機交互界面。
(1)單詞頻數利用可視化柱狀圖實現github
public JFreeChart ShowCountHistogram(BufferedReader bufferedReader) throws IOException { CategoryDataset dataset = getDataSet(bufferedReader); JFreeChart chart = ChartFactory.createBarChart3D( "英文文本詞頻統計圖", // 圖表標題 "單詞名稱", // 目錄軸的顯示標籤 "次數", // 數值軸的顯示標籤 dataset, // 數據集 PlotOrientation.VERTICAL, // 圖表方向:水平、垂直 true, // 是否顯示圖例(對於簡單的柱狀圖必須是false) false, // 是否生成工具 false // 是否生成URL連接 ); 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)); //設置標題字體 return chart; }
(2)統計文本中除冠詞、代詞、介詞以外的高頻詞的實現算法
public Map<String, Integer> selectExceptFunctionWord(BufferedReader bufferedReader) throws IOException { Map<String, Integer> map = this.selectWordCountByDOrder(bufferedReader); Map<String, Integer> exceptFunction = new LinkedHashMap<String, Integer>(); for (Map.Entry<String, Integer> w :map.entrySet()) { if(!w.getKey().equals("the")&&!w.getKey().equals("is")&&!w.getKey().equals("you")&&!w.getKey().equals("yourself")&&!w.getKey().equals("your")&&!w.getKey().equals("them")&&!w.getKey().equals("their")&&!w.getKey().equals("to")&&!w.getKey().equals("by")&&!w.getKey().equals("is")&&!w.getKey().equals("a")&&!w.getKey().equals("and")&&!w.getKey().equals("was")&&!w.getKey().equals("has")&&!w.getKey().equals("had")&&!w.getKey().equals("I")&&!w.getKey().equals("for")&&!w.getKey().equals("my")&&!w.getKey().equals("me")&&!w.getKey().equals("with")&&!w.getKey().equals("of")&&!w.getKey().equals("in")&&!w.getKey().equals("on")&&!w.getKey().equals("that")&&!w.getKey().equals("it")&&!w.getKey().equals("The")&&!w.getKey().equals("at")&&!w.getKey().equals("which")&&!w.getKey().equals("he")&&!w.getKey().equals("as") &&!w.getKey().equals("but")&&!w.getKey().equals("his")&&!w.getKey().equals("from")&&!w.getKey().equals("some")&&!w.getKey().equals("be")&&!w.getKey().equals("were")&&!w.getKey().equals("not") &&!w.getKey().equals("they")&&!w.getKey().equals("this")&&!w.getKey().equals("an")&&!w.getKey().equals("no")&&!w.getKey().equals("into")&&!w.getKey().equals("It")&&!w.getKey().equals("there")&&!w.getKey().equals("But")&&!w.getKey().equals("him")&&!w.getKey().equals("could")&&!w.getKey().equals("been")&&!w.getKey().equals("would")&&!w.getKey().equals("she")&&!w.getKey().equals("then")&&!w.getKey().equals("Then")&&!w.getKey().equals("have")) { exceptFunction.put(w.getKey(), w.getValue()); }} return exceptFunction; }
(3)降序排列數據庫
public Map<String, Integer> selectWordCountByDOrder(BufferedReader bufferedReader) throws IOException { Map<String, Integer> map = this.AllWordCount(bufferedReader); List<Map.Entry<String, Integer>> nlist = new LinkedList<Map.Entry<String, Integer>>(map.entrySet()); Collections.sort(nlist, new Comparator<Map.Entry<String, Integer>>() { @Override public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) { int compare = (o1.getValue()).compareTo(o2.getValue()); return -compare; } }); Map<String, Integer> result = new LinkedHashMap<String, Integer>(); for (Map.Entry<String, Integer> entry : nlist) { result.put(entry.getKey(), entry.getValue()); } return result; }
主界面:
編程
獲取文本行數的結果:
數據結構
獲取文本字符數:
框架
獲取詞頻按照字典順序排序:
dom
讀取文本詞頻獲取柱狀圖:
數據結構和算法
讀取指定單詞出現次數:
獲取文本降序排列
讀取冠詞、介詞、代詞之外的高頻詞
二、對對方的評價
(1)是一個友善的人,願意合做與交流,在與個人合做學習和探究活動中,能選擇本身擅長的方式(語言、文字、圖表等)表述研究過程和結果;主動提供本身的資料和想法,與我分享本身智慧,思路,體驗合做的愉快。能傾聽和尊重我提出的不一樣觀點和評議,能對研究過程和結果進行評議,並與我交換意見,充分體現結對編程的價值。
(2)是個謙遜的人,在與個人合做交流中,咱們作到相互尊重,相互信賴,認真傾聽對方意見,敢於認可本身的不足,有虛心向對方學習請教的良好風尚,能在合做交流中正確地評價本身和他人,學會分享他人成功的喜悅。可以在合做交流中明確本身的責任,並履行本身承擔的職責。具備與他人進行合做交流的態度與能力。
(3)有集體責任感,善於合做。在合做學習中充分發揮本身的特長,爲實現集體目標做出了貢獻。積極搜索資料,善於彼此分享交流,有無私的精神。尊重並理解他人,具備創新精神和動手操做能力,養成了合做交流的習慣。
(4)在結對合做學習過程當中,能創造和諧的氣氛,促進小組成員之間和諧的共同的完成各自任務,爲養成健全人格奠基了基礎。能爲研究活動準備、計劃,全面統籌的能力獲得了鍛鍊;能總結「‘共同解決了什麼問題、小組還有什麼問題沒有解決?」「咱們小組作得最好的是哪些人?還有哪方面他們可以作得更好?」具備必定的領導才能。
三、對方編程習慣總結
個人搭檔仇素龍同窗編程很是規範,有着必定的編程水準,代碼完整規範。並且具備必定的數據結構和算法功底,在此次項目的編寫過程當中數據庫的基礎都獲得充分的體現。雖然編寫代碼速度不快,可是程序執行起來效率高,審覈代碼得時候也比較快,和她搭檔很是舒服,是我學習的榜樣。
PSP2.1 | 任務內容 | 計劃共完成須要的時間(h) | 實際完成須要的時間(h) |
---|---|---|---|
Planning | 計劃 | 0.4 | 0.4 |
Estimate | 估計這個任務須要多少時間,並規劃大體工做步驟 | 15 | 20 |
Development | 開發 | 2 | 3 |
Analysis | 需求分析 (包括學習新技術) | 5 | 6 |
Design Spec | 生成設計文檔 | 2 | 1.5 |
Design Review | 設計複審 (和同事審覈設計文檔) | 1 | 1 |
Coding Standard | 代碼規範 (爲目前的開發制定合適的規範) | 0.5 | 0.5 |
Design | 具體設計 | 5 | 5 |
Coding | 具體編碼 | 15 | 18 |
Code Review | 代碼複審 | 0.5 | 0.5 |
Test | 測試(自我測試,修改代碼,提交修改) | 0.5 | 0.5 |
Reporting | 報告 | 1 | 2 |
Test Report | 測試報告 | 0.5 | 0.5 |
Size Measurement | 計算工做量 | 0 | 0 |
Postmortem & Process Improvement Plan | 過後總結 ,並提出過程改進計劃 | 0.5 | 0.5 |