这是《构建之法》现代软件工程课的个人项目作业

  1. 个人项目 Individual Project: 一个人独立完成.
  2. 时间: 可以考虑在第一周就给同学们这个项目;  也可以考虑分为两部分, 个人做第一部分, 然后两人结对,选两个人中较好的程序,再继续开发其他功能。
  3. 考核内容
  4. 基本源代码控制的用法, 逐步扩展的程序设计,对字符,字符串的处理,英语分词,排序,

程序的测试,回归测试,效能测试C/C++/C# 等基本语言的运用和 debug。 考虑到同学的基础参差不齐,这个作业提供了多种要求,请按先易后难的次序实现。


用户需求
:英语的26 个字母的频率在一本小说中是如何分布的?某类型文章中常出现的单词是什么?某作家最常用的词汇是什么?《哈利波特》 中最常用的短语是什么,等等。 我们就写一些程序来解决这个问题,满足一下我们的好奇心。

假设我们的命令行程序叫 WF.exe   (WF: Word Frequence)

第0步:输出某个英文文本文件中 26 字母出现的频率,由高到低排列,并显示字母出现的百分比,精确到小数点后面两位。

命令行参数是:

wf.exe -c <file name>

一些同学要复习一下程序如何处理命令行参数, 请看别人的经验。

字母频率 = 这个字母出现的次数 / (所有A-Z,a-z字母出现的总数)

如果两个字母出现的频率一样,那么就按照字典序排列。  如果 S 和 T 出现频率都是 10.21%, 那么, S 要排在T 的前面。

这个程序容易写吧?  如果要处理一本大部头小说 (例如 Gone With The Wind), 你的程序效率如何?有没有什么可以优化的地方?

第一步:输出单个文件中的前 N 个最常出现的英语单词。

作用:一个用于统计文本文件中的英语单词出现频率的控制台程序 单词:以英文字母开头,由英文字母和字母数字符号组成的字符串视为一个单词。单词以分隔符分割且不区分大小写。在输出时,所有单词都用小写字符表示。

英文字母:A-Z,a-z字母数字符号:A-Z,a-z,0-9分割符:空格,非字母数字符号 例:good123是一个单词,123good不是一个单词。good,Good和GOOD是同一个单词

功能列表:

  • 功能1:wf.exe -f <file>  
    输出文件中所有不重复的单词,按照出现次数由多到少排列,出现次数同样多的,以字典序排列。
  • 功能2:wf.exe -d <directory>  指定文件目录,对目录下每一个文件执行  wf.exe -f <file> 的操作。 
    • wf.exe -d -s  <directory>  同上, 但是会递归遍历目录下的所有子目录。
  • 功能3:支持 -n 参数,输出出现次数最多的前 n 个单词,  例如,  -n 10 就是输出最常出现单词的前 10 名。 当没有指明数量的时候,我们默认列出所有单词的频率。

现在我们这个程序已经有一点复杂度了, 我们要构建一些基本的测试用例来保证程序的基本功能不会在不断的扩展中出问题。 请看 《构建之法》【回归测试】的内容,构建一些测试来保证基本功能的正确性。

第二步:  支持 stop words

我们从第一步的结果看出,在一本小说里, 频率出现最高的单词一般都是 "a",  "it", "the", "and", "this", 这些词, 我们并不感兴趣.  我们可以做一个 stop word 文件 (停词表), 在统计词汇的时候,跳过这些词。  我们把这个文件叫 "stopwords.txt" file.

功能 4:支持新的命令行参数, 例如:   wf.exe -x <stopwordfile>  -f <file>

在这一步我们要增加什么回归测试呢?

第三步:  我们想看看常用的短语是什么, 怎么办呢? 

先定义短语:"两个或多个英语单词, 它们之间只有空格分隔".   请看下面的例子:

  hello world   //这是一个短语

  hello, world //这不是一个短语

功能 5:支持新的命令行参数  -p <number>

  参数 <number> 说明要输出多少个词的短语,并按照出现频率排列。同一频率的词组, 按照字典序来排列。

在这一步我们要增加什么回归测试呢?

第四步:把动词形态都统一之后再计数。 

我们想找到常用的单词和短语,但是发现英语动词经常有时态和语态的变化,导致同一个词,同一个短语却被认为是不同的。 怎么解决这个问题呢?

假设我们有这样一个文本文件,这个文件的每一行都是这样构成:

  动词原型  动词变形1 动词变形2...

词之间用空格分开。

e.g.  动词 TAKE 有下面的各种变形

  take takes took taken taking

我们希望在实现上面的各种功能的时候,有一个选项, 就是把动词的各种变形都归为它的原型来统计。

