1. 程式人生 > >java實訓一——詞頻統計

java實訓一——詞頻統計

---恢復內容開始---

駕駛員:葛晨延(16012010)

領航員:張廣哲(16012007)

碼雲:https://gitee.com/happywindmannn/GCYshixun1/tree/master

實訓過程照片:

 

 

 

 

 

 

 1 import java.io.*;
 2 import java.util.*;
 3 import java.io.BufferedReader;  
 4 import java.io.FileReader;  
 5 import java.util.ArrayList;  
6 import java.util.Map; 7 import java.util.List; 8 import java.util.Map.Entry; 9 import java.util.TreeMap; 10 public class wtf{ 11 public static void main(String args[])throws Exception{ 12 StringBuilder result = new StringBuilder(); 13 BufferedReader file = new BufferedReader(new
FileReader("D:\\javas\\a.txt")); 14 List<String> s =new ArrayList<String>(); 15 String s1 = null; 16 while((s1 = file.readLine()) != null){ 17 String [] s2 = s1.split("[[^a-zA-Z]]"); 18 for(String s3 : s2){ 19 if(s3.length() != 0){
20 s.add(s3); 21 } 22 } 23 } 24 Map<String, Integer> TreeMap = new TreeMap<String,Integer>(); 25 for(String s4:s){ 26 if(TreeMap.get(s4) != null){ 27 TreeMap.put(s4,TreeMap.get(s4)+1); 28 } 29 else{ 30 TreeMap.put(s4,1); 31 } 32 } 33 34 35 System.out.println("以下是本文章中出現單詞頻率前十的單詞,以及頻率:\t"); 36 showmap(TreeMap); 37 file.close(); 38 } 39 public static void showmap(Map<String,Integer> oldmap){ 40 41 ArrayList<Map.Entry<String,Integer>> map = new ArrayList<Map.Entry<String,Integer>>(oldmap.entrySet()); 42 43 Collections.sort(map,new Comparator<Map.Entry<String,Integer>>(){ 44 45 public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { 46 return o2.getValue() - o1.getValue(); 47 } 48 }); 49 50 for(int i = 0; i<10; i++){ 51 52 System.out.println(map.get(i).getKey()+ ": " +map.get(i).getValue()); 53 } 54 } 55 56 }

執行結果:

需求:

1.讀取檔案,檔案內包可含英文字元,及常見標點,空格級換行符。
2.統計英文單詞在本檔案的出現次數
3.將統計結果排序
4.顯示排序結果

 解題思路:

x代表物件
1.BufferedReader x = new BufferedReader(new FileReader(檔案絕對路徑));
緩衝流,更加油效率的讀取檔案,緩衝訪問區(類似於記憶體條)。
另有方法readline()按行讀取可以使用。
相比InputStream()位元組流,FileReader()字元流更快。
2.List<String> x = new ArrayList<String>();
建立動態陣列,<>中的位陣列型別,如int,double,String。
該陣列用於儲存文章的所有單詞。
3. String[] x = readLine.split("[^a-zA-Z]");
建立陣列,用readLine()逐行過濾,括號內位正則表示式。
4.for(String x:y){}
“增強的for迴圈”,x為字串,y為字元陣列
作用是將陣列內所有元素,賦值到x中,有多少元素建立多少個x。

5.Map<String, Integer> x = new TreeMap<String,Integer>();
HashMap<String, Integer> x = new HashMap<String, Integer>();
map樹(有序) hashmap雜湊表(無序)
儲存單詞計數資訊,Stinrg是key值為單詞,Integer是value為詞頻
map.put(k,v)給表賦值
map.get(key)獲取key的value

 

 

ps:因為某些不可抗力原因程式還不夠完整,由下次實訓補全。

 

 

 

---恢復內容結束---