201671030118 詞頻統計軟件項目報告

(一).需求分析

—程序可讀入任意的英文文本文件,該文件中的英文詞數大於等於一個。 
—可以讀取容納英文原版《哈利波特》10萬詞以上的文章。
—.要有指定單詞的詞頻統計功能,即用戶可輸入從該文本中想要查找詞頻的一個或任意多個英文單詞,運行程序的統計功能可顯示對應單詞在文本中出現的次數和柱狀圖;
—高頻單詞統計功能,即用戶共鍵盤輸入高頻詞輸出個數k,運行程序統計功能,可按文本中詞頻數降序顯示前k個單詞的詞頻及單詞;
—統計該文本全部單詞數量及詞頻數,並能將單詞及詞頻數按字典順序輸出到文件result.txt

(二)功能設計

基本功能:
—統計文件中單詞,並輸出到指定文件
—根據題目要求讀入文件
— 查詢文件中單詞出現的次數
—文本中的詞頻數降序顯示前K個單詞以及柱狀圖
擴展功能:
目前沒有java

(三).設計實現

Figure.java :統計前K個出現的頻次最高的單詞及詞頻的柱狀圖
StatisticalWord.java: 輸入一個單詞統計單詞在文章中出現的個數,若是不在提示不在!
WordList.java :統計文件中單詞出現的頻數並輸出到文件
這三個類和一個Main()函數,用戶能夠根據不一樣功能進行選擇git

(四).測試運行

功能1: 統計單詞個數,並把結果存到result.txt中。

功能2:輸入一個單詞,統計其在文中出現的詞數。

沒有此單詞:

功能3:出入前最高K個詞頻從多到少並用柱狀圖(因爲圖片大小緣故柱狀圖沒有顯示明顯的差距。)

(五).關鍵代碼

顯示柱狀圖:

System.out.println("請輸入要查看的最高詞頻的個數:");
int k = sc.nextInt();
if(k>0&&k<=ordlist.size())
{
System.out.println("----------詞頻最高的前"+k+"個單詞及其柱狀圖-----------");github

for (Map.Entry<String, Integer> entry : ordlist) {
                    
                    System.out.printf("單詞 "+"%-8s" + "出現" +"%-3d"+"次 ",entry.getKey(),entry.getValue());    
                    //用符號個數來顯示模擬柱狀圖
                        for(int i=entry.getValue();i>0;i--)
                        {
                            System.out.print("▏");
                        }
                        System.out.println();
                        //System.out.println(entry.getKey() + ":" + entry.getValue());
                        
                        if(--k==0)
                            break;//k=0,則再也不輸出後面的詞頻                  
                    
                }
                System.out.println("------------------------------------------------"); 

            }else{
                System.out.println("輸入有誤!請從新輸入!");
            }

將輸出結果發送到results.txt中:

try
            {
                
                FileWriter fw= new FileWriter("src\\results.txt");
                System.out.println("詞頻統計結果已輸出列 result.txt文件·");
            } 
            catch (IOException e)
            {
                
                e.printStackTrace();
            }

進行排序

Comparator<Map.Entry<String, Integer>> valcom = new Comparator<Map.Entry<String,Integer>>() {
        public int compare(Map.Entry<String, Integer> rst1,Map.Entry<String, Integer> rst2) {
            int sortrst=rst2.getValue()-rst1.getValue();
            return sortrst;
            
            }     
        };
            List<Map.Entry<String, Integer>> ordlist = new ArrayList<Map.Entry<String,Integer>>(map.entrySet());
            Collections.sort(ordlist,valcom);

(六).總結

經過此次的項目發現,以前學過的JAVA忘的一乾二淨,原本就基礎很差,學到的一點也忘了,因此此次代碼編寫花費了不少時間,須要經過網上和課本以及同窗的幫助下大概的完成了項目,但仍是有不少問題,須要我花更多的時間學習。

(七).psp

psp 任務內容 計劃共完成須要的時間(min) 實際完成須要的時間(min)
Planning 計劃 15 10
Estimate 估計這個任務須要多少時間,並規劃大體的工做步驟 5 10
Development 開發 120 150
Analysis 需求分析(包括學習新技術) 30 60
Design Spec 生成設計文檔 30 20
Design Review 設計複審(和同窗審覈設計文檔) 15 10
Coding Standard 代碼規範化(爲目前的開發制定合適的規範) 20 30
Design 具體設計 120 180
Coding 具體編碼 180 220
Code Review 代碼複審 30 20
Test 測試(自我測試,修改代碼,提交修改) 20 15
Reporting 報告 50 35
Test Report 測試報告 20 15
Size Measurement 計算工做量 10 10
Postmortem &Process Improvement plan 過後總結,並提出過程改進計劃 15 10

源代碼

GitHub函數

相關文章
相關標籤/搜索