第二周结对编程作业——词频统计

本周作业是结对编写一个词频统计的程序,我们组是我(欧阳思琪)和贺晋飞同学共同完成这项任务。在仔细阅读了要求之后,我们组对程序编程进行了讨论。由于语言可以不必局限于要求中的C、C++,我们便考虑JAVA或python,两者各有优缺点,JAVA写起来比较繁重,而基于以往用python处理NLP相关项目的经验觉得python较为简单,但觉得在简单要求下,使用JAVA的运行速度明显更快,所以我们选择使用JAVA来完成本次作业。

分工:欧阳思琪 代码编写与博客编写

贺晋飞   代码审查与代码测试

实际:由我编写完代码并进行简单测试后,发布到github上,然后贺晋飞同学对代码进行审查和测试,发现我漏读了两个条件,一是单词至少长度为4,且前四个必须为英文字母,二是输出到文件时的格式我忽略了,贺晋飞同学对代码进行了修改,但由于贺晋飞同学的git下载失败了。。。,所以他直接把代码发给我了,并没有使用git fork的功能。。。,同时我再次对代码审校的过程中发现贺晋飞同学对要求忽略了排序按照ASCII码,把我已有的正确代码改错了。。。,于是我又进行了修正。。。贺晋飞同学生成了10个测试数据并在自己修正的代码上进行了测试,但由于代码在相互审校中的发现了错误,所以我对数据在最终版本的代码中进行了测试。由于正值国庆假期,所以完成的时间跨度比较长,我于10月1日完成了代码并发布到github上开源了,但是code review是到10月7日才做的,然后10月9日我写完了博客。。。

估计:项目构思:1小时                                                  实际:项目构思:1小时

代码编写:2小时                                                             代码编写:2小时

代码审查:1小时                                                             代码审查0.5小时

代码测试:1小时                                                             代码测试:1小时

代码调试:1小时                                                             代码调试:0.5小时

博客编写:1小时                                                             博客编写:1.5小时

总计  预估:    7小时                                                             实际:   6.5小时

代码思想:

建立一个Dictionary类来对文本处理并统计单词频度,Test类对Dictionary类生成实例进行调用。

Dictionary类对输入的文件夹名进行递归寻找文件进行读入,在一个实例中对所有的文件用hashmap进行存储单词的频度和应该存储的字符串,word存储的是单词的小写形式和按ASCII码排列后应该输出的单词形式,count存储的是单词的小写形式和单词的频率。每次读入一个文件进行处理,然后每次处理一行文本,用正则表达式匹配,将所有的非数字和英文字母的符号转化成空格,然后读取间隔的字符串进行判断是否符合要求。若是长度不小于四并且前四个字符都是英文字母,则是单词,将小写形式在count中对频度加一,然后与word中已经出现过的形式进行ASCII码比较,若较小则更新word中的value,(若未出现过该单词,则count中value为1,word中的value为该单词本身)在拓展模式下,我们判断是单词后再除去末尾连续的数字,然后存入词典中。

代码开源在:https://github.com/Victorianuonuo/projects-for-Software-Engineering/tree/master/WordCount

转载请注明:http://www.cnblogs.com/victorianuonuo/p/5941616.html

最后我用jprofiler对代码执行情况进行了分析,在处理超长文本(一个多G)时的情况:

时间: 2024-12-25 12:31:22

第二周结对编程作业——词频统计的相关文章

第二周结对编程作业:词频统计

