201671030118 词频统计软件项目报告

(一).需求分析

—程序可读入任意的英文文本文件,该文件中的英文词数大于等于一个。 
—能够读取容纳英文原版《哈利波特》10万词以上的文章。
—.要有指定单词的词频统计功能,即用户可输入从该文本中想要查找词频的一个或任意多个英文单词,运行程序的统计功能可显示对应单词在文本中出现的次数和柱状图;
—高频单词统计功能,即用户共键盘输入高频词输出个数k,运行程序统计功能,可按文本中词频数降序显示前k个单词的词频及单词;
—统计该文本所有单词数量及词频数,并能将单词及词频数按字典顺序输出到文件result.txt

(二)功能设计

基本功能:
—统计文件中单词,并输出到指定文件
—根据题目要求读入文件
— 查询文件中单词出现的次数
—文本中的词频数降序显示前K个单词以及柱状图
扩展功能:
目前没有

(三).设计实现

Figure.java :统计前K个出现的频次最高的单词及词频的柱状图
StatisticalWord.java: 输入一个单词统计单词在文章中出现的个数,如果不在提示不在!
WordList.java :统计文件中单词出现的频数并输出到文件
这三个类和一个Main()函数,用户可以根据不同功能进行选择

(四).测试运行

功能1: 统计单词个数,并把结果存到result.txt中。

1623939-20190319213747444-1061317339.png

功能2:输入一个单词,统计其在文中出现的词数。

1623939-20190319213758234-622910403.png

没有此单词:

1623939-20190319213913309-158162727.png

功能3:出入前最高K个词频从多到少并用柱状图(由于图片大小缘故柱状图没有显示明显的差距。)

1623939-20190319213920999-1216657500.png

(五).关键代码

显示柱状图:

System.out.println("请输入要查看的最高词频的个数:");
int k = sc.nextInt();
if(k>0&&k<=ordlist.size())
{
System.out.println("----------词频最高的前"+k+"个单词及其柱状图-----------");

                for (Map.Entry<String, Integer> entry : ordlist) {
                    
                    System.out.printf("单词 "+"%-8s" + "出现" +"%-3d"+"次 ",entry.getKey(),entry.getValue());    
                    //用符号个数来显示模拟柱状图
                        for(int i=entry.getValue();i>0;i--)
                        {
                            System.out.print("▏");
                        }
                        System.out.println();
                        //System.out.println(entry.getKey() + ":" + entry.getValue());
                        
                        if(--k==0)
                            break;//k=0,则不再输出后面的词频                  
                    
                }
                System.out.println("------------------------------------------------"); 

            }else{
                System.out.println("输入有误!请重新输入!");
            }

将输出结果发送到results.txt中:

        try
            {
                
                FileWriter fw= new FileWriter("src\\results.txt");
                System.out.println("词频统计结果已输出列 result.txt文件·");
            } 
            catch (IOException e)
            {
                
                e.printStackTrace();
            }

进行排序

 Comparator<Map.Entry<String, Integer>> valcom = new Comparator<Map.Entry<String,Integer>>() {
        public int compare(Map.Entry<String, Integer> rst1,Map.Entry<String, Integer> rst2) {
            int sortrst=rst2.getValue()-rst1.getValue();
            return sortrst;
            
            }     
        };
            List<Map.Entry<String, Integer>> ordlist = new ArrayList<Map.Entry<String,Integer>>(map.entrySet());
            Collections.sort(ordlist,valcom);
        

(六).总结

        通过这次的项目发现,之前学过的JAVA忘的一干二净,本来就基础不好,学到的一点也忘了,所以这次代码编写花费了很多时间,需要通过网上和课本以及同学的帮助下大概的完成了项目,但还是有很多问题,需要我花更多的时间学习。

(七).psp

psp任务内容计划共完成需要的时间(min)实际完成需要的时间(min)
Planning计划1510
Estimate估计这个任务需要多少时间,并规划大致的工作步骤510
Development开发120150
Analysis需求分析(包括学习新技术)3060
Design Spec生成设计文档3020
Design Review设计复审(和同学审核设计文档)1510
Coding Standard代码规范化(为目前的开发制定合适的规范)2030
Design具体设计120180
Coding具体编码180220
Code Review代码复审3020
Test测试(自我测试,修改代码,提交修改)2015
Reporting报告5035
Test Report测试报告2015
Size Measurement计算工作量1010
Postmortem &Process Improvement plan事后总结,并提出过程改进计划1510

源代码

GitHub

转载于:https://www.cnblogs.com/SLZM18/p/10556731.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值