201671010460朱艺璇《英文文本统计分析》结对项目报告

  • 实验四 《英文文本统计分析》结对项目报告.

    项目 内容
    这个做业属于哪一个课程 http://www.cnblogs.com/nwnu-daizh/
    这个做业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/10569690.html
    课程学习目标 熟悉软件开发总体流程,提高自身能力
    本次做业在哪一个具体方面帮助咱们实现目标 第一次体验一个完整的工程
  • 任务一.
    • 两两自由结对,对结对方的《实验二 软件工程我的项目》的项目成果进行评价
      对项目博文做业进行阅读并进行评论,评论要点包括:博文结构、博文内容、博文结构与PSP中“任务内容”列的关系、PSP中“计划共完成须要的时间”与“实际完成须要的时间”两列数据的差别化分析与缘由探究。
      任务2须要给出结对项目源码在Github的仓库主页连接地址;
      任务2博文做为结对项目实施过程的文字资料,请完整包含下面7个部分:
      • 点评做业的博客王潇的实验二
      • github连接地址https://github.com/LAUGHwangxiao/Personal-Program
      • 点评内容:整个页面很是清爽,文档内容调理很清晰。用线条将每一个模块分开,让读者看着很是清晰。惟一的一点不足就是总结有点少,不过也情有可原,从任务实践分配表能够看到王潇同窗用了很是多的时间设计项目。但愿咱们两能够共同窗习对方的长处。在阅读并测试运行代码之后,我发现她不只完成了基础功能,还附加了输出每一行有多少个单词。软件结构完整,人机交互颇有清楚。代码规范,结构完整,值得我学习。有一点小缺憾就是王潇同窗也没有实现柱状图功能。但愿在这一次的实验中咱们能经过学习解决这个困难。
      • 点评心得:在阅读完王潇同窗的实验二之后,我以为她的博客先后条理很清楚,对每一个模块的设计分析都很到位,这一点我须要向他学习,善用表格这一点,包括开头用表格形式写明博客信息,这一点我须要实践到本身的博客中。她的代码中将功能和main主函数区分开,结构完整,这一点也值得我学习。

  • 任务二.

a.需求分析.css

(1)程序可读入任意英文文本文件,该文件中英文词数大于等于1个。
  (2)程序须要很壮健,能读取容纳英文原版《哈利波特》10万词以上的文章。
  (3)指定单词词频统计功能:用户可输入从该文本中想要查找词频的一个或任意多个英文单词,运行程序的统计功能可显示对应单词在文本中出现的次数和柱状图。
  (4)高频词统计功能:用户从键盘输入高频词输出的个数k,运行程序统计功能,可按文本中词频数降序显示前k个单词的词频及单词。
  (5)统计该文本全部单词数量及词频数,并能将单词及词频数按字典顺序输出到文件result.txt。
  (6)统计该文本行数及字符数;
  (7)各类统计功能均提供计时功能,显示程序统计所消耗时间(单位:ms);
  (8)可处理任意用户导入的任意英文文本;
  (9)人机交互界面要求GUI界面(WEB页面、APP页面均可);

b.核心功能代码展现:展现核心功能代码.html

  • 统计每一行单词的数量,并按序输出
public void SortWords() throws IOException{
        System.out.println("已输出到result2.txt中");
        BufferedReader bufferedReader=new BufferedReader(new FileReader("src/Harrypotter.txt"));
        BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter("src/result2.txt"));
        String s;
        while((s=bufferedReader.readLine())!=null){
            Map<String, Integer> map=new TreeMap<String,Integer>();
            String[] words=s.split("[【】、.。,\"!--;:?\'\\] ]");
            for(int i=0;i<words.length;i++){
                String key=words[i].toLowerCase();
                if(key.length()>0){
                    if(!map.containsKey(key)){
                        map.put(key, 1);
                    }else{
                        int value=map.get(key);
                        value++;
                        map.put(key, value);
                    }
                }
            }
            Set<Map.Entry<String, Integer>> entrySet=map.entrySet();
            for(Map.Entry<String, Integer> entery:entrySet){
                bufferedWriter.write(entery.getKey()+"---"+entery.getValue()+"\r\n");
            }
            bufferedWriter.newLine();
            }
        bufferedReader.close();
        bufferedWriter.close();
}
  • 绘制柱状图
