wordcount优化——单词及词频统计(代码片段)

mrzhang145689 mrzhang145689     2022-11-01     168

关键词:

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编程风格指南中可以找到。

 

小组代码分析

 

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

 

201671030119词频统计软件项目报告(代码片段)

...取容纳英文原版《哈利波特》10万词以上的文章。3.指定单词词频统计功能:用户可输入从该文本中想要查找词频的一个或任意多个英文单词,运行程序的统计功能可显示对应单词在文本中出现的次数和柱状图。4.高频词统计功能... 查看详情

201671010421麻存滔词频统计软件项目报告(代码片段)

...取容纳英文原版《哈利波特》10万词以上的文章。2.指定单词词频统计功能:用户可输入从该文本中想要查找词频的一个或任意多个英文单词,运行程序的统计功能可显示对应单词在文本中出现的次数和柱状图。3.高频词统计功能... 查看详情

python菜鸟教程|wordcount词频统计(代码片段)

python实现wordcount词频统计classSolution(object):defsingleNumber(self,nums):""":typenums:List[int]:rtype:int"""dict=foriinnums:ifiindict.keys():dict[i]=dict[i]+1else:di 查看详情

201671010406词频统计软件项目报告(代码片段)

一.需求分析统计文件中各单词的出现次数二.功能设计程序可读入任意英文文本文件,该文件中英文词数大于等于1个。程序需要很壮健,能读取容纳英文原版《哈利波特》10万词以上的文章。指定单词词频统计功能:用户可输入... 查看详情

201671010423词频统计软件项目报告(代码片段)

...文原版《哈利波特》10万词以上的文章。基本功能1.指定单词词频统计功能:用户可输入从该文本中想要查找词频的一个或任意多个英文单词,运行程序的统计功能可显示对应单词在文本中出现的次数和柱状图。2.高频词统计功能... 查看详情

spark---词频统计(代码片段)

...下:1.新建项目:(这里是在已有的项目中创建的,可单独创建wordcount项目)①新建txt文件:wordcount.txt(文件内容:跟词频统计(一)中文件一致)②创建py文件:word.pyfrompysparkimportSparkContextfrompysparkimportSparkConfconf=SparkConf().s 查看详情

wordcount代码实现及测试(代码片段)

...者:201631062515201631062415码云地址:https://gitee.com/heshuxiang/WordCount/tree/master2.项目需求  对程序设计语言源文件统计字符数、单词数、行数,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速地处理多... 查看详情

201671010444词频统计软件项目报告(代码片段)

...可以统计10万词及以上的文本。3.用户可以同时查询多个单词的统计,并显示出其个数和柱状图。4.用户可以筛选单词频数大于n的单词,进行降序显示其单词及其频数。5.统计文本所以单词及其词频,并在文本文件中按字典序进行... 查看详情

201671010402词频统计软件项目报告(代码片段)

...户可输入从该文本中想要查找词频的一个或任意多个英文单词,运行程序的统计功能可显示对应单词在文本中出现的次数。统计该文本所有单词数量及词频数,并能将单词及词频数按字典顺序输出到文件result.txt。本次项目必须... 查看详情

7-1词频统计(30分)(代码片段)

...(30分)请编写程序,对一段英文文本,统计其中所有不同单词的个数,以及词频最大的前10%的单词。所谓“单词”,是指由不超过80个单词字符组成的连续字符串,但长度超过15的单词将只截取保留前15个单词字符。而合法的“单... 查看详情

201671010439-词频统计软件项目报告

...取容纳英文原版《哈利波特》10万词以上的文章。3.指定单词词频统计功能:用户可输入从该文本中想要查找词频的一个或任意多个英文单词,运行程序的统计功能可显示对应单词在文本中出现的次数和柱状图。4.高频词统计功能... 查看详情

wcpro

...任务:1)分词:从文本中提取出符合要求的单词,相比WordCount里的分词而言,此处尤其需要注意对连词符-的处理。2)统计词频:要统计各个单词出现的次数,自然要时刻维护(单词,频度)这样的一个二元组集合。一种直接的做法... 查看详情

词频统计及效能分析(代码片段)

...rnNonetxt.close()returnbvffer2.数据处理--去除字符串中的符号将单词分割并读入字典。defprocess_buffer(bvffer):ifbvffer:word_freq=#下面添加处理缓冲区bvffer代码,统计每个单词的频率,存放在字典word_freqforiteminbvffer. 查看详情

lucene统计单词次数(词频)并进行排序(代码片段)

1publicclassWordCount2staticDirectorydirectory;3//创建分词器4staticAnalyzeranalyzer=newIKAnalyzer();5staticIndexWriterConfigconfig=newIndexWriterConfig(analyzer);6staticIndexWriterwriter;7staticIndexReade 查看详情

软件质量与测试第4周小组作业:wordcount优化(代码片段)

GitHub项目地址https://github.com/Guchencc/WordCounter 组长:  陈佳文:负责词频统计模块与其他模块 组员:  屈佳烨:负责排序模块  苑子尚:负责输出模块  李一凡:负责输入模块  PSP表格 PSP2.1PSP阶段预估... 查看详情

使用scala语言调用flink框架进行wordcount词频统计测试不同parallelism并行度对运算速度的影响(代码片段)

使用Scala语言调用Flink框架进行WordCount词频统计测试不同Parallelism并行度对运算速度的影响概述准备工作Maven工程准备测试数据准备Scala程序编写执行分析结果概述之前测试过单虚拟机(分配2Core和6G内存)跑Spark进行WordCount... 查看详情

第一次作业——词频统计(代码片段)

一,需要满足的需求1.统计文件的字符数2.统计文件的单词书3.统计文件的行数4.统计文件中各单词的出现次数5.对给定文件夹及其递归文件夹下的所有文件进行统计6.统计两个单词(词组)在一起的频率,输出频率最高的前10个。&... 查看详情

综合练习:词频统计(代码片段)

...’:等分隔符全部替换为空格将所有大写转换为小写生成单词列表生成词频统计排序排除语法型词汇,代词、冠词、连词输出词频最大TOP201.英文词频统下载一首英文的歌词或文章将所有,.?!’:等分隔符全部替换为空格将所有大... 查看详情