詞頻統計------實訓一
詞頻統計
老五在寢室吹牛他熟讀過《魯濱遜漂流記》,在女生面前吹牛熱愛《呼嘯山莊》《簡愛》和《飄》,在你面前說通讀了《戰爭與和平》。但是,他的四級至今沒過。你們幾個私下商量,這幾本大作的單詞量怎麼可能低於四級,大家聽說你學習《構建之法》,一致推舉你寫個程式名字叫wf,統計英文作品的單詞量並給出每個單詞出現的次數,準備用於打臉老五。
1.結對成員:16012009徐小東,16012008李雪 碼雲地址:https://gitee.com/changchundehui/09-08/blob/master/Wf.java
2.程式設計過程照片:
3設計思路:這個題的要求是利用java語言統計英文作品的單詞量並給出每個單詞出現的次數,按照這個要求給出如下設計。
整個詞頻統計設計分三個部分,第一部分是讀取檔案並把所有單詞截出來。第二部分統計詞頻。第三部分把詞頻排序並輸出。
實現功能:1.第一部分:是主程式邏輯入口,這個程式有三種模式,1.單行語言處理,2.單個檔案處理,3.批量處理,0.退出程式\n請鍵入1 2 3選擇您需要的模式,模式2指定具體路徑為d盤根目錄。設計了三種模式:輸入1執行功能一,輸入2執行功能二,輸入3執行功能三。
public class Wf { public static void main(String[] args) { //主程式邏輯入口 while (true) { System.out.println("本程式有三種模式:1.單行語言處理;2.單個檔案處理;3.批量處理;0.退出程式\n請鍵入1 2 3選擇您需要的模式,模式2指定具體路徑為d盤根目錄"); Scanner readerScanner = new Scanner(System.in); int flag = readerScanner.nextInt(); if (flag == 0) { break;
設計了三種模式:輸入1執行功能一,輸入2執行功能二,輸入3執行功能三。
功能一:讀取一行單詞
else if (flag == 1) { try { System.out.println("當前為當行語言處理模式,請輸入您要評測的語句"); BufferedReader bf =new BufferedReader(new InputStreamReader(System.in)); //讀取命令列中一行 String s=bf.readLine(); LineCode(s); } catch (IOException ex) { System.out.println("請按單行輸入句子"); }
功能二:命令列輸入英文作品檔名稱
else if (flag == 2) { System.out.println("當前為單個檔案處理模式,請輸入您要輸入的檔名,格式:aaa.txt"); String s = readerScanner.next(); try { TxtCode(s); } catch (Exception ex) { System.out.println("請輸入正確的檔名稱,確定後文件存在以及檔案是否放在d:根目錄下"); }
功能三.批量統計
else if(flag==3){ System.out.println("當前為批量檔案處理模式,請輸入檔案具體路徑,格式:d:/ljr"); String path=readerScanner.next(); File file =new File(path); if (file.isDirectory()) { File[] filelist =file.listFiles(); for(File file1:filelist){ try { String s=file1.getPath();//地址回溯 System.out.println(s); FileCode(s); } catch (Exception ex) { System.out.println("請輸入正確的路徑,若程式無法結束請重新執行程式"); }
第二部分:統計單個檔案,統計單行
//統計單個檔案 public static void TxtCode(String txtname) throws Exception { BufferedReader br = new BufferedReader(new FileReader("D:/word.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(); StatisticalCode(lists); } //統計單行 public static void LineCode(String args) { List<String> lists = new ArrayList<String>(); //儲存過濾後單詞的列表 String[] wordsArr1 = args.split("[^a-zA-Z]"); //過濾出只含有字母的 for (String word : wordsArr1) { if (word.length() != 0) { //去除長度為0的行 lists.add(word); } } StatisticalCode(lists); } public static void FileCode(String args) throws FileNotFoundException, IOException { BufferedReader br = new BufferedReader(new FileReader(args)); 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(); StatisticalCode(lists); } public static void StatisticalCode(List<String> lists) { //統計排序 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); } } // System.out.println("wordcount.Wordcount.main()"); 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()); } }
4.功能執行結果
功能一:
功能二:
功能三:
5.小結感受:通過這次的結對程式設計,讓我體會到了一個團隊的合作力量是非常大的,雖然在程式設計的過程中也遇到過困難,但在兩個人的探討下問題迎刃而解。在程式設計的過程中遇到不懂得問題會查閱一些資料,在互幫互助的情況下兩個人又知道了很多知識,在學習java的過程中,有一些不懂得地方,在這次結對程式設計過程中,通過兩人的交流,也都弄懂了。所以我認為結對程式設計能夠帶來1+1>2的效果。
6.評價:在這次的結對程式設計中,我的小夥伴真的很用心,有一些我不太懂的問題能給我耐心講解。有一些需要完成的任務做的也很認真。在兩人的合作下成功的完成了這次的程式設計。我們倆打字都比較慢,所以程式設計的時間比較久,希望能夠提高打字的速度。期待下一次的合作。