201671010418刘佳 实验二词频统计项目报告

词频统计我的项目:

点我查看源码java

一.需求分析:

任务:使用JAVA编程语言,独立完成一个英文文本词频统计的软件开发。
1.程序可读入任意英文文本文件,该文件中英文词数大于等于1个。
2.程序须要很壮健,能读取容纳英文原版《哈利波特》10万词以上的文章。
3.指定单词词频统计功能:用户可输入从该文本中想要查找词频的一个或任意多个英文单词,运行程序的统计功能可显示对应单词在文本中出现的次数和柱状图。
4.高频词统计功能:用户从键盘输入高频词输出的个数k,运行程序统计功能,可按文本中词频数降序显示前k个单词的词频及单词。
5.统计该文本全部单词数量及词频数,并能将单词及词频数按字典顺序输出到文件result.txt。git

二.功能设计:

  • 基本功能:1.可读入10万词以上的英文文本
    2.可查找一个或多个英文单词并能够统计出现次数和生成柱状图
    3.能够统计出前k个高频单词及词频,并能够输出到文件result.txt
  • 扩展功能:无

三.设计实现:

1.文件读入

使用Map集合存放文件,给文件建立一个文件缓冲流,方便后期取值。为了提升文件的健壮性便使用了集合。github

2.单词的个数统计

将以前存在TreeMap中的文本单词拿出,和用户输入的单词作对比和截取,区分单词和键值对的比较,当查找到相同单词时,返回一个数据。编程

3.单词词频存放

用一个迭代器遍历了整个单词数组,在以前将文本文件用write方法写入。数组

4.柱状图

当用户查找出须要的单词时,弹出的不只有单词的词频数,还有柱状图的直观统计。在继承了JFrame类建立的可视化图形界面后,经过Graphics2D方法建立一个柱状统计图。编程语言

四.测试运行:

程序运行截图以下:






五.代码部分:

如下是我比较满意的部分代码:(高频单词的显示)

else if (i==2){
        //高频单词的显示
        String st=null;
        Integer in=0;
        Integer temp;
         Iterator<String> it1 = wordsave.keySet().iterator();
            while(it1.hasNext())
            {
                String key = (String) it1.next();
                Integer value = wordsave.get(key);
                if(value>in){
                    temp=value; 
                    in=temp;
                    value=in;
                    st=key;
                }
            }
        System.out.println(st+" \t"+in);
        
    }            
        public void save(TreeMap<String, Integer> word){
   //传入一个map类型的集合参数
 //统计该文本全部单词数量及词频数,并能将单词及词频数按字典顺序输出到文件result.txt
    BufferedWriter bw = null;
    try {
        File file1 = new File("result.txt");
        if (!file1.exists()) {
            file1.createNewFile();
        }
        FileWriter fw = new FileWriter(file1.getAbsoluteFile());
        bw = new BufferedWriter(fw);
        
    } catch (IOException e) {
        e.printStackTrace();
    }
    
   Iterator<String> it1 = word.keySet().iterator();//用迭代器把集合中的单词遍历
   while(it1.hasNext())
   {
    String key = (String) it1.next();//拿到key和value的值
    Integer value = word.get(key);
    
    try {
            bw.write(key+"="+value+"\n");//将key和value的值写入
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
   }

}
}学习

六.总结:

经过此次词频统计的我的项目开发,真实地模拟了软件开发的部分流程,了解到开发一个软件并不单单只是作代码的设计和编码部分。真正下功夫的地方仍是需求分析和基本的功能设计。可是当明白了项目的具体要求与分析以后,技术这关仍是欠缺。不少功能没法实现。
学习到了不少java封装的知识点,查询了不少资料也和同窗作了不少讨论,对Java的编码更加熟练了。测试

七.按照《构建之法》第2章中2.3所述PSP流程,使用JAVA编程语言,PSP的展现:

PSP2.1 任务内容 计划共完成须要的时间(min) 实际完成须要的时间(min)
Planning 计划 20 35
Estimate 估计这个任务须要多少时间,并规划大体工做步骤 30 50
Development 开发 500 700
Analysis 需求分析 (包括学习新技术) 120 180
Design Spec 生成设计文档 30 45
Design Review 设计复审 (和同窗一块儿审核设计文档) 30 60
Coding Standard 代码规范 (为目前的开发制定合适的规范) 20 30
Design 具体设计 60 130
Coding 具体编码 120 180
Code Review 代码复审 30 45
Test 测试(自我测试,修改代码,提交修改) 20 50
Reporting 报告 35 25
Test Report 测试报告 20 35
Size Measurement 计算工做量 10 10
Postmortem & Process Improvement Plan 过后总结 ,并提出过程改进计划 20 20
相关文章
相关标签/搜索