1.使用java代碼,對存放在java工程下的Word.txt中的全部單詞進行統計。 2.按照需求,將指定單詞統計的結果按照要求的方式顯示出來(題目要求按照柱形圖的形式顯示)。 3.高頻單詞的統計功能,輸入整數K,按照單詞的詞頻數顯示前K個數以及單詞。 4.將1中的統計結果寫入到result.txt中。 5.要求代碼健壯,代碼簡介,代碼質量高。
1.基本功能: a.首先要實現全部單詞的統計,爲之後找指定單詞的統計奠基基礎,便於進行比較。 b.在將全部單詞都已統計的基礎上,對出現次數最多的單詞進行顯示,並顯示前k個數。(k爲輸入的正整數) c.在指定單詞查找成功後,顯示出該單詞在文章中的出現次數的柱形圖。 d.將基本功能中的統計出的單詞的統計結果寫入到result.txt中。
我主要設計了兩個類,即Test測試類和WordCount統計詞數兩個類,Test主要是主測試類,它是程序運行的入口,主要是實現各個功能模塊的實現,a.指定單詞的查找以及其柱形圖的顯示。b.高頻單詞的查找。c.將統計結果存放至result中。其次一個類是Wordcount類,它主要實現方法的封裝,便於主測試類對其的調用,增強代碼的健壯性。 我主要涉及了緩衝流的使用,以及輸入輸出函數的頻繁使用,以及集合的使用,以及可視化界面的應用。
1.程序運行截圖:
指定單詞的查找以及柱形圖:java
高頻詞數的統計:git
將統計好的單詞存放至result.txt中:github
//高頻詞數的統計以及顯示 public void two(TreeMap<String,Integer> map,int k){ //傳入參數k,以及集合map ArrayList<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(map.entrySet()); //聲明集合list //接口的實現傳遞給Collections.sort方法 Collections.sort(list,new Comparator<Map.Entry<String,Integer>>(){ public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { return o2.getValue() - o1.getValue(); } }); //輸出前k個數 for(int i = 0; i<k; i++){ System.out.println(list.get(i).getKey()+ ": " +list.get(i).getValue()); } }
緣由:我剛開始在進行高頻單詞統計的時候,遇到了不少的問題,在網上查找了不少關於排序方法以及資料。剛開始想到簡單的排序方法,可是有考慮map集合中的元素是以鍵值對的形式存放,是比較繁瑣的,就想到用比較器Comparator,它能對不一樣類型的對象進行排序,它排序的依據是基本類型,也不用本身實現排序算法,用起來很方便。對任意類型集合對象進行總體排序,排序時將此接口的實現傳遞給Collections.sort方法或者Arrays.sort方法排序。在i<k的狀況下,即顯示的個數小於map中單詞的總個數,程序正常運行。以前用的HashMap,List等集合比較多,此次用了TreeMap,主要是它自己就有排序的功能,應用在這裏是比較方便的。
個人設計思路:首先,我是以個人Test類爲核心,根據老師提出的要求,將其劃分紅主要的三個模塊,根據輸入的模塊的指定的數字,實現其指定的功能,在WordCount中直接調用已封裝好的方法,將各個模塊功能封裝在另類,減小了代碼與代碼之間的依賴性和不相關性,提升了代碼的獨立性,方便之後不會出現修修改改代碼的狀況,在其餘地方應用該功能時,只須要直接調用改方法便可,不須要再修改原碼,這樣代碼會有很強的健壯性和高質量性,便於之後的開發。算法
PSP2.1 | 任務內容 | 計劃共完成須要的時間(min) | 實際完成須要的時間(min) |
Planning | 計劃 | 6 | 5 |
Estimate | 估計這個任務須要多少時間,並規劃大體工做步驟 | 10 | 14 |
Development | 開發 | 200 | 300 |
Analysis | 需求分析 (包括學習新技術) | 3 | 5 |
Design Spec | 生成設計文檔 | 5 | 7 |
Design Review | 設計複審 (和同窗一塊兒審覈設計文檔) | 5 | 8 |
Coding Standard | 代碼規範 (爲目前的開發制定合適的規範) | 3 | 3.5 |
Design | 具體設計 | 14 | 15 |
Coding | 具體編碼 | 180 | 260 |
Code Review | 代碼複審 | 6 | 9 |
Test | 測試(自我測試,修改代碼,提交修改) | 6 | 5 |
Reporting | 報告 | 10 | 13 |
Test Report | 測試報告 | 6 | 10 |
Size Measurement | 計算工做量 | 5 | 8 |
Postmortem & Process Improvement Plan | 過後總結 ,並提出過程改進計劃 | 5 | 5 |
總結:本身這個項目是計劃的很順利,思路很清晰的。可是在實際開發中是仍是遇到了很大的問題,在寫柱形圖這塊的時候,確實遇到很大的問題,包括繼承JFrame類,以及Paint中一些方法的使用。還有在高頻詞統計的時候,對比較器的使用,仍是不太熟練的,花費了較多的時間。模塊化
源代碼連接地址:https://github.com/runju/WordCount函數