201671010423 詞頻統計軟件項目報告
阿新 • • 發佈:2019-03-19
類的定義 key值 style txt文件 ide 集合 jdk8 英文 hub
需求分析
1.程序可讀入任意英文文本文件,該文件中英文詞數大於等於1個。
2.程序需要很壯健,能讀取容納英文原版《哈利波特》10萬詞以上的文章。
基本功能
1.指定單詞詞頻統計功能:用戶可輸入從該文本中想要查找詞頻的一個或任意多個英文單詞,運行程序的統計功能可顯示對應單詞在文本中出現的次數和柱狀圖。
2.高頻詞統計功能:用戶從鍵盤輸入高頻詞輸出的個數k,運行程序統計功能,可按文本中詞頻數降序顯示前k個單詞的詞頻及單詞。
3.統計該文本所有單詞數量及詞頻數,並能將單詞及詞頻數按字典順序輸出到文件result.txt。
環境需求
1.測試機環境:Windows環境 2.JDK版本:jdk8u161 3.JRE版本:jre8u161
功能設計
1.新建文本文件data.txt
2.統計各個單詞出現的次數
3.如果次數相同,安裝單詞的字典順序排序
4.輸出單詞個數
5.輸入要查詢的單詞,顯示它出現的次數
6.輸出結果並將其存儲到result.txt文件中
設計實現
通過Map集合,以鍵值對的方式去存儲單詞和出現的次數,定義一個文件字節讀取流,去讀取磁盤中的文件,創建了一個BufferReader的緩沖流,將字符流對象傳進去,提高讀取的效率,創建一個split數組,用來分割字符串,通過調用map的key值獲取value,進行單詞統計,用TreeMap實現Comparator接口,對Map集合進行排序
測試運行
- 程序的運行截圖如下圖:
- 單詞查找:
- 單詞個數統計:
- 詞頻統計:
- 詞頻輸出結果:
- 單詞查找:
代碼片段
- 詞頻統計
Map<String, Integer> wordsCount = new TreeMap<String,Integer>(); //存儲單詞計數信息,key值為單詞,value為單詞數 //單詞的詞頻統計 for (String li : lists) { if(wordsCount.get(li) != null){ wordsCount.put(li,wordsCount.get(li) + 1); }else{ wordsCount.put(li,1);
- 詞頻數降序顯示
ArrayList<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(oldmap.entrySet());
Collections.sort(list,new Comparator<Map.Entry<String,Integer>>(){
@Override
public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
return o2.getValue() - o1.getValue(); //降序
}
});
- 詞頻結果輸出到指定文件
try{
FileWriter fr=new FileWriter("D:\\results.txt");
BufferedWriter txt=new BufferedWriter(fr);
for (Map.Entry<String,Integer> entry: list) {
txt.write(entry.getKey()+":"+entry.getValue());
txt.newLine();
}
txt.flush();
txt.close();
System.out.println("詞頻統計結果已輸出到result.txt文件!");
}
catch(IOException e) {
e.printStackTrace();
展示PSP
任務內容 | 計劃共完成需要的時間(min) | 實際完成需要的時間(min) |
計劃 | 10 | 9 |
估計這個任務需要多少時間,並規劃大致工作步驟 | 15 | 20 |
開發 | 200 | 230 |
需求分析 (包括學習新技術) | 10 | 10 |
生成設計文檔 | 10 | 15 |
設計復審 (和同事審核設計文檔) | 10 | 12 |
代碼規範 (為目前的開發制定合適的規範) | 10 | 9 |
具體設計 | 40 | 45 |
具體編碼 | 120 | 130 |
代碼復審 | 15 | 12 |
測試(自我測試,修改代碼,提交修改) | 30 | 40 |
報告 | 15 | 15 |
測試報告 | 5 | 6 |
計算工作量 | 5 | 3 |
事後總結 ,並提出過程改進計劃 | 6 | 4 |
具體設計和具體編碼環節耗時最多,測試(自我測試,修改代碼,提交修改)環節估計和實踐相差巨大。具體原因可能要歸結於由於Java編程功底很弱,對於Java語法結構、類的定義、函數的構造等知識方面都嚴重匱乏導致在代碼編碼上浪費了很多時間。
本次作業項目github地址
201671010423 詞頻統計軟件項目報告