单词词频统计(12组)

单词词频统计

0.前言

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

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

+ 博客园博客地址:

+ PSP

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

扫描二维码关注公众号,回复: 2017839 查看本文章

计划

· 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中元素的查找。

猜你喜欢

转载自www.cnblogs.com/CugYzc/p/9286791.html