您的位置:首页 > 编程语言

结对编程—词频统计

2016-03-22 23:19 295 查看

作业要求

[必做 1] 基于作业3的结果,读取一个较小的文本文件A_Tale_of_Two_Cities.txt,统计该文件中的单词的频率,并将统计结果输出到当前目录下的 Result1.txt 文件。 (第一阶段初稿完成该要求)

命令行格式: 提示符> Myapp.exe -f filename.txt > Result.txt (PS:C++ 程序,Java 程序输出方式类似) filename.txt 为前面下载的文件名。

解释:

选项 -f 表示后面跟文件名

输出格式规定(参考作业3中的示例):

首先按照频率由高到低排序

频率一样的词, 按照字典顺序排序

此外, 读取一个较大的文本文件Gone_with_the_wind.txt实验对比程序执行效率,做如下改进,比较改进前后程序执行时间。

本次和舍友 范鋆 同学一起合作完成 他的博客地址


http://home.cnblogs.com/u/fan-jun/

合作图片







编程语言 JAVA
编译环境 eclipse

本次作业中我们遇到了比较大的困难,在第三次作业中我使用了c++编程。但是由于算法过于复杂在运行给出的大文件时程序崩溃。
应该是由于c++中数组的内存空间有限导致的。这段时间在学习java,所以在和舍友讨论后决定使用java语言完成此次作业。

我主要负责文件结果的输出部分主要代码如下

public static void sort(Map<String,Integer> map){
List<Map.Entry<String, Integer>> infoIds = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
Collections.sort(infoIds, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return (o2.getValue() - o1.getValue());
}
}); //排序
String [] str3=null;
int len=infoIds.size();
int count=1;

try{
FileWriter fw=new FileWriter("Result1.txt");
BufferedWriter bw=new BufferedWriter(fw);
int q=0;
for (int i = 0; i < len; i++)
{   //输出
Map.Entry<String, Integer> id = infoIds.get(i);
if(id.getKey()!=null)
str3=id.getKey().split("");
if( str3!=null&&str3.length>3)                     //str3可能为空,且这个控制只有含有3个字母以上的单词才打印
if(count<=5)
{
q=id.getValue();
bw.write(id.getKey());
bw.write(":  ");
bw.write(String.valueOf(q));
bw.write("\t");
count++;
}
else
{
q=id.getValue();
bw.write(id.getKey());
bw.write(":  ");
bw.write(String.valueOf(q));
bw.write("\r\n");       //换行
count=1;
}
}
bw.close();fw.close();
}catch(Exception e){
e.printStackTrace();}
}
}


程序结果







总结心得

通过本次合作编程,我意识到了合作的重要,两个人往往想法比一个人丰富。也很少会犯低级错误,写程序的效率大大提高了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: