一.需求分析
經過分析實驗二題目要求,得出的用戶需求主要爲:
- 程序可讀入任意英文文本文件,該文件中英文詞數大於等於1個;
- 程序須要很健壯,能讀取容納英文原版《哈利波特》10萬詞以上的文章;
- 程序能夠實現用戶指定單詞詞頻統計功能;
- 用戶從鍵盤輸入高頻詞輸出的個數k,運行程序統計功能,可按文本中詞頻數降序顯示前k個單詞的詞頻及單詞;
- 統計該文本全部單詞數量及詞頻數,並能將單詞及詞頻數按字典順序輸出到文件result.txt。
二.功能設計
基本功能
- 功能一:程序在讀入英文文本的基礎上能實現統計用戶指定單詞出現的頻率的功能;
- 功能二:在功能一的基礎上用柱狀圖顯示出單詞出現頻率的高低;
- 功能三:用戶從鍵盤輸入高頻詞輸出的個數k,運行程序統計功能,可按文本中詞頻數降序顯示前k個單詞的詞頻及單詞;
- 功能四:統計出文本中全部單詞的數量並將單詞輸出到文件result.txt中
三.設計與實現
- 該程序中經過count.java來實現文本的單詞統計功能,指定單詞的統計及將單詞輸出到文件result.txt中;
- 在設計程序的讀入任意英文文本的設計中使用bufferedreader,其做用是從字符輸入流中讀取文本,緩衝各個字符,從而實現字符、數組和行的高效讀取;
BufferedReader br = new BufferedReader(new FileReader("test.txt"));
bufferedwriter:將文本寫入字符輸出流,緩衝各個字符,從而提供單個字符、數組和字符串的高效寫入;
四.測試運行
程序運行結果以下圖所示:
- 單詞總個數爲:
![](http://static.javashuo.com/static/loading.gif)
- 單詞出現頻數爲:
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
- 指定查找單詞個數爲:
![](http://static.javashuo.com/static/loading.gif)
五.代碼片斷
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);
}
String f = find.next();
String word="";
int index=1;
int value=0;
for (Map.Entry<String, Integer> entry : list) {
if(entry.getKey().equals(f)){//
word=entry.getKey();
value=entry.getValue();
index=1;
break;
}else{
index=0;
}
}
if(index==1){
System.out.println("所查詢的單詞"+word+"出現的次數爲:"+value);
}else{
System.out.println("對不起沒有查詢到該單詞!");
}
六.總結
- 此次的實驗看似是一個簡單的我的項目,可是對於編程基礎薄弱的我來講是一個巨大的挑戰。在剛開始看到做業題目時,我認真分析了一下題目要求,大概明白程序所要實現的功能,可是對於具體的實現我毫無頭緒,不知道該如何下手。因此我在前期蒐集了許多關於詞頻統計的資料,嘗試着去理解其中類各函數的做用 ,java的語法結構,類的定義等。因爲我能力有限,因此沒有徹底按照老師要求實現上述每一項功能。 一個軟件的設計前期要認真進行需求分析,部署好每一步,爲軟件的設計作好充分的準備,其次是要有必定的編程基礎。經過此次的實驗,我感觸頗深,因此在之後的學習中,我要認真學習編程,一點一點的去彌補本身的不足,雖然學習一門語言不是一天兩天就可以學會的,但我相信天天學習一點總會有進步的。
七.PSP
任務內容 |
計劃完成時間(min) |
實際完成時間 |
計劃 |
10 |
15 |
規劃工做步驟 |
15 |
20 |
開發 |
200 |
240 |
需求分析 |
10 |
12 |
文檔生成 |
10 |
15 |
設計複審 |
10 |
13 |
代碼規範 |
10 |
10 |
具體編碼 |
120 |
140 |
代碼複審 |
10 |
13 |
測試 |
5 |
8 |
報告 |
15 |
20 |
測試報告 |
5 |
6 |
計算報告量 |
5 |
5 |
總結 |
10 |
8 |