201671010406 詞頻統計軟件項目報告


一.需求分析

  • 統計文件中各單詞的出現次數

二. 功能設計

  • 程序可讀入任意英文文本文件,該文件中英文詞數大於等於1個。git

  • 程序須要很壯健,能讀取容納英文原版《哈利波特》10萬詞以上的文章。github

  • 指定單詞詞頻統計功能:用戶可輸入從該文本中想要查找詞頻的一個或任意多個英文單詞,運行程序的統計功能可顯示對應單詞在文本中出現的次數和柱狀圖。算法

  • 高頻詞統計功能:用戶從鍵盤輸入高頻詞輸出的個數k,運行程序統計功能,可按文本中詞頻數降序顯示前k個單詞的詞頻及單詞。框架

  • 統計該文本全部單詞數量及詞頻數,並能將單詞及詞頻數按字典順序輸出到文件result.txt。學習


三. 環境需求

  • 測試機環境:Windows測試

  • 開發環境:CFree5編碼


四.設計實現

  • 利用指針功能設計

  • 打開txt文件,若打開成功則返回文件起始位置給p指針指針

  • 利用flag作標誌統計每一個單詞出現的頻率代碼規範

  • 將單詞按字典順序排序,即經過比較ascii值來進行冒泡排序


五.測試運行

英文文本:

開發平臺:

運行界面:


六.部分代碼

  • 檢查文件結束:

    while(!feof(p))
      {
       for(j=0;j<20;j++)
       {
    ​     temp[j]=fgetc(p);
    ​     if(temp[j]==' '||temp[j]==','||temp[j]=='.'||temp[j]=='!'||temp[j]=='?')
    ​     {
    ​       temp[j]='\0';
    ​           strcpy(s[b].w,temp); 
    ​       b++;
    ​       break; 
    ​     }
    ​    }
       }
  • 統計單詞出現頻率:

    void pv()
    {
       int j,k,flag=1;
    ​      for(j=0;j<b;j++)
    ​      {
    ​        for(k=0;k<j;k++)
    ​        {
    ​          if(strcmp(s[j].w,s[k].w)==0)
    ​          {
    ​              flag=0;  
    ​              break; 
    ​          }
    ​          else 
    ​         flag=1;
    ​        }
    ​        while(flag) 
    ​        {
    ​          for(k=j;k<b;k++)
    ​          {
    ​            if(strcmp(s[k].w,s[j].w)==0)
    ​                s[j].num++;
    ​          }
    ​         flag=0;  
    ​        }
    ​      }
    }
  • 將單詞按字典順序排序:

    void px()
    {
      int j,k,c;
      char temp[20]; 
      for(j=0;j<b-1;j++)
      {
    ​      c=j; 
    ​      for(k=j+1;k<b;k++)
    ​      { 
    ​         if(strcmp(s[c].w,s[k].w)>0)
    ​             c=k;
    ​         if(c!=j)
    ​         {
    ​           strcpy(temp,s[c].w);
    ​           strcpy(s[c].w,s[j].w);
    ​           strcpy(s[j].w,temp);
    ​         }
    ​      } 
      }
    }

七.總結

​ 這應該是目前爲止作的最難受的一次實驗,對於在語言缺少和算法短板上的缺陷體現的淋漓盡致,本身的問題仍是須要本身解決,沒什麼救世主,上網普遍瀏覽現有程序代碼,借鑑其中的部分程序源碼,主體框架採用C語言,最後又加入C++部分代碼實現圖形化用戶界面,最終實現要求中的個別功能。半路出家的本身與他人的差距內心甚是明瞭,之後的學習該怎麼進行纔是接下來主要攻克的難題。


八.PSP

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

最重要的是一點要學會至少一門語言,不然步履維艱!

Github的倉庫主頁的連接地址:Github連接

相關文章
相關標籤/搜索