功能 6:支持动词形态的归一化,参数为 -v

  wf.exe -v <verb file>  其中 <verb file> 是纪录动词形态的文本文件。

实现这些功能, 分析程序的效能  (link: 现代软件工程讲义 2 开发技术 - 效能分析),

每一步都至少要签入源代码控制 (github 或其他工具)一次,同时把回归测试的测试用例也写好签入到适当的目录中。

现代软件工程 作业 文本文件中英语单词的频率相关推荐

  1. 2023软工第三次作业-最长英语单词链

    结对项目-最长英语单词链 项目 内容 这个作业属于哪个课程 2023北航软件工程 这个作业的要求在哪里 结对项目-最长英语单词链 我在这个课程的目标是 帮助我初步建立软件工程敏捷开发的整体流程和概念, ...

  2. 统计一个含有英文单词的文本文件中的单词个数以及指定单词个数

    先列出定义的方法: 1. public int getWordNum(String fileName) 统计一个含有英文单词的文本文件的单词个数. 2. public void getWordNumF ...

  3. 计算机中英语单词翻译,计算机有关的英语单词及翻译

    . 计算机有关的英语单词及翻译 PC:个人计算机Personal Computer 英][ˈpɜ:sənl][美][ˈpɜ:rsənl] CPU:中央处理器Central Processing Uni ...

  4. 2020-05-13 工作中英语单词积累

    field 英[fiːld] 美[fiːld] n. 田; 地; 牧场; (作某种用途的) 场地; (覆盖-的或有-的) 大片地方; v. 使参加竞选; 使参加比赛; 担任守队(队员); 任守方; 接 ...

  5. Spark 论文篇-论文中英语单词集

    resilient [rɪˈzɪljənt] 能复原的;弹回的;有弹性的;能立刻恢复精神的;社会渣滓 dryad ['draɪæd] 森林女神 树妖 present [ˈprɛznt]  目前的;现在 ...

  6. 统计文段中英语单词数量

    网上找到的方案 function wordCalculate(words) {if (words) {// 1.复制副本let value = words// 2.将中文字符替换为空格value = ...

  7. 计算机基本框图英语作业,计算机专业英语单词作业.doc

    计算机专业英语(2008影印版)高等教育出版社 共10页 KEY TERMS 第一单元 application software应用软件 basic application基本应用软件 communi ...

  8. 2020-05-09 工作中英语单词积累

    commerce 英[ˈkɒmɜːs] 美[ˈkɑːmɜːrs] n. (尤指国际间的) 贸易; 商业; 商务; [例句]They have made their fortunes from indu ...

  9. 分离单词,瓦尔登英语单词出现频率

    from collections import Counter f=open(r'C:\Users\jihao\Desktop\Walden.txt','r') lines=f.readlines() ...

最新文章

  1. 机器学习(MACHINE LEARNING)MATLAB中微分方程的求解
  2. spring + maven项目 互相依赖的小坑
  3. JS关闭浏览器 (不弹出提示框)
  4. java 注解应用技巧_改善Java应用程序性能的快速技巧
  5. python贪心算法求删数问题_贪心算法删数问题
  6. Ajax内部交流文档(转)
  7. 同步、异步的使用场景及好处
  8. tcpreplay,tcprewrite的使用
  9. 【解决】Ubuntu安装NVIDIA驱动(咨询NVIDIA工程师的解决方案)
  10. 【数据预测】基于matlab鸟群算法优化BP神经网络数据预测【含Matlab源码 1772期】
  11. 光猫修改rms服务器地址大全,华为光猫备份jffs2及HG8321R-RMS切换HG8321版本教程
  12. maven 打包跳过test的命令
  13. Failed to list versions for
  14. linux ntfs 安装教程,Linux NTFS文件系统安装教程
  15. 如何设置正确的dns服务器地址,dns服务器地址如何设置
  16. mac怎么验机,都应该查什么
  17. WPF无边框窗体拖动
  18. 模仿QQ空间 网页设计
  19. android 记录触屏坐标,android 屏幕坐标总结
  20. 微信小程序如何支持分享给朋友和分享到朋友圈?如何解决分享朋友圈灰色问题

热门文章

  1. python opencv3 检测人
  2. 【编程开发】Python---列表
  3. Android技巧分享——Android开发超好用工具吐血推荐 转载
  4. 最近学gvim,mark低先
  5. 大型JavaScript应用程序架构模式
  6. 酒桌上的规矩,社会的潜规则
  7. 信号时频图的横纵坐标对调
  8. python快速入门课堂笔记_Python 快速入门笔记(9):模块和包
  9. android炫酷叼ui,XUI: 一个简洁而优雅的Android原生UI框架,解放你的双手!
  10. qt 通过类实现画图_QT案例IDE编写 通过枚举实现编码切换