• 词频统计


     本周作业是词频统计,编程具体要求如下:

    https://edu.cnblogs.com/campus/nenu/2018fall/homework/2126

    本篇博客主要介绍“项目”中每个功能的重点/难点,展示重要代码片断,给出执行效果截图,展示你感觉得意、突破、困难的地方。

    本周作业是词频统计,拿到题目最初的,我决定用C#来完成此次作业,因为大学期间我大多数时间学习的是C#,对C#有更多的理解,但是C#的编程能力并不是很强,于是我花了一些时间去复习C#的基础操作,又百度了许多不太会的知识点,来完成这次作业。

    以下是每个功能的重点难点,重要代码片段以及执行效果。

    一,重点难点以及得意与突破

    功能一是小文件输入。需要在控制台下输入命令,得到文件中不重复的总单词数。并对单词出现的次数进行排序输出。

    难点1.对我来说,如何导入文件是一个难点,查了许多资料。

    难点2.如何分割字符串,将大写字母开头全部转换成小写字母?

    难点3.如何将单词按从大到小排序?

    难点4.如何实现输出对齐?

    难点5.如何实现过滤重复单词?

    重点:读入和输出文件,建立哈希表,用哈希表排序。

    得意和突破的地方:前面试了许多次输出总单词数都是6,改了很多次,终于成功过滤重复词。

    功能二是支持命令行输入英文作品的文件名,亲自录入,输出显示不重复单词总数,并对出现频率最高的前10的单词进行输出。

    难点1.如何统计一本小说的单词量?

    难点2.如何正确排出前十的单词数?

    难点3.如何将功能1和2整合到一起?

    难点4.如何实现版本控制?

    重点:读入小说,将高频词汇排序。

    得意的地方是成功排出前十的单词。

    功能三和功能四研究了好久,bug许多,得不出结果,在此放弃。

    二,重要代码片段

    使用正则表达式

    1             sline = Regex.Replace(sline, @"[^a-zA-Z0-9u4e00-u9fa5s]", " ");
    2             sline = Regex.Replace(sline, "[!@#$%^&*()`,./;':"<>`?...]", " ");

    建立哈希表,按哈希的值进行词频排序,结果的输出

     1             Hashtable has = new Hashtable();//建立哈希表
     2             for (int i = 0; i < M.Length; i++)
     3             {
     4                 if (has.ContainsKey(M[i]))
     5                 {
     6                     has[M[i]] = (int)has[M[i]] + 1;
     7                 }
     8                 else
     9                 {
    10                     has.Add(M[i], 1);
    11                 }
    12             }

     1             if (has.Count <= 10)//输出文本单词个数
     2             {
     3                 Console.WriteLine("total " + has.Count);
     4                 Console.WriteLine();
     5 
     6             }
     7             else
     8             {
     9                 Console.WriteLine("total " + has.Count + " words");
    10                 Console.WriteLine();
    11             }
     1             Array.Sort(hasValue, hasKey);//按哈希表的值排序 
     2             int n = 0;
     3             for (int i = hasKey.Length - 1; i >= 0; i--)
     4             {
     5                 if ((string)hasKey[i] != "")
     6                 {
     7                     if (has.Count <= 10)
     8                     {
     9 
    10                         Console.Write(hasKey[i].ToString().PadRight(12, ' '));
    11 
    12                         Console.WriteLine(hasValue[i]);//从高到低输出单词
    13 
    14                     }
    15                     else
    16                     {
    17 
    18                         if (n < 10)
    19                         {
    20                             Console.Write(hasKey[i].ToString().PadRight(12, ' '));
    21                             Console.WriteLine(hasValue[i]);
    22                             n++;
    23                         }
    24                     }
    25 
    26                 }
    27             }

    三,执行效果

    功能一输出结果

    功能二输出结果

     

    功能一功能二合并后执行结果截图

     

     四.PSP阶段表格

    PSP 预计时间 实际时间 时间差 时间差原因
    复习C# 60min 74min 14min C#很多知识点都已经模糊
    功能一的编写 160min 253min 93min 不知道如何实现录入文件输出文字
    功能一的完善 30min 78min 58min 修复比如词数统计不准等问题,查了许多资料,试了很多方法
    功能二的编写 200min 244min 44min 有了一的基础,编写快了许多,但是有许多新加内容如小说字数多等问题比较耗时
    功能二的完善 180min 282min 102min 大文件输入后总是运行出错,调整了许多次
    功能三 300min 42min 258min 查了许多资料,头绪混乱,时间不足,就放弃了
    整合功能一和功能二 60min 219min 159min 以为会很简单,结果放在一起之后并不能实施,要么就只能完成一个功能,有时闪退,花了大量时间

     五.代码及版本控制       【https://git.coding.net/lulululu88/ci.git

  • 相关阅读:
    IOS开发C语言入门如何结合Terminal和Vim开发C语言程序
    如何开发原生的 JavaScript 插件(知识点+写法)
    IOS开发数据持久化篇之文件存储(一)
    PC 端微信扫码注册和登录
    2020最全面的微服务
    RabbitMQ详解
    MongoDB基础篇&集群篇
    从原理上理解MySQL的优化建议
    分布式日志搜集ELK
    MySQL高级篇性能优化
  • 原文地址:https://www.cnblogs.com/zhaojialu/p/9694139.html
Copyright © 2020-2023  润新知