201671010420 词频统计项目

作业要求

1.程序可读入任意英文文本文件,该文件中英文词数大于等于1个。

2.程序需要很壮健,能读取容纳英文原版《哈利波特》10万词以上的文章。

3.指定单词词频统计功能:用户可输入从该文本中想要查找词频的一个或任意多个英文单词,运行程序的统计功能可显示对应单词在文本中出现的次数和柱状图。

4.高频词统计功能:用户从键盘输入高频词输出的个数k,运行程序统计功能,可按文本中词频数降序显示前k个单词的词频及单词。

5.统计该文本所有单词数量及词频数,并能将单词及词频数按字典顺序输出到文件result.txt。

作业实施

1.需求分析:

要求程序能够做出基本的单词频率的统计,也可以统计出文本的所有单词数;程序功能强大,能分析较大的文本;操作简介易懂。一目了然。

2. 功能设计:

基本功能:可以进行基本的词频统计,实现中英文分别统计
扩展功能:对于具体的文本甚至网络文本进行分析

3. 流程图:

4. 测试运行:

5. 代码秀:

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. 总结:

通过本次实践,让我深刻认识到软件开发的不易,单人操作非常困难,需要有几个甚至一个团队来合作完成;
软件开发过程中需要严谨的设计与计划,否则将会浪费很多的时间,有可能导致推倒重来,浪费财力物力;
通过开发过程我也认识到基础知识的严重不足,将会在以后的学习中弥补不足。

7. 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
源代码地址:https://github.com/lzh2540330731/-/blob/master/新建文本文档.java
posted @ 2019-03-18 19:37  劉振華  阅读(230)  评论(0编辑  收藏  举报