單詞頻率統計程序性能分析

/**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效率會提升不少。


總結:在這個過程當中仍是遇到不少問題,好比程序問題,當我在讀取文件的時候讀取的不徹底。還有就是分詞的正則表達式的寫法。遇到的最大問題算是如何分析性能的問題吧,由於之前從沒有接觸過。我折騰了整整一天才弄出來一個結果,並且還不知道這個結果是否正確。可是,我很高興老師佈置這樣的題目,在這個過程當中我學到了不少。

相關文章
相關標籤/搜索