WordCount优化——单词及词频统计

github地址

https://github.com/lzwk/WCpro

PSP表格

PSP2.1

PSP阶段

预估耗时(分钟)

实际耗时(分钟)


Planning


计划


10


20


· Estimate


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


10


15


Development


开发


500


480


· Analysis


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


80


100


· Design Spec


· 生成设计文档


30


30


· Design Review


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


30


40


· Coding Standard


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


5


10


· Design


· 具体设计


60


55


· Coding


· 具体编码


450


460


· Code Review


· 代码复审


60


120


· Test


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


150


200


Reporting


报告


100


120


· Test Report


· 测试报告


50


50


· Size Measurement


· 计算工作量


10


20


· Postmortem & Process Improvement Plan


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


20


30


合计


1565


1750

接口设计

经由团队讨论,本次实验分为四个模块,分别为输入检测,单词检测及统计,单词排序,文本输出。我负责的模块为单词检测及统计。该接口返回一个map实体,接受一个文件路径参数。核心思路,提取文件中所有满足单词格式的字符串,并保存到一个String数组中,遍历该数组统计词频并保存结果到一个map实体中,返回该map实体。

代码如下:

public static Map<String, Integer> scan(String path)throws IOException
    {
        //读取文档并将所有单词放入list并统计
        InputStreamReader isr = new InputStreamReader(new FileInputStream(path));
        BufferedReader br = new BufferedReader(isr);
        String str=null;
        List<String> lists = new ArrayList<String>();  //存储过滤后单词的列表
        while((str=br.readLine())!=null){
            String[] tmp = str.split("[^a-zA-Z-]");  //过滤出只含有字母的
            for(int i=0;i<tmp.length;i++){
                if(tmp[i].length()!=0)
                {
                    //最后带短横线的但未链接的单词去掉短线
                    if((tmp[i].substring(tmp[i].length()-1, tmp[i].length())).equals("-"))
                    {
                        if(tmp[i].length()!=1)//避免单个横线时输出空字符
                        {
                            lists.add(tmp[i].substring(0, tmp[i].length()-1));
                        }
                    }
                    else
                    {
                        lists.add(tmp[i]);
                    }
                }
            }
        }
        isr.close();
        Map<String, Integer> wordsCount = new TreeMap<String,Integer>();  //存储单词计数信息,key值为单词,value为单词数
        //单词的词频统计
        for (String li : lists) {
            if(wordsCount.get(li) != null){
                wordsCount.put(li,wordsCount.get(li) + 1);
            }else{
                wordsCount.put(li,1);
            }    

        }
        return wordsCount;
    }

测试设计过程

根据测试文件,得到一个保存有正确的单词及词频的map实体,再将此实体与Main.scan()返回的map实体比较。

单元测试截图

单元测试分别进行了白盒测试、黑盒测试和压力测试:

1-10:白盒测试,根据路径覆盖设计的测试用例;

11-20:黑盒测试,利用随机选取的单词组,以及手动随机输入字符的形式来获取测试用例;

21-22:压力测试,测试用例中包含大量单词,以千记位,此时代码的执行效率收到明显影响。对比测试21和22,尤其是当文件中包含有大量不常用字符时,代码效率下降跟为明显。

开发规范说明

选择的是Google Java编程风格指南

中文版链接:https://blog.csdn.net/zen99t/article/details/50763231

代码分析

评审的是SortMap(输出排序)模块的代码,该代码基本符合编程规范。其中有所不符合的是:

1.      import不要使用通配符;

2.      大括号的使用,即使只有一条语句(或是空),也应该把大括号写上;

3.      块缩进,两个空格。部分缩进未达到要求。

命名规范方面,该模块与规范一致,类名都以UpperCamelCase风格编写,方法名都以lowerCamelCase风格编写,参数名以lowerCamelCase风格编写,未出现单词缩写等。

静态代码检查工具

采用了多种工具,并比对发现各种工具的检测规则不尽相同。

有PMD,findbugs,checkstyle,所需插件均能在该站点找到:http://sourceforge.net/

工具扫描结果

PMD和findbugs扫描结果都为无错误,选用其他代码进行展示错误结果。

Checkstyle规范较为严格,对缩进空格有着严格的规定,导致所有代码都不符合规范,而findbugs和PMD则发现不了问题。这说明本次实验代码还是较为符合编程规范的。其遵循的好的规范主要都在Google Java编程风格指南中可以找到。

小组代码分析

本次小组实验的代码基本还是比较符合规范的,本次小组实验的代码基本还是比较符合规范的,但是整合过程出现了些小纰漏,与前期商讨不足不无关系。其次,就是模块划分的不够严谨,注释方面不够详尽,部分模块的代码可读性不够高。

原文地址:https://www.cnblogs.com/MrZhang145689/p/8733149.html

时间: 2024-11-08 13:04:33

WordCount优化——单词及词频统计的相关文章

201671010423 词频统计软件项目报告

