zoukankan      html  css  js  c++  java
  • 单词词频统计(12组)

    单词词频统计

    0.前言

    该程序写于2018年7月9日,在北京航空航天大学与南通大学鞠小林老师结对完成。在此期间通过结对编程完成整个项目的需求分析、设计、开发、测试等。现在回顾一下这个程序的编写过程。与鞠老师的合作是很愉快的。总体信息如下:

    + 小组GitHub 地址:https://github.com/yuan574954352/WordCount 

    + 博客园博客地址:

    + PSP

    PSP2.1

    Personal Software Process Stages

    预估耗时(分钟)

    实际耗时(分钟)

    Planning

    计划

    · Estimate

    · 估计这个任务需要多少时间

    10

    15

    Development

    开发

    0

    0

    · Analysis

    · 需求分析 (包括学习新技术)

    30

    30

    · Design Spec

    · 生成设计文档

    15

    15

    · Design Review

    · 设计复审 (和同事审核设计文档)

    20

    30

    · Coding Standard

    · 代码规范 (为目前的开发制定合适的规范)

    5

    5

    · Design

    · 具体设计

    10

    20

    · Coding

    · 具体编码

    40

    80

    · Code Review

    · 代码复审

    20

    30

    · Test

    · 测试(自我测试,修改代码,提交修改)

    40

    50

    Reporting

    报告

    0

    0

    · Test Report

    · 测试报告

    5

    10

    · Size Measurement

    · 计算工作量

    5

    5

    · Postmortem & Process Improvement Plan

    · 事后总结, 并提出过程改进计划

    10

    20

    合计

    210

    310

     

    1. 设计思路

    Java中的Map接口建立了 key 和 value 的映射。拟采用 key 存储需要统计的字符(或单词),value 则对应对应字符(或单词)的频率。  

    例如, 建立一个map,其中的key存储的是字符(a,w,z等),value则存储的对应的频率。

      2.系统框架

    程序的整体开发流程如下:

                      

    1)对文本中非英语的一切字符进行过滤,只留下英语和必要的空格,能够区分不同单词,同时对于英语中特别的字符要加以处理)

    2)过滤出单词

    3)对单词首先在数据表中“查找”操作,如果存在,则更新值,如果不存在,则插入值。

    4)寻找合适的呈现方法,将最终的数据呈现出来,表格、文件等

    主要处理流程是:

    main(String[] args) {

    lib test = new lib();

    test.dealFile(args);

    orderList1 = test.sortMap(test.getMap1());

    orderList2 = test.sortMap(test.getMap2());

    test.out("output1.txt",orderList1);

    test.out("output2.txt",orderList2);

     }

     

    Step1: 函数dealFile(),逐行读取文件; 调用函数 dealLine() 来处理每一行字符和字符串;统计好频率放到对应的全局变量 map1、map2;

    Step2 函数sortMap()是对 map map1 map2)的内容按 value 值降序排列;

    Step3:函数out() 输出 top_n 字符(串)到指定的文件。

    这个过程中用到了信息隐蔽原则,将上述4个主要函数dealFile、dealLine、sortMapout 独立编写在 lib.java文件中;其中 dealFile 循环调用 dealLine 函数以处理输入文件的每一行;

        此外,在 lib.java 中编写了一些判断字符类型的短小的函数,如isZ()、isNumber()、isSplit()。

    上述设计不足之处是采用if… else… 结构处理分词,效率比较低,而且容易遗漏一些特殊的单词组合情况。如以下单词:isn’t FFile3name 等

    1. 性能评估及改进

    利用 JProfile 开展性能评估,处理大文件,gong_with_the_wind.txt第一次,运行时间大概2000+ms,分析发现系统打印输出代码耗费了大量的时间,因此移除了调试时插入的一些打印输出代码。程序执行时间大为缩短。大约339ms,主要时间耗费在 Map中元素的查找。

  • 相关阅读:
    前后端分离项目采用Prerender的SEO优化流程
    spring多数据源分布式事务的分析与解决方案
    Windows上MyEclipse2017 CI7 安装、破解以及配置
    WINDOWS上JDK安装与环境变量设置
    Abp Vnext Vue3 的版本实现
    你好,年轻人
    数据结构·堆
    数据结构·优先队列
    算法笔记·并查集
    JAVA问题解决——Jar包中资源调用
  • 原文地址:https://www.cnblogs.com/CugYzc/p/9286791.html
Copyright © 2011-2022 走看看