201671030118 词频统计软件项目报告

(一).需求分析

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

(二)功能设计

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

(三).设计实现

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

(四).测试运行

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

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

没有此单词:

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

(五).关键代码

显示柱状图:

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 计划 15 10
Estimate 估计这个任务需要多少时间,并规划大致的工作步骤 5 10
Development 开发 120 150
Analysis 需求分析(包括学习新技术) 30 60
Design Spec 生成设计文档 30 20
Design Review 设计复审(和同学审核设计文档) 15 10
Coding Standard 代码规范化(为目前的开发制定合适的规范) 20 30
Design 具体设计 120 180
Coding 具体编码 180 220
Code Review 代码复审 30 20
Test 测试(自我测试,修改代码,提交修改) 20 15
Reporting 报告 50 35
Test Report 测试报告 20 15
Size Measurement 计算工作量 10 10
Postmortem &Process Improvement plan 事后总结,并提出过程改进计划 15 10

源代码

GitHub

原文地址:https://www.cnblogs.com/SLZM18/p/10556731.html