需求分析 1.程序可读入任意英文文本文件,该文件中英文词数大于等于1个. 2.程序需要很壮健,能读取容纳英文原版<哈利波特>10万词以上的文章. 基本功能 1.指定单词词频统计功能:用户可输入从该文本中想要查找词频的一个或任意多个英文单词,运行程序的统计功能可显示对应单词在文本中出现的次数和柱状图. 2.高频词统计功能:用户从键盘输入高频词输出的个数k,运行程序统计功能,可按文本中词频数降序显示前k个单词的词频及单词. 3.统计该文本所有单词数量及词频数,并能将单词及词频数按字典顺序输出到文件

201671010457 朱石景 词频统计软件项目报告

一.需求分析 1.首先要实现单词数量统计. 2.统计出每个单词出现的次数. 3.计算出每个单词出现的频率. 4.统计结果进行可视化输出. 二.功能设计 基本功能: 1.实现单词的词频统计 2.进行高频词汇统计 3.进行单词数量查找 拓展功能: 条形图显示功能 三.环境需求 测试机环境:windows环境 matlab版本:MATLAB R2015b 四.设计实现 该设计实现过程是用MATLAB强大的数据计算与统计能力下实现的,通过定义参数,设置路径实现在该设计界面引导下将任意英文文本文件读入程序

201671010444 词频统计软件项目报告

该项目实施过程主要包括以下7部分. 一.需求分析 1.程序需要读入至少一个词,可读入任意英文文本. 2.至少可以统计10万词及以上的文本. 3.用户可以同时查询多个单词的统计,并显示出其个数和柱状图. 4.用户可以筛选单词频数大于n的单词,进行降序显示其单词及其频数. 5.统计文本所以单词及其词频,并在文本文件中按字典序进行显示. 二.功能设计 1.基本功能:对输入的大于等于一个单词的英文, 实现其一个或多个单词的单词和词频统计并以柱状图的形式显示出来, 可以对多个单词进行条件查询并对其按降序或

Hadoop基础学习(一)分析、编写并运行WordCount词频统计程序

前面已经在我的Ubuntu单机上面搭建好了伪分布模式的HBase环境,其中包括了Hadoop的运行环境. 详见我的这篇博文:http://blog.csdn.net/jiyiqinlovexx/article/details/29208703 我的目的主要是学习HBase,下一步打算学习的是将HBase作为Hadoop作业的输入和输出. 但是好像以前在南大上学时学习的Hadoop都忘记得差不多了,所以找到以前上课做的几个实验:wordCount,PageRank以及InversedIndex.

单词词频统计(12组)

单词词频统计 0.前言 该程序写于2018年7月9日,在北京航空航天大学与南通大学鞠小林老师结对完成.在此期间通过结对编程完成整个项目的需求分析.设计.开发.测试等.现在回顾一下这个程序的编写过程.与鞠老师的合作是很愉快的.总体信息如下: + 小组GitHub 地址:https://github.com/yuan574954352/WordCount + 博客园博客地址: + PSP PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟

使用SparkSQL编写wordCount的词频统计

 使用SparkSQL编写wordCount的词频统计: word.txt 文件: hello hello scala spark java sql html java hello jack jack tom tom you he he sql IDEA编写的 spark 代码: object WordCount { def main(args: Array[String]): Unit = { val spark: SparkSession = SparkSession.builder() .

java词频统计——改进后的单元测试

测试项目 博客文章地址:[http://www.cnblogs.com/jx8zjs/p/5862269.html] 工程地址:https://coding.net/u/jx8zjs/p/wordCount/git ssh://[email protected]:jx8zjs/wordCount.git 测试用例: 1. 1 My English is very very pool 2.地址 [http://www.gutenberg.org/files/2600/2600-0.txt] 待测单

Hadoop之词频统计小实验(基于单节点伪分布)

声明:1)本文由我bitpeach原创撰写,转载时请注明出处,侵权必究. 2)本小实验工作环境为Ubuntu操作系统,hadoop1-2-1,jdk1.8.0. 3)统计词频工作在单节点的伪分布上,至于真正实际集群的配置操作还没有达到,希望能够由本文抛砖引玉. (一)Hadoop的配置修正 网上有很多Hadoop的配置教程,可自行寻找,这一部分主要是根据自身实际情况,结合自身特点,设置Hadoop.因为有时候根据别人的教程,设置总是不成功,因为别人的教程依赖于别人的软件或操作环境特点. 本部分也

第4周小组作业:WordCount优化

第4周小组作业:WordCount优化 一.基本任务:代码编写+单元测试 小组github 地址 https://github.com/iwannastay/WcPro PSP表格 PSP2.1 PSP阶段 预估耗时(分钟) 实际耗时(分钟) Planning 计划 30 60 Estimate 估计任务需要多少时间 30 60 Development 开发 180 240 Analysis 需求分析 20 30 Design Spec 生成设计文档 20 30 Design Review 设计