zoukankan      html  css  js  c++  java
  • 201671010418刘佳 实验二词频统计项目报告

    词频统计个人项目:

    点我查看源码

    一.需求分析:

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

    二.功能设计:

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

    三.设计实现:

    1.文件读入

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

    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+" 	"+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+"
    ");//将key和value的值写入
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
       }
    

    }
    }

    六.总结:

    通过这次词频统计的个人项目开发,真实地模拟了软件开发的部分流程,了解到开发一个软件并不仅仅只是做代码的设计和编码部分。真正下功夫的地方还是需求分析和基本的功能设计。但是当明白了项目的具体要求与分析之后,技术这关还是欠缺。很多功能无法实现。
    学习到了很多java封装的知识点,查询了很多资料也和同学做了很多讨论,对Java的编码更加熟练了。

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

    PSP2.1 任务内容 计划共完成需要的时间(min)
    Planning 计划 20
    Estimate 估计这个任务需要多少时间,并规划大致工作步骤 30
    Development 开发 500
    Analysis 需求分析 (包括学习新技术) 120
    Design Spec 生成设计文档 30
    Design Review 设计复审 (和同学一起审核设计文档) 30
    Coding Standard 代码规范 (为目前的开发制定合适的规范) 20
    Design 具体设计 60
    Coding 具体编码 120
    Code Review 代码复审 30
    Test 测试(自我测试,修改代码,提交修改) 20
    Reporting 报告 35
    Test Report 测试报告 20
    Size Measurement 计算工作量 10
    Postmortem & Process Improvement Plan 事后总结 ,并提出过程改进计划 20
  • 相关阅读:
    设计模式的六大原则 ---- 理论知识
    动手编写TCP服务器系列之一:日志文件
    Shell语言系列之一:文件处理
    给Amazon ec2 增加卷(Volume)并挂载到系统
    Java打包问题之一:打包出现java.io.IOException: invalid header field
    struct中长度为0的数组用途与原理
    child和childNodes的区别
    学习es6 setter/getter研究
    tabIndex-bootstrap中Get到的
    tml兼容性
  • 原文地址:https://www.cnblogs.com/plus123/p/10558846.html
Copyright © 2011-2022 走看看