• 软件工程——第二次作业(2)


    软件工程——第二次作业(2)

    作业要求: https://edu.cnblogs.com/campus/nenu/SWE2017FALL/homework/922

    代码: https://git.coding.net/ss505072461/wf.git

    ————————————————————————————————————————————————————

      项目要求是编写出一个拥有“词频统计”功能的小程序,作为一个小程序,若只是实现基本的词频统计功能,其实并不是很难。但是,如果再附加一些需求和功能的话就会让我感到有点难度了,更何况为了以后课程的要求,我选择使用Visual Studio 2015编译器和C#语言这两种从未学过的工具,在4-5天之内共10个小时左右(预计,但是实际上确实是花了更多时间……)的时间里一边学习C#语言一边去做一个小程序,并且尝试着完成更多的需求和功能,这对我来说是一次充满挑战的作业。

      这次作业项目,我碰到的第一个难点就是我选择的C#语言是我从来未用过的语言,这考验着我的短期学习能力(毕竟需要做的作业是有时限的,当然这次作业之后学习还会继续的)和消化能力(理解参考书中的内容后运用出来),所以当我周四下课后就立刻开始查询C#语言的学习参考书和调查其常用的编译环境,幸好我有过Pascal、C和C++的语言学习经历,我对于新语言的学习还是很有信心的。通过参考书、百度,以及实际项目的实践,我认为C#语言是一种很好的语言,简洁便利,依靠基本的类库等就能实现相当多的功能。比如,Split就能用特定字符筛选,将一个字符串分割成一个字符串数组;ToLower能直接将字符串中所有大写英文字母转化为小写字母,等等。当然,我还未学会很多东西,比如我还未学会如何在函数中调用主程序中获得的字符串数组等,导致我的程序其实全部都被塞在main主程序中,程序结构很不美观……

      我对于这个程序项目的理解,认为这个程序首先要做到的是“词频统计”这个功能。C#语言Split语言便利地分割了被读入的string类型的文章text,将其转化成一个string型一维数组textArray,之后只需要进行词频统计,我选择使用了从第一个词textArray[0],使其与之后的所有词进行对比,存在的每个相同的词,都会使对应的统计数组countWord[0](初值为1)+1,然后为了避免重复统计,而将之后的词向前移动,将被统计过的单词覆盖掉,之后是第二个词textArray[1],对应着countWord[1],一直进行下去。这个部分的代码如下:

     1 for (int i = 0; i < sWord; i++)
     2 {
     3     countWord[i] = 1;
     4     for (int j = i + 1; j < sWord; j++)
     5     {
     6         if (textArray[i].Equals(textArray[j]))
     7         {
     8             countWord[i]++;
     9             for (int k = j + 1; k < sWord; k++)
    10                 textArray[k - 1] = textArray[k];//覆盖掉被查重过的单词
    11             sWord--;//被查重的单词已被剔除,最后sWord将是不重复单词数量
    12             j--;
    13         }
    14     }              
    15 }

       之后,我注意到从功能2开始,由于文章词汇量巨大,所以只需要输出词频前10个的单词及其数量,因此在输出之前,要对词频进行排序整理,之前将词和频一一对应也正是为了这个。在词频统计和词频排序方面,我已经完成了这个小程序最基础的功能。

    实现功能的截图如下:

    第一个测试用例文章:

      

    第一个样例的结果如下,其中为了测试输入的内容是否如同预期(最上方句子),被识别出来的单词数量(17)被暂时加入到代码中:

    之后我准备了第二个测试用文章:

     

    其测试结果如下,其中总词数(189)是符合作业提供的数据的:

      我之后也曾使用了老师提供的那篇很长的测试文章(War and Peace),然而因为我的程序初步设计只是为了达成基本功能,统计的算法极其简陋,因此运行了5分钟左右(时间不是很准确,我截图应该是慢了几秒的)才输出结果,而且总词数统计与老师的数据(568286)不同……是574756(之前我将-也作为分割标准,结果是53万左右,后来认为连词符-应该不算分割单词的依据)

      在之后我尝试了命令行的识别输入,但是由于我C#语言尚未学习透彻,因此在尝试了数小时后未果便放弃了……

    ————————————————————————————————————————————————

    个人PSP

  • 相关阅读:
    Intent的跳转和传值
    Intent传值的学习
    Activity,Window,View之间是什么关系?
    MATCH_PARENT和FILL_PARENT之间的区别?
    Activity的运行过程
    onCreate和onStart谁的开销大?
    SDKManager连不上墙外的网,列表刷新不出来怎么办?
    AndroidEclipse里的视图里想添加SDK Manager但是找不到怎么办?
    出现“Unable to resolve target 'android-XXX'”怎么处理?
    安卓进程的生命周期
  • 原文地址:https://www.cnblogs.com/shaos033/p/7545024.html
Copyright © 2020-2023  润新知