程序实现的功能是统计文件中出现的词和每个词的频数. 这里的词的规定和平时语言上的规定不太一样,但是更标准化,规定了长度.组成字符和分隔符,在实现中也从这几个方面来寻找词. /*判断字符是否是字母*/ bool isAlphabetic (char c) { return ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')); } /*判断字符是否是数字*/ bool isNumerical (char

第二次结对编程-字词短语统计

第二次结对编程项目总结 第二次结对项目(词频统计要求网址): https://www.cnblogs.com/xinz/archive/2011/11/27/2265000.html 项目网址: https://github.com/QishenDatui/WordFrequency 基本要求 详细要求位于这里. 简要概括:根据输入的命令行参数,对文本中的字符进行对应的统计,例如使用-c命令统计字符出现次数,利用-f统计单词出现次数等等.项目一共分为5个步骤,4个必做项和一个附加项.分别为统计字

20175325 第二周结对编程项目 四则运算

20175325 第二周结对编程项目 四则运算 一.需求分析: 实现一个命令行程序,要求: 自动生成小学四则运算题目(加.减.乘.除) 支持整数 支持多运算符(比如生成包含100个运算符的题目) 支持真分数 统计正确率 题目去重 能多次生成四则运算题目 能根据用户输入的数字生成四则运算的题目数量 多语言支持: 简体中文, 繁體中文, English 文件: 处理生成题目并输出到文件 完成题目后从文件读入并判题 用户能够选择是否开始答题 二. 设计思路: 产生随机数并且考虑符号的优先级. 能实现整

2016福州大学软件工程第二次结对编程作业成绩

在这里跟大家道个歉,由于国庆节基本都在参加婚礼的路上所以现在才把成绩统计汇总了一下,份子钱太吓人已经把不多的工资吃掉了,这个月要靠泡面度日了.你们可是要好好学习,好好赚钱,好出的起同学的份子钱啊.扯远了,第二次结对编程成绩统计如下: 学号 第二次结对编程 031402233 9.5 031402224 9.5 031402330 9.5 031402516 9 031402524 9 031402304 9 031402509 9 031402341 9 031402508 9 03140232

结对编程__词频统计

搭档:施蓓蓓 源码:Github 贡献比例:50% 结对编程照片: 1.要求     基于作业3的结果,读取一个较小的文本文件A_Tale_of_Two_Cities.txt,统计该文件中的单词的频率,并将统计结果输出到当前目录下的 Result1.txt 文件 2.主程序 void main(void) { char b[30], Str[30000];//定义单词数组,字符串数组 ifstream infile("A_Tale_of_Two_Cities.txt"); //读入文件

(第二周)新英文词频统计

需求分析 1.两种读取文件的方法(建立两个类):  小文本输入.命令行输入文件名 2.进行词频统计 3.对结果进行排序并输出 https:https://git.coding.net/yanzouzhe/ywcptj.git SSH:[email protected]:yanzouzhe/ywcptj.git 功能实现 1.小文本输入读取文件 public class Article { /** * @param args */ String content;// 保存文章的内容 String[

第二周结对编程-20165222

一题目要求 实现一个命令行程序,要求: 自动生成小学四则运算题目(加.减.乘.除) 支持整数 支持多运算符(比如生成包含100个运算符的题目) 支持真分数 统计正确率. 二需求分析 1.用随机数随机生成数字,能够随机生成符号加减乘除(除数不为0). 2.支持分数和整数的四则运算,同样是利用随机数分别生成分子与分母(分母不为0). 3.能够判断输入答案的对错并统计正确率,要将用户输入答案与式子答案进行比较. 三设计思路 1.通过随机数来实现整数以及分数. 2.通过随机数结合if条件语句实现加减乘除

第二周-结对编程

结对成员:李俞寰,杜桥, 工作地点:冬华B622 电脑:李俞寰的电脑用来两个人共同写代码,杜桥的电脑在一旁用来查资料等; 心得体会: 在刚开始的时候,感觉身边有人看着完全写不出代码,好多很基础的知识甚至是常用的语法知识也要上网查,这样被人看着感觉有点尴尬.后来随着逐渐熟悉起来这种感觉逐渐变淡.两个人一起编程感觉像多了一个看问题的角度,犯错误时,偶尔会被立即指出.在给对方讲解时,有些自己感觉模糊的地方有时在讲解的过程中会变得更加清晰.当对方给讲解时,不同的思考方式和描述会让我理解的更好.可能是还处

软件工程第二次结对编程作业

题目要求 本次作业要求两个人合作完成,驾驶员和导航员角色自定,鼓励大家在工作期间角色随时互换,这里会布置两个题目,请各组成员根据自己的爱好任选一题.我们小队选择的是题目1: 我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求: 能够自动生成四则运算练习题 可以定制题目数量 用户可以选择运算符 用户设置最大数(如十以内.百以内等) 用户选择是否有括号.是否有小数 用户选择输出方式(如输出到文件.打印机等) 最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)