「已注销」 2022-05-27 09:13 采纳率: 100%
浏览 126
已结题

统计某个文本文件当中出现单词个数,以及每一种单词出现的频率占所有单词总数的比例。还要拿到前五个频率最高的单词,求出它们的数量之和 占所有单词总数的比

如题:
统计某个文本文件当中出现单词个数,以及每一种单词出现的频率占所有单词总数的比例。还要拿到前五个频率最高的单词,求出它们的数量之和 占所有单词总数的比
今天下午两点左右要用的,还请尽快!感激不尽!

  • 写回答

2条回答 默认 最新

  • zpeien Android领域新星创作者 2022-05-27 10:13
    关注

    代码如下:

    
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.*;
    
    public class ReadTest {
        public static void main(String[] args) {
    
            //逐行读文件
            BufferedReader br = null;
            try {
                Map<String,Integer> map = new HashMap<String,Integer>();
                // 读取文件
                br = new BufferedReader(new FileReader("/home/c3736/IdeaProjects/Helloword/src/com/tinno/test1/words.txt"));
                String line;
                int total = 0;
                while(null != (line = br.readLine())){
                    System.out.println(line);
    
                    //将字符串用空格分隔
                    String[]ss = line.split("\\s+");
                    for(String s : ss){
                        // 计算单词总数
                        total ++;
                        if(map.containsKey(s)){
                            map.put(s, map.get(s)+1);
                        }else{
                            map.put(s, 1);
                        }
    
                    }
    
                }
    
                List<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(map.entrySet());
                Collections.sort(list,new Comparator<Map.Entry<String,Integer>>() {
                    //对map value值降序排序
                    public int compare(Map.Entry<String, Integer> o1,
                                       Map.Entry<String, Integer> o2) {
                        int compare = (o1.getValue()).compareTo(o2.getValue());
                        return -compare;
                    }
    
                });
                System.out.println("单词总数为:" + total);
                int i = 5;
                int f_total = 0;
                for(Map.Entry<String,Integer> mapping:list){
                    String key = mapping.getKey();
                    Integer value = mapping.getValue();
                    if(i>0){
                        f_total += value;
                        i--;
                    }
                    double x = (double)value/ total; // 计算占比
                    System.out.println("单词 "+ key+"\t数量为:"+value+"\t\t占比为:" + x*100+ "%");
                }
                double y  = (double) f_total/total;
                System.out.println("前五的单词数量和为:"+ f_total+"\t比例为:" + y*100+"%");
    
    
            }catch(FileNotFoundException e) {
                e.printStackTrace();
            }catch(IOException e) {
                e.printStackTrace();
            }finally {
                if(null != br){
                    try {
                        br.close();
                    }catch(IOException e) {
    
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    
    

    文件内容:

    img

    运行结果:

    img

    如有帮助,请点采纳

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月4日
  • 已采纳回答 5月27日
  • 修改了问题 5月27日
  • 赞助了问题酬金10元 5月27日
  • 展开全部

悬赏问题

  • ¥15 前端和后端代码都没报错,但是点登录没反应的?
  • ¥100 需要远程解决QSQLITE问题!
  • ¥15 代码问题,应该怎样去修改完善。求解答,
  • ¥15 利用光场表达式画出初始光场强度分布图像等几个问题在这两个图片里
  • ¥15 gozero求手把手教学,400一天
  • ¥15 泥浆冲清水的泥浆分布
  • ¥15 LASSO回归分析筛选关键基因,适合多大样本量?
  • ¥88 error: [polling_error] {"code":"ETELEGRAM","message":"ETELEGRAM: 502 Bad Gateway"}错误
  • ¥15 刚毕业,刚通过一家PLC工程师,请问一下待遇还算可以吗?
  • ¥15 公司内网,想基本不写代码挂一些视频,有一个还不错的前端展示,有什么软件或者框架可以用吗?尽量简单