1. 程式人生 > >Java語言詞頻統計程式

Java語言詞頻統計程式

一、功能:
1.可匯入任意英文文字檔案
2.統計該英文檔案中單詞數和各單詞出現的頻率(次數),並能將單詞按字典
順序輸出。
3.將單詞及頻率寫入檔案。
二、流程圖:
在這裡插入圖片描述
三、具體程式碼:
package CPTJ;

import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class WordCount {
public static void countTextWords(String string){
//陣列中的字元將字串拆分為多個子字串
String stringArray[]=string.split("[^a-zA-Z]");
final Map<String,Integer> map=new HashMap<String,Integer>();
Integer count;
for(int i=0;i<stringArray.length;i++){
count=map.get(stringArray[i]);
if(count==null){
map.put(stringArray[i], 1);
}else{
map.put(stringArray[i], count+1);
}
}
//去掉不是字母的東西
map.remove("");
Set set=map.keySet();
Integer sum=0,value;
String key;

	//統計出總的單詞數
	for(Iterator iter=set.iterator();iter.hasNext();){   
		key=(String)iter.next();
		value=map.get(key);
		sum+=value;
	}
	System.out.println("總的單詞數為:"+sum);
	
	//計算每個單詞出現的頻率
	for(Iterator iter=set.iterator();iter.hasNext();){
		key=(String)iter.next();
		value=map.get(key);
		float frequency=(float)value/sum;
		java.text.DecimalFormat df=new java.text.DecimalFormat("#0.000");
		System.out.println(key+":"+value+"  "+df.format(frequency));
	}
}
public static void main(String[] args) throws IOException {
	System.out.println("請輸入檔案路徑,包括字尾名:");
	Scanner sc =new Scanner(System.in);
	String name=sc.next();
	String context="";
	int ch;       //定義一個變數用於記錄讀取的字元
	FileReader reader=new FileReader(name);
	while((ch=reader.read())!=-1){     //迴圈判斷是否讀到檔案的末尾
		context+=(char)ch;   //進行字元列印輸出
	}
	if(name.endsWith(".txt"))
		countTextWords(context);
	else
		System.out.println("不處理這種檔案");
	reader.close();
	reader.close();		
}

}

四、測試結果:
在這裡插入圖片描述