单词频率统计程序性能分析

/**java

        编程语言:java
正则表达式

        文档大小:351KB
算法

**/编程

问题解决步骤以下,首先我想到的是应该写一个类来读取本身电脑上的文本文档。部分代码以下代码所示:数组

public class ReadTxt {
	/**
	 * 读取文本文件,abs_path表示绝对路径
	 * @param abs_path
	 * @throws IOException
	 */
	public String fileReader(String abs_path) throws IOException{

获得了这篇文章以后,我将其转化为一个字符串数组,这里比较重要的就是如何分词,幸运的是java提供了这个功能,代码以下:编程语言

String[] strArray = new String[]{};
strArray = allWords.split("[^a-zA-Z0-9]+");

最后的步骤就是简单的统计每一个单词的频率。
函数

//找出每一个单词的频率
		for(int j = 0; j < strArray.length;j++){
			for (int k = 0; k < strArray.length; k++) {
				if((strArray[j].equalsIgnoreCase(strArray[k])) && (j != k)){
					counterFrequent[0][j]++;
				}
			}
		}

在main函数里面的运行结果以下:性能

-----------------出现频率最多的十个单词以下-------------------测试

       the             出现的频率是      1537 次spa

        of              出现的频率是      633 次

        to              出现的频率是      624 次

        a                出现的频率是      585 次

        in               出现的频率是      518 次

        said            出现的频率是      507 次

        He              出现的频率是      474 次

        You            出现的频率是      421 次

        it                出现的频率是      405 次

        I                 出现的频率是      330 次

接下来使用VisualVM测试其性能,得到的性能分析结果以下:

cpu使用状况:

从上图能够看到运行时间大概是三秒左右。

堆内存变化状况:

总共加载的类状况:

线程状况:

至此工做基本完成。


不足之处:因为我在排序的时候没有采用比较高效的算法,例如快速排序。而是本身写了一个简单的冒泡排序,所以与以前文档较小时运行时间比起来速度慢了不少。忽略了单词不正确的状况。


改进之处:能够采用高效的排序算法,或者运用java自带的hashMap效率会提升不少。


总结:在这个过程当中仍是遇到不少问题,好比程序问题,当我在读取文件的时候读取的不彻底。还有就是分词的正则表达式的写法。遇到的最大问题算是如何分析性能的问题吧,由于之前从没有接触过。我折腾了整整一天才弄出来一个结果,并且还不知道这个结果是否正确。可是,我很高兴老师布置这样的题目,在这个过程当中我学到了不少。

相关文章
相关标签/搜索