zoukankan      html  css  js  c++  java
  • 201671010406 词频统计软件项目报告


    一.需求分析

    • 统计文件中各单词的出现次数

    二. 功能设计

    • 程序可读入任意英文文本文件,该文件中英文词数大于等于1个。

    • 程序需要很壮健,能读取容纳英文原版《哈利波特》10万词以上的文章。

    • 指定单词词频统计功能:用户可输入从该文本中想要查找词频的一个或任意多个英文单词,运行程序的统计功能可显示对应单词在文本中出现的次数和柱状图。

    • 高频词统计功能:用户从键盘输入高频词输出的个数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]='';
      ​           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链接

  • 相关阅读:
    10月日常练习1题目描述
    普及组复赛历年考题
    9.3练习题7 子串乘积正负分类 题解
    9.3练习题6 旅行 题解
    9.3练习题4 语句解析 题解
    9.3练习题5 单词覆盖还原 题解
    unity
    矩阵快速幂
    点权和
    SCOI生日快乐
  • 原文地址:https://www.cnblogs.com/dingjiahui/p/10558999.html
Copyright © 2011-2022 走看看