public Find(String[] word, Map<String, Integer> wordsCount) {
        super();
        this.word = word;
        this.wordsCount = wordsCount;
        setTitle("绘制柱形图");
        setBounds(word.length, 200, 450, 450);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public Find() {
    }

    @Override
    public void paint(Graphics g) {

        int Width = getWidth();
        int Height = getHeight();
        int leftMargin = 50;// 柱形图左边界
        int topMargin = 50;// 柱形图上边界
        Graphics2D g2 = (Graphics2D) g;
        int ruler = Height - topMargin;
        int rulerStep = ruler / 20;// 将当前的高度评分为20个单位
        g2.setColor(Color.WHITE);// 绘制白色背景
        g2.fillRect(0, 0, Width, Height);// 绘制矩形图
        g2.setColor(Color.LIGHT_GRAY);
        for (int i = 0; i < rulerStep; i++) {
            g2.drawString((400 - 20 * i) + "个", 8, topMargin + rulerStep * i);// 绘制Y轴上的数据
        }
        g2.setColor(Color.BLUE);
        int m = 0;
        for (int i = 0; i < word.length; i++) {
            int value = wordsCount.get(word[i]);
            int step = (m + 1) * 40;// 设置每隔柱形图的水平间隔为40
            g2.fillRoundRect(leftMargin + step * 2, Height - value, 40, value, 0, 0);// 绘制每一个柱状条
            g2.drawString(word[i], leftMargin + step * 2, Height - value - 5); // 标识每一个柱状条
            m++;
        }
    }
  • 统计字符数和行数
// Initializing counters
            int countWord = 0;
            int sentenceCount = 0;
            int characterCount = 0;
            int paragraphCount = 1;
            int whitespaceCount = 0;
            try {
                if (file.exists()) {
                    FileReader fr = new FileReader(file);
                    LineNumberReader lnr = new LineNumberReader(fr);
                    int lineNum = 0;
                    while (lnr.readLine() != null) {
                        lineNum++;
                    }
                    System.out.println("该文本文档的总行数为 : " + lineNum);
                    lnr.close();
                } else {
                    System.out.println("File does not exists!");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            // Reading line by line from the
            // file until a null is returned
            while ((line = reader.readLine()) != null) {
                if (line.equals("")) {
                    paragraphCount++;
                }
                if (!(line.equals(""))) {
                    characterCount += line.length();
                    // \s+ is the space delimiter in java
                    String[] wordList = line.split("/s+");
                    countWord += wordList.length;
                    whitespaceCount += countWord - 1;
                    // [!?.:]+ is the sentence delimiter in java
                    String[] sentenceList = line.split("[!?.:]+");
                    sentenceCount += sentenceList.length;
                }
            }

c.程序运行:程序运行时每一个功能界面截图.前端

人机交互界面首页.
java

细节功能.
git

细节功能.
github

实现的功能.
eclipse

功能实现结果.
ide


d. 描述结对的过程.
函数

咱们两在一块儿行动四年,很是有默契。因为平时的课业比较多,因此咱们尽可能在上课的时间多作一些,包括平时没课的时候也一块儿在机房自习作这个实验。

e. 提供这次结对做业的PSP。.布局

PSP2.1 任务内容 计划共完成须要的时间(min) 实际完成须要的时间(min)
Planning 计划 10 9
Estimate 估计这个任务须要多少时间,并规划大体工做步骤 三天 四天
Development 开发 110 120
Analysis 需求分析(包括学习新技术) 40 100
Design Spec 生成设计文档 10 15
Design Review 设计复审(和同窗审核设计文档) 5 10
Coding Standard 代码规范(为目前的开发制定合适的规范) 10 15
Design 具体设计 10 10
Coding 具体编码 150 240
Test 测试(自我修改,修改代码,提交修改) 30 50
Reporting 报告 20 180
Rostmortem & Process Improvement Plan 过后总结,提出过程改进计划 3 5

f. 小结感觉.

这个项目有不少功能都和上一个词频软件功能相似,因此咱们首先对比了咱们两我的的实验二项目,取比较好的部分进行整合再开始这个项目。新增了四个功且补全了实验二没有实现柱状图的遗憾。咱们首先在eclipse中实现了柱形图的功能,并完成了统计每行的每一个单词的数量和统计该文本文档的行数,前端页面用sublime软件写的html页面,采用了css和js布局。因为好久不接触gui等人机交互页面设计,因此很生疏,这个实验室一点点从新捡起来的过程。在此次结对过程当中,咱们俩一块儿合做,尤为是做业截止的前一天,在机房呆了十个小时,终于将项目大概的样子有了个形,我相信在从此的学习中咱们都会成为对方的好搭档。对于咱们来讲,1+1必须是>2的,就算卡bug,也能互相鼓励。

GitHub地址点击☞此处

相关文章
相关标签/搜索