201671030116宋菲菲 《英文文本统计分析》结对项目报告

英文文本统计与可视化
本文介绍了一个用于统计和可视化英文文本的程序,包括单词频数、行数、字符数等统计功能,并能生成柱状图进行直观展示。此外,还实现了去除冠词、介词等功能。


信息表:

项目内容
作业所属课程http://www.cnblogs.com/nwnu-daizh/
作业要求https://www.cnblogs.com/nwnu-daizh/p/10569690.html/
课程学习目标熟悉软件开发整体流程,提升自身能力
帮助实现目标第一次体验一个完整的工程

任务1

博客地址
github地址

  • 点评内容:通过阅读你的博文,我认为你的博文的结构不是很清晰,没有充分利用Markdown编辑的特点,我建议可以将每个模块用加粗字体或副标题加以区分。博客内容很简练。通过浏览你的PSP,发现你的计划时间与实际运行时间几乎相同,我认为你的计划做得很到位,但是看了实际的代码运行结果,我发现你的很多功能都没有实现,希望下次可以继续努力,完善项目。
  • 点评心得:阅读完这位同学的博文,我认为她对时间的把控能力很好,PSP表可以看出是一个很会计划时间的人,这一点值得我去学习。但是她的部分任务没有完善,希望这次的结对项目对她有所帮助,也希望通过这次的结对项目,相互学习,共同进步。

任务2

源码地址

1.需求分析

  • (1)实验2要求的功能;
  • (2)单词频数可视化柱状图:
  • (3)统计该文本行数及字符数;
  • (4)各种统计功能均提供计时功能,显示程序统计所消耗时间(单位:ms);
  • (5)可处理任意用户导入的任意英文文本;
  • (6)人机交互界面要求GUI界面(WEB页面、APP页面都可);
  • (7)附加分功能:统计文本中除冠词、代词、介词之外的高频词;
  • (8)附加分功能:统计前10个两个单词组成的词组频率。

2.软件设计

项目主要包含三个类,一个是主函数Main,一个是统计单词的类SortResult,还有一个是绘制柱状图paint。
  • 主函数Main中实现图形用户界面,实现各个功能。输入框3个,分别是原文本文件的文件名(采用相对路径),想要查找的一个或多个单词及绘制柱状图,想要查找的N个高频词及其词频数。两个按钮,分别是“确定”和“取消”。由于两个查找在同一个面板,防止出现冲突,若两个输入框均有输入,则实现第一个输入框的功能。点击确定后,直接将字典顺序输出到result.txt文本中,并且实现相应功能。
  • SortResult中将文本中的每个单词按照字典顺序将单词及词频数输出到result.txt文本文件中。
  • paint中对柱状图美化。


    1616084-20190331094156042-838338838.png

3.核心功能代码展示

除去冠词、代词、介词两种方法
直接删除
    int i,j;
    for(j=0;j<List.size();j++) 
    {  
        for(i=0;i<Eword.size();i++)
        {
            if(Eword.get(i).equals(List.get(j).getKey()))
            {
                List.remove(j);
                break;                  
            }
        }
   } 
新建一个Map存放删选后的单词映射:
Map<String, Integer> map1=new LinkedHashMap<String, Integer>();
    for(Entry<String,Integer> m: map) 
    {  
        for(i=0;i<Eword.size();i++)
        {
            if(Eword.get(i).equals(m.getKey()))
            {
                break;
            }
        }
        if(i>=Eword.size())
        {
            map1.put(m.getKey(), m.getValue());  
        }
    }  
    Set<Entry<String,Integer>> Map1=map1.entrySet();  
    LinkedList<Entry<String, Integer>> List = new LinkedList<Entry<String,Integer>>(Map1);

        //排序
    Collections.sort(List, new Comparator<Entry<String,Integer>>() {  
        @Override  
        public int compare(Entry<String, Integer> wk1,  Entry<String, Integer> wk2) {
            return wk1.getKey().compareTo(wk2.getKey());  
        }  
    }); 
