實訓一——詞頻統計
阿新 • • 發佈:2018-12-11
1. 學號:16012019 姜海睿 16012006 劉晨
GIT的提交地址:https://gitee.com/bubblerui/0619/tree/master
2. 實訓照片
3. 本次作業的解題思路
老五在寢室吹牛他熟讀過《魯濱遜漂流記》,在女生面前吹牛熱愛《呼嘯山莊》《簡愛》和《飄》,在你面前說通讀了《戰爭與和平》。但是,他的四級至今沒過。你們幾個私下商量,這幾本大作的單詞量怎麼可能低於四級,大家聽說你學習《構建之法》,一致推舉你寫個程式名字叫wf,統計英文作品的單詞量並給出每個單詞出現的次數,準備用於打臉老五。
希望實現以下效果:
- 1.讀取檔案,檔案內包可含英文字元,及常見標點,空格級換行符。
- 2.統計英文單詞在本檔案的出現次數
- 3.將統計結果排序
- 4.顯示排序結果
import java.io.BufferedReader; import java.io.FileReader; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.Map.Entry;import java.util.TreeMap; /** * * @author cute * * * 實現從檔案中讀入英文文章,統計單詞個數,並按值從大到小輸出 */ public class wf { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new FileReader("F:\\BUBBLE\\文章.txt")); List<String> lists = new ArrayList<String>(); //儲存過濾後單詞的列表 String readLine = null; while((readLine = br.readLine()) != null){ String[] wordsArr1 = readLine.split("[^a-zA-Z]"); //過濾出只含有字母的 for (String word : wordsArr1) { if(word.length() != 0){ //去除長度為0的行 lists.add(word); } } } br.close(); Map<String, Integer> wordsCount = new TreeMap<String,Integer>(); //儲存單詞計數資訊,key值為單詞,value為單詞數 //單詞的詞頻統計 for (String li : lists) { if(wordsCount.get(li) != null){ wordsCount.put(li,wordsCount.get(li) + 1); }else{ wordsCount.put(li,1); } } SortMap(wordsCount); //按值進行排序 } //按value的大小進行排序 public static void SortMap(Map<String,Integer> oldmap){ ArrayList<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(oldmap.entrySet()); Collections.sort(list,new Comparator<Map.Entry<String,Integer>>(){ public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { return o2.getValue() - o1.getValue(); //降序 } }); for(int i = 0; i<list.size(); i++){ System.out.println(list.get(i).getKey()+ ": " +list.get(i).getValue()); } } }
通過檢索文字文件上的英文文章,統計英文單詞出現的次數,通過使用迴圈,排序,定義類,資料夾批量處理,並且需要使用排序方法實現降序輸出