关于这门课,关于第一个作业

  看着题目,大体上第一篇随笔要写两方面的事儿。

  其一:

  说说这门课,作为一名旁听生,选择旁听这门课,也许不仅仅是因为这门课的主讲是young,我们是他的学生,所以旁听。其实更重要的原因,是因为真的觉得这门课是有价值的,当然,我不清楚这个学期自己的时间是否充裕,是否会坚持下全程,但还是希望研一的小盆友们能够坚持,能够有所收获。而我及其他组内的童鞋也都认为,这门课young会带给你们别样的收获,不同于本科时代的收获。当然,说起软件工程,说起编程,其实还是自己的事儿。代码写的多了,也许就没那么难了。

其二:

  说完了其一,说说第一周留的作业吧,其实完成作业的过程才是成长的过程,作为理工科的学生,我没有文科人的文笔,所以其一关于感慨人生的部分,寥寥草草写了几笔。更多的,我们还是关注下编程,关注下技术本身吧。先说说young推荐大家的版本控制,我第一次接触github大概是在大二那一年,刚接触的时候也走了很多弯路,而走过来发现,其实没有那么难,young平日里就要求我们编程做到版本控制,事实上,他自己也用git。版本控制的好处不想在这里说了,网上夸他的一大堆。github是一个开源的平台,官网地址在这里:https://github.com 关于如何使用,网上有很多帖子,也看到了yyg童鞋的博客,推荐了一个地方,当然,我更推荐大家去官网上看文档,https://help.github.com/ 对于我们使用的工具,young通常是推荐我们找官方的文档和手册的。

  再说说本周的编程作业,下午想了想 “词频统计” 的这个问题,对于英文的词频统计,要比汉语的词频统计简单了许多。先完成一个简单的版本(通常老师教导我们就是这样,先实现功能,再考虑优化的事儿), 简单版本即先完成词频统计的基本需求和功能,我实现过程中算法大体如下(懒了,没画流程图):

  1.读入要分析的文件,比如:anna.txt(安娜卡列尼娜的英文版)

  2.对文件内容进行预处理,包括标点符号的处理,多空格的处理,等等了

  3.对处理后的文件内容进行分词,遍历,统计词频。遍历统计词频的过程中,用到了hashmap,对于hashmap的介绍和使用,这里先不介绍了,有空了单独写一个,hashmap还是蛮有用的。

  4.对统计后的结果进行格式化输出,我采用了对词频由大到小排序后输出到result.txt中。

  对于词频统计的版本1基本就实现了,当然,下一个版本,还可以考虑往上加其他的功能,我现在能想到的:

  1.优化的问题,对于现在全部读入内存的做法、hashmap的使用、时间复杂度上面的考虑等等方面,都是值得进一步改进的,如果其他人有好的建议欢迎留言一起讨论。

  2.对于结果呈现部分的改良,对于用户来说,我们做出的产品如果在视觉上有更直观的感受,当然要好于给他看输出文件。我现在能想到的,比如,将词频较高的前多少多少个单词通过绘图控件以图形的形式呈现出来,也许效果会更好些。可以参考数据可视化方向的知识弄一弄(当然,这个方向我没研究,感兴趣的可以交流)

  最后,附上词频统计版本1,我的程序:

  

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

public class WordStatistics {

public void getWordRate(String sourceFileName) {

try {
BufferedReader br = new BufferedReader(new FileReader(new File(
System.getProperty("user.dir") + "//" + sourceFileName)));
String all_file = null;
String tmp = null;
while ((tmp = br.readLine()) != null) {
all_file += tmp;
}
br.close();

all_file = all_file.toLowerCase();
all_file = all_file.replaceAll("[^A-Za-z]", " ");
all_file = all_file.replaceAll("\\s+", " ");

String single_word[];
single_word = all_file.split("\\s+");

Map<String, Integer> hm = new HashMap<String, Integer>();
for (int i = 0; i < single_word.length; i++) {
String key = single_word[i];
if (hm.get(key) != null) {
int value = ((Integer) hm.get(key)).intValue();
value++;
hm.put(key, new Integer(value));
} else {
hm.put(key, new Integer(1));
}
}

ArrayList<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>(
hm.entrySet());
Collections.sort(list,new Comparator<Object>() {
public int compare(Object e1,Object e2) {
int v1 = Integer.parseInt(((Entry<String, Integer>) e1)
.getValue().toString());
int v2 = Integer.parseInt(((Entry<String, Integer>) e2)
.getValue().toString());
return v2-v1;
}
});

BufferedWriter bw = new BufferedWriter(new FileWriter(new File(
System.getProperty("user.dir")+"//result.txt")));
for (Entry<String,Integer> e:list) {
bw.append((e.getKey()+" : "+e.getValue()+"\n"));
}
bw.close();

} catch (IOException e) {
e.printStackTrace();
}

}

public static void main(String[] args) {
WordStatistics ws = new WordStatistics();
ws.getWordRate("anna.txt");
}

}

时间: 2024-11-07 05:08:38

关于这门课,关于第一个作业的相关文章

吴恩达《深度学习》第一门课(1)深度学习引言

1.1欢迎 主要讲了五门课的内容: 第一门课:神经网络基础,构建网络等: 第二门课:神经网络的训练技巧: 第三门课:构建机器学习系统的一些策略,下一步该怎么走(吴恩达老师新书<Machine Learning Yearning>就是针对这个以及上一课): 第四门课:卷积神经网络相关: 第五门课:循环神经网络相关. 1.2什么是神经网络 (1)常说的深度学习指的就是训练神经网络,或者也指特别大规模的神经网络. (2)每一个神经元都代表着从输入到输出的函数映射,如下的房价预测: (3)激活函数Re