原本的代码实现在paint中画图显示,但是为了传参,new main()后显示出柱状图后会跳出Main函数的主框架
public paint(){
    JFreeChart chart = ChartFactory.createBarChart3D(
                    "词频统计", 
                        "单词", 
                        "数量",
                        new Main().dataset, 
                        PlotOrientation.VERTICAL,
                        true,         
                        false,
                        false      
                        );
   
    CategoryPlot plot=chart.getCategoryPlot();//获取图表区域对象
    CategoryAxis domainAxis=plot.getDomainAxis();         //水平底部列表
     domainAxis.setLabelFont(new Font("黑体",Font.BOLD,14));         //水平底部标题
     domainAxis.setTickLabelFont(new Font("宋体",Font.BOLD,12));  //垂直标题
     ValueAxis rangeAxis=plot.getRangeAxis();//获取柱状
     rangeAxis.setLabelFont(new Font("黑体",Font.BOLD,15));
      chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 15));
      chart.getTitle().setFont(new Font("宋体",Font.BOLD,20));//设置标题字体
         
     frame1=new ChartPanel(chart,true);
     
}
为了解决问题,将建立图表信息的代码写入在main中,统计用户输入单词词频及绘制柱状图
                for(i=0; i<input.length; i++) 
                {
                    for(Entry<String, Integer> entry : wordsStatistics.entrySet()) 
                    { 
                        if(input[i].equals(entry.getKey()))
                        {
                            map.put(entry.getKey(), entry.getValue());

                            print2+=entry.getKey()+":\n";
                            for(int j=0;j<entry.getValue()/100;j++)
                                print2+="*";
                            print2+="\n";
                            print += entry.getKey() + ":" + entry.getValue()+"    "; 
                            dataset.addValue(entry.getValue(),entry.getKey(),entry.getValue());
                            break;
                        }
                     } 
                 }
                long end = System.currentTimeMillis();
                JOptionPane.showConfirmDialog(null, print+print2+"\n运行时长"+(end-start)+"ms","结果",JOptionPane.DEFAULT_OPTION);
                
                JFreeChart chart = ChartFactory.createBarChart3D(
                        "词频统计", // 图表标题
                        "单词", // 文件夹轴的显示标签
                        "数量", // 数值轴的显示标签
                        dataset,//.dataset, // 数据集
                        PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                        true,           // 是否显示图例(对于简单的柱状图必须是false)
                        false,          // 是否生成工具
                        false           // 是否生成URL链接
                        );
    
                paint p = new paint(chart);
                JFrame frame=new JFrame("Java数据统计图");
                frame.setLayout(new GridLayout(2,2,10,10));
                frame.add(p.getChartPanel());           //加入柱形图
                frame.setBounds(50, 50, 800, 600);
                frame.setVisible(true);
            }
统计行数、列数
while((read = br.readLine()) != null)
    {  
        linenumber++;//行数
        charnumber+=read.length();//字符数
                for (String w:read.split("[^a-zA-Z]")) 
        {
               if(w.length()!= 0)
               {
                   list.add(w);  
               }  
          }  
    }

4.程序运行

程序运行前添加自定义jar包Libraries:

1616084-20190331094416195-2033930987.png

统计用户输入单词的词频,显示系统运行时间:

1616084-20190331094232560-484843341.png

生成相应的柱状图:

1616084-20190401084458013-517182686.png

若不退出程序继续查看其它单词词频,则柱状图将相应的单词柱状图添加到原有的图中:

1616084-20190401084513309-231290665.png

要除去的冠词、代词、介词:

1616084-20190331094342140-650641923.png

统计用户输入的n个文本中除冠词、代词、介词之外的高频词并显示运行时间:

1616084-20190331094348088-884133347.png

统计该文本行数、字符数及每个单词和相应的词频,并将其写入到文件中,生成result.txt文件:

1616084-20190331095510160-1437053096.png

5.结对过程:

1616084-20190402220656919-14191278.jpg

6.PSP

PSP2.1任务内容计划完成时间(min)实际完成时间(min)
Planning计划2020
.Estimate.估计这个任务需要多少时间,并规划大致工作步骤2020
Development开发7009600
.Analysis.需求分析(包括学习新技术)3030
.Design Spec.生成设计文档3530
.Design Review.设计复审1010
.Coding Standard.代码规范55
.Design.具体设计6060
.Coding.具体编码480720
.Code Review.代码复审6080
.test.测试2025
Reporting报告120120
.Test Report.测试报告100100
.Size Measurement.计算工作量2020
.Postmortem & Process Improvement Plan.事后总结,病提出过程改进计划2820

7.小结感受

这次的合作让我切身感受到结对项目的过程,让我体会到了交流沟通对结对合作的重要性,有时候两个人的想法会发生分歧,很好的沟通会使我们的效率变得更高。
分工明确会使项目进展较快,不会在同一个问题上浪费时间。遇到问题时,会相互沟通交流,解决问题。

转载于:https://www.cnblogs.com/SongFeiF/p/10576274.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值