201671010430 司昕劼 詞頻統計軟件項目報告
阿新 • • 發佈:2019-03-20
錯誤 aop epo ext process ring 大於 tps 實現
實驗要求:(https://www.cnblogs.com/nwnu-daizh/p/10487329.html)
需求分析
- 程序可讀入任意英文文本文件,該文件中英文詞數大於等於1個。
- 程序需要很壯健,能讀取容納英文原版《哈利波特》10萬詞以上的文章。
- 指定單詞詞頻統計功能:用戶可輸入從該文本中想要查找詞頻的一個或任意多個英文單詞,運行程序的統計功能可顯示對應單詞在文本中出現的次數和柱狀圖。
- 高頻詞統計功能:用戶從鍵盤輸入高頻詞輸出的個數k,運行程序統計功能,可按文本中詞頻數降序顯示前k個單詞的詞頻及單詞。
統計該文本所有單詞數量及詞頻數,並能將單詞及詞頻數按字典順序輸出到文件result.txt。
功能設計
- 基本功能:程序可讀入任意英文文本文件,該文件中英文詞數大於等於1個。程序需要很壯健,能讀取容納英文原版《哈利波特》10萬詞以上的文章。指定單詞詞頻統計功能:用戶可輸入從該文本中想要查找詞頻的一個或任意多個英文單詞,運行程序的統計功能可顯示對應單詞在文本中出現的次數
- 擴展功能:用戶從鍵盤輸入高頻詞輸出的個數k,運行程序統計功能,可按文本中詞頻數降序顯示前k個單詞的詞頻及單詞。.統計該文本所有單詞數量及詞頻數,並能將單詞及詞頻數按字典順序輸出到文件result.txt。
設計實現
- 此軟件有兩個類:(1)WordCount.java主要實現文件的讀入和選擇對應的功能。根據用戶輸入的選擇調用對應的方法。(2)方法在Tongji.java中,oneWord(取一個單詞的頻率),gaopin(根據用戶輸入的k值取高頻詞),out(將單詞和詞頻數按字典順序輸入到result.txt文件)
測試運行
1.顯示單詞詞頻(因個人能力問題再沒有做柱狀圖)
2.輸出前K個高頻詞
3.向result.txt寫入單詞和詞頻
主要代碼
- 文件功能選擇
Scanner input = new Scanner(System.in); int i=input.nextInt(); switch(i){ case 1: //提示用戶輸入單詞,並提示用什麽符號隔開 System.out.printf("請輸入你要查找的單詞,並用';'隔開"); String str= input.next(); Tongji tj=new Tongji(); a=tj.oneword(map,str); //通過方法調用來實現單個單詞的頻率 break; //用break中斷循環,否則一直執行,直到最後 case 2: Scanner sc=new Scanner(System.in); System.out.println("請輸入要查看的高頻詞頻的個數:"); int k = sc.nextInt(); Tongji tj1=new Tongji(); tj1.gaopin(map, k); //通過方法調用來實現單個單詞的頻率 break; case 3: Tongji tj2=new Tongji(); tj2.out(map); //通過方法調用來存入result文件 break; } }
//存入單詞詞頻進入文件
public void out(Map<String,Integer> map ){//傳入集合
File f=new File("result.txt"); //創建文件result.txt
try{
if(!f.exists()){
f.createNewFile(); //如果文件不存在則創建文件
}
FileWriter ff=new FileWriter(f.getCanonicalFile());//寫文件
for(Entry<String,Integer> entry:map.entrySet()){
ff.write(entry.getKey()+"/"+entry.getValue()+" "+"\n");//遍歷
}
ff.close(); //文件流關閉
System.out.println("統計輸出完成!");
}
catch(IOException e){
e.printStackTrace();
}
}
總結
以功能塊為單位進行程序設計,實現其求解算法的方法稱為模塊化。
在Tongji類中,用三個函數實現了模塊化。在與主函數的交互過程中通過用戶輸入值來調用相應的功能模塊來驅動目標實現。
PSP展示
PSP2.1 | 任務內容 | 計劃共完成需要的時間(min) | 實際完成需要的時間(min) |
---|---|---|---|
Planning | 計劃 | 30 | 60 |
· Esitimate | 估計這個任務需要多少時間,並規劃大致工作步驟 | 200 | 400 |
· Development | 開發 | 240 | 300 |
· Analysis | 需求分析(包括學習新技術) | 10 | 15 |
· Design Spec | 生成設計文檔 | 20 | 15 |
· Design Review | 設計復審(和同事審核設計文檔) | 15 | 15 |
· Coing Standard | 代碼規範(為目前開發制定合適的規範) | 10 | 10 |
· Design | 具體設計 | 20 | 30 |
· Coding | 具體編碼 | 240 | 300 |
· Code Review | 代碼復審 | 6 | 9 |
· Test | 測試(自我測試,修改代碼,提交修改) | 25 | 33 |
· Reporting | 報告 | 10 | 15 |
· Test Report | 測試報告 | 15 | 17 |
· Size Measurement | 計算工作量 | 5 | 3 |
· Postmortem&Process Improvement Plan | 事後總結,並提出過程改進計劃 | 5 | 3 |
雖然老師上課講了做東西之前要進行需求分析,也認真做了需求分析,但是在實際實現的過程中耗時且有很多缺點。比如長時間未使用Java,竟然導致犯一些低級錯誤(在數據從鍵盤輸入後忘記用next來接收)。而且在實現過程中總是需要借助於外力才可以去實現這些功能。但是一步步的也實現了功能。在開發階段用的時間比預計的多的多,還是說明了自己的不熟悉。總之還是要多練習,熟能生巧吧!
201671010430 司昕劼 詞頻統計軟件項目報告