1. 程式人生 > >201671030118 詞頻統計軟件項目報告

201671030118 詞頻統計軟件項目報告

planning 順序輸出 odin 過程改進 tex 問題 imp bubuko odi

(一).需求分析

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

(二)功能設計

基本功能:
—統計文件中單詞,並輸出到指定文件
—根據題目要求讀入文件
— 查詢文件中單詞出現的次數

—文本中的詞頻數降序顯示前K個單詞以及柱狀圖
擴展功能:
目前沒有

(三).設計實現

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

(四).測試運行

功能1: 統計單詞個數,並把結果存到result.txt中。
技術分享圖片

功能2:輸入一個單詞,統計其在文中出現的詞數。
技術分享圖片

沒有此單詞:

技術分享圖片

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

技術分享圖片

(五).關鍵代碼

顯示柱狀圖:

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

                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

201671030118 詞頻統計軟件項目報告