201671010455 邹立源 词频统计软件项目报告

1.需求分析

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

2.功能设计

1.用户输入任意英文文本,显示对应单词在文本中出现的次数和对应的单词。
2.用户从键盘输入高频词输出的个数n,按文本中词频数降序显示前n个单词的词频及单词,用户也可输入文本查询其出现次数。
3.统计该文本所有单词数量及词频数,并能将单词及词频数按字典顺序输出到文件words.txt。

3.扩展功能

读入读出文件功能(将文件进行读取,存放),输入一个文件的文件路径及文件名可以找到该文件并对该文件中的文本进行单词分解和单词词频统计。

4.运行测试

5.部分代码

package com.siqi.soft;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;

/**

  • 利用类TreeMap<K,V>基于红黑树的Map接口实现

  • K:键的类型

  • V:映射值的类型
    */
    public class WordCount {
    public static void main(String[] args) throws FileNotFoundException,IOException{

     try{
         //使用流的方法读取文件
         BufferedReader br = new BufferedReader(new FileReader(
                 "F:\\javademo\\softwar_pro\\MRDemo\\words.txt"));
         //使用TreeMap方法自动将结果按Integer列
         TreeMap<String,Integer> treemap = new TreeMap<String,Integer>();
         //用来存储读取的单词
         String readLine = null;
         //记录单词的总数
         int count = 0;
         while((readLine = br.readLine())!=null){
             //将字母排序为小写
             readLine = readLine.toLowerCase();
             //将所有单词以大写输出
             //readLine  = readLine.toUpperCase();
             //过滤出只含有字母的字段
             String[] str = readLine.split("[\\s]");
             //过滤掉多个空格,“+”代表多个空格的意思
             for(int i = 0;i<str.length;i++){
                 count++;
                 String word = str[i].trim();//trim()用来去掉字符串首尾的空格
                 if(treemap.containsKey(word)){//判断此映射是否包含指定键的映射关系
                     treemap.put(word, treemap.get(word)+1);
                 }else{
                     treemap.put(word, 1);
                 }
             }
         }
    
         System.out.println("按字典的输出顺序为:");
         System.out.println("单词:"+"\t"+"单词出现的频率:" );
         /**
          * 使用迭代器遍历取值:
          * Iterator是迭代器
          * treemap.entrySet()是把TreeMap类型的数据转换成集合类型
          * treemap.entrySet().iterator()获取集合的迭代器
          */
         Iterator<Map.Entry<String,Integer>> it  = treemap.entrySet().iterator();
         //判断是否存在下一个单词
         while(it.hasNext()){
             Map.Entry<String, Integer> entry = it.next();//获取map中每一个键值
             //输出结果
             System.out.println(entry.getKey()+"        "+entry.getValue());
             br.close();//关闭流
         }
         System.out.println("单词总数为:"+count+"个");
    
     }catch(FileNotFoundException e){//异常处理
         e.printStackTrace();
     }catch(IOException e){
         e.printStackTrace();
     }
    

    }

}

6.PSP展示

PSP2.1 任务内容 计划共完成需要的时间(min) 实际完成需要的时间(min)
Planning 计划 30 42
Estimate 估计这个任务需要多少时间,并规划大致工作步骤 30 42
Development 开发 700 1088
Analysis 需求分析 (包括学习新技术) 120 150
Design Spec 生成设计文档 50 50
Design Review 设计复审 (和同事审核设计文档) 20 15
Coding Standard 代码规范 (为目前的开发制定合适的规范) 30 30
Design 具体设计 120 60
Coding 具体编码 240 600
Code Review 代码复审 60 80
Test 测试(自我测试,修改代码,提交修改) 60 120
Reporting 报告 55 100
Test Report 测试报告 20 32
Size Measurement 计算工作量 10 10
Postmortem & Process Improvement Plan 事后总结 ,并提出过程改进计划 25 60
从PSP表中可以发现项目在实施工程中的时间比预计时间要长,在以后的 开发中要多加改进。
源代码地址:https://github.com/zlyhoney/wander-youth-sunshine
posted @ 2019-03-19 21:12  邹立源  阅读(163)  评论(1)    收藏  举报