软工网络第一周作业201521123008

Task1:注册个人博客账号 201521123008 朱潞潞 https://www.cnblogs.com/muxueqianshan/ Task2:注册码云账号 https://gitee.com/xiahe/events Task3:完成博客-阅读与思考 阅读参考材料,并回答下面几个问题: (1)回想一下你初入大学时对网络工程专业的畅想 当初你是如何做出选择网络工程专业的决定的? 当时是知乎的重度用户,该网站非常推崇程序员. 人容易受到环境的影响,觉得非常酷,能自己创造一个世界. 爸妈说

我对软件工程这门课的理解

?阅读本文大概需要 3 分钟 1.什么是软件工程 在此之前,除了知道有软件工程这个专业,我并不知道还有软件工程这门课程,因此我不敢凭空妄谈对软件工程这门课有什么理解.当我看到作业是谈谈自己对软件工程这门课的理解时,我是有点惊讶的,这学期刚刚开学两周,课也上了没几节,可以说我对软件工程这个概念完全没有理解.但是我想,既然是作业,我也只能强迫我自己去看书查资料说说我自己的理解和看法了. 首先引用一下百度百科的定义:软件工程是一门研究用工程化方法构建和维护有效的.实用的和高质量的软件的学科.它涉及程序

10.2: 现代软件工程这门课已经上了好几年了,以前有很多学生做过团队项目(说不定包括本校的学生),请你们找一个以前的团队采访一下-------------答题者:徐潇瑞

10.2: 现代软件工程这门课已经上了好几年了,以前有很多学生做过团队项目(说不定包括本校的学生),请你们找一个以前的团队采访一下 - 当时的项目有多少用户,给用户多少价值? 现在还有人用吗? - 这个项目能否给我们团队继续开发,源代码/文档还有么? - 项目开发有什么经验和教训 - 对学好软件工程有什么建议 写成一个博客   #团队博客作业2 根据老师的作业要求,我们采访了以前本科认识的一个同学,他在读本科的时候出去实习,参与了一些项目.他参与了手机外卖app的开发,根据他的回答,当时用户有1

机械传动控制第一周作业

机械传动控制第一周作业 现代机电传动控制要求工程师有较为广阔的知识面.在产品设计的过程中,既要充分地运用自己的专业知识,也要与其他学科进行协同设计,现代机电控制靠纯机械已经不能达到复杂的技术要求,它还需要电气和软件的共同作用,做到机电软一体化.在完成一件机械设备的性能要求后,成本的问题也是必须要充分考虑的,设计时要考虑用材成本,设计过程中要考虑能耗的均衡问题,经济因素是机械设计中一个需要权衡的问题.同时,创新也是必须的,无尽的重复和运用虽说可以使一个技能得到完善,但是创新才能使其真正的发展. 现

一年内自学MIT的33门课? 疯狂学习有方法

[导读]能快速掌握复杂信息,对成就卓越事业至关重要.ScottYoung的学习过程不只适用于学生,同样有助于学习复杂技能的专业知识. 能快速掌握复杂信息,对成就卓越事业至关重要.ScottYoung的学习过程不只适用于学生,同样有助于学习复杂技能的专业知识. 最近,在TED大会上,一位叫Scott Young的年轻人分享了他的一个惊人成就:他在一年之内,完成了MIT(麻省理工学院)计算机科学本科课程的全部33门课,并都通过了考试.重要的是,他完全是靠自学完成的,观看在线教程的讲座,再参加实际的考

对《软件工程》这门课的总结

通过这十六周的学习,我学习到了很多新的知识,也从刚刚接触这门课程时的懵懂无知,到现在的可以自己动手实践,进步了很多.也通过学习,能够解答一些关于刚接触这门课程时提出的一些问题.1.什么是软件工程?在我看来,软件工程涉及到程序设计语言,数据库,软件开发工具,系统平台,设计模式等多个方面.软件工程是指导计算机软件开发和维护的一门工程学科.2.软件工程的目标是什么?(1)付出较低的开发成本,(2)达到要求的软件功能,(3)取得较好的软件性能,(4)开发的软件易于移植,(5)需要较低的维护费用,(6)能

2017-2018-1 20179206《网络攻防实践》第一周作业

a.你对师生关系的理解,希望是哪种关系? 我认为师生关系是一种相互平等交流的关系. 为什么这样说,因为这是由网络攻防实践这门可得特殊性来决定的,网络攻防是门实践课,需要大量的联练习和摸索,同时大部分学生对这一领域不熟悉,需要学习Linux在内的很多新东西,在中间会产生大量的新问题,这些问题需要向老师请教,如果能够尽可能的成为一种相互平等的关系,同学会更乐于去发现问题和请教问题,从而能爱上实践,爱上这门课. b.如何提问? l 提问的内容要先自我独立解决: 作为一门计算机实践课,首先放在第一位的就

计算机专业学生一定要学好这几门课!(转)

很多程序员,包括计算机专业出身的程序员,也包括通过自学成为程序员的非科班同学,在工作一两年后甚至更久后,基本上都会碰到技术瓶颈,由此可能产生很长一段时间的迷茫期. 在这个迷茫期,很多程序员都在思考类似自己是不是适合做程序员.是否要做一辈子程序员.是否要转行到其他职业,比如产品经理等问题.如果不能很快地得到这些问题的答案,那么这些程序员就会一直被这些问题所困扰,举步难行,浪费大好光阴. 这篇文章不是用来探讨程序员是否能干一辈子.程序员如何转型到产品经理等问题的.相反,这篇文章的目的是想要帮助那些迷