实训一——词频统计

 

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());  
        }     
    }  
  
}

通过检索文本文档上的英文文章,统计英文单词出现的次数,通过使用循环,排序,定义类,文件夹批量处理,并且需要使用排序方法实现降序输出

4. 本次作业的运行结果截图

5. 小结感受:这次通过两个人.一起配合,一起完成了此次任务,一个指挥一个操作,相比一个人来说更加容易,正所谓人心齐泰山移,在遇到困难时通过查找资料,上网和寻求同学帮助问题迎刃而解。对于Java的认知还不深,以至于后面关于排序那部分代码搞不清,我觉得自己以后需要加强练习,并且学会逐渐地积累阅读各种类型难度代码,这样才能对以后遇到的各种问题不至于手足无措。

6.优缺点:在此次实训中,配合还是相对默契,没有过多的磨合,而是彼此很了解,也为此次实训减轻了一些困难,但是在此次实训中,也发现了自身还有很多知识点掌握不牢固或者没有掌握,也因为平时操作少,对于一些基本概念没有很深的理解,为实训增加了困难。

猜你喜欢

转载自www.cnblogs.com/bubblerui/p/10102106.html