统计文章中出现的单词频率java小程序

更改:1.原博文过滤效果未展示,新增加过滤展示(要过滤的单词在文件particle.txt中,可以很方便的在其中按过滤条件添加或删除单词,要统计的文档在文件ENGl.txt中,统计了第一部《哈利波特》)
            2.利用jvisualvm.exe 改进了性能分析结果


一.简介:本程序采用java语言编程,实现了统计一篇英文文章中出现频率最高的并且有意义(去掉虚词,语气助词等不影响文意的单词)十个单词的功能。并用分别《哈利波特》一书的不同章数测试,得出该书作者最爱用的10个单词。

二.设计思路:为了实现统计一篇英文文章中出现频率最高的十个单词的功能,我将程序功能分解为三部分,第一部分是将文章读入内存并将每个单词分开,第二部分是将每个单词出现的次数统计出来,第三部分是将出现次数最多的十个单词选出。bu

三.具体实现:1.读入文件并利用java方法将其转化为字符串类型

                  2.利用正则表达式判断将字符串转换为字符串数组,每一个单词就是数组中的一个元素

                  3.建立Obeject类型的二维数组(因为Object类型为所有类的超类方便后续数组存储相应信息)。数组为N行2列,第一列用于存储不同的单词,第二列用于存储相应单词的个数。对单词数组进行遍历,当前单词与已存储单词比较,如果相同则相应单词数加1,如果与以存储单词都不同则在以存储单词数组后加行用于记录此单词。一次遍历后可得到不同单词的个数。

                 4.对单词信息数组遍历,如果当前单词为虚词,语气助词等无意义的词语,则将其次数置为0,以达到统计出的单词有意义的目的。

                 5.采用类似于选择排序算法从存储单词信息的数组中选择出现次数最多的10个单词依次输出(每一次选择出现次数最多的一个单词,输出后将其次数置为0,执行10次即可)。

四.简略分析:算法的时间复杂度为O(n²),问题规模为n,由于全程采用数组存储空间复杂度为O(1)。

五.程序代码:

package main;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
public class txt2{
	public static void main(String[] args) throws Exception
	{   
		File file = new File("D:\\Android\\软件工程作业\\src\\ENGl.txt");//导入txt文档
		FileReader reader = new FileReader(file);
		int fileLen = (int)file.length();
		char[] chars = new char[fileLen];
		reader.read(chars);
		String txt = String.valueOf(chars);
		String[] a=txt.split("[^a-zA-Z]+");   //利用正则表达式将字符串划分为单词字符串数组
		int n=a.length;//获取文章中单词个数
		int nind=0,wind=0;  //nind表示文章中的不同单词个数,初始值为0,wind代表文章中总的单词数
		Object[][] b=new Object[n][2];
		for(;wind(int)b[max][1]){
					max=j;
				}
			}
			System.out.println(b[max][0]+"出现次数为:"+b[max][1]);
			b[max][1]=0;
		}
	}
}


六.结果截图

统计文章中出现的单词频率java小程序_第1张图片

七.程序分析

1).线程分析

统计文章中出现的单词频率java小程序_第2张图片

2).cpu及内存消耗情况

统计文章中出现的单词频率java小程序_第3张图片

3).统计结果分析

     从统计的结果看,整部小说采用第三人称视角,时态为过去时,男主角为哈利,Dudley 出现次数较多,说明故事的发生地为英国。去掉这些词后统计发现故事风格为魔幻类(因为magic一词出现频率较高)。


你可能感兴趣的:(软件工程学习)