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(); }
}
四、測試結果: