zoukankan      html  css  js  c++  java
  • 单词统计1——字母频率、单词频率

    课上的时候,根据老师的要求。完成了以下几步

    1.统计文章中26个英文字母个数及频率

    2.统计文章中单词个数,单词出现的频率,按降序排列,并能按照输入的个数,进行指定数量的输出。

    代码沿用了之前上学期中统计单词的代码,map作为一个容器 Map<String, Integer> map = new HashMap<String, Integer>();(结合百度的个人理解)

    代码中缺少排序,自己的思路是创建数组,存储频率,但是在运行中,出现运行之后没有结果的问题,可能是复杂度太高,或者是代码逻辑存在问题。

    package words;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Scanner;
    
    public class Words {
        public static String txtString(File file){
            StringBuilder result = new StringBuilder();
       try{
           BufferedReader br = new BufferedReader(new FileReader(file));//构造一个BufferedReader类来读取文件
           String s = null;
           while((s = br.readLine())!=null){//使用readLine方法,一次读一行
               result.append(s/*+System.lineSeparator()*/);
           }
           br.close();    
       }catch(Exception e){
           e.printStackTrace();
       }
       return result.toString();
    }
        public static void findEnglishNum(String text){
            //找出所有的单词
            String[] array = {".", " ", "?", "!","“"};
                for (int i = 0; i < array.length; i++) {
                    text = text.replace(array[i],",");
                }
                String[] textArray = text.split(",");
                //遍历 记录
                Map<String, Integer> map = new HashMap<String, Integer>();
                double sum=0.00;
                for (int i = 0; i < textArray.length; i++) {
                    sum++;
                    String key = textArray[i];
                    //转为小写
                    String key_l = key.toLowerCase();
                    if(!"".equals(key_l)){
                        Integer num = map.get(key_l);
                        if(num == null || num == 0){
                            map.put(key_l, 1);
                        }else if(num > 0){
                            map.put(key_l, num+1);
                        }
                    }
                }
                //输出到控制台
                System.out.println("各个单词出现的频率为:");
                Iterator<String> iter = map.keySet().iterator();
                String [] a = new String [1000000];
                int []b=new int [100000];
                while(iter.hasNext()){
                    int i=0;
                    String key = iter.next();
                    Integer num = map.get(key);
                    a[i]=key;
                    b[i]=num;
                    i++;
                    System.out.print(key + "	" + num + "次");
                    double n=(num/sum);
                    System.out.println(formatDouble5(n)+"%");
                }
                /*for(int j=0;j<b.length;j++)
                    for(int m=0;m<b.length;m++) {
                        if(b[j]<b[m]) {
                            int q=b[j];
                            b[j]=b[m];
                            b[m]=q;
                            String p=a[j];
                            a[j]=a[m];
                            a[m]=p;                       
                        }
                    }*/
            }
        public static String formatDouble5(double d) {
            return String.format("%.2f", d*100);
        }
        
        public static void main(String[] args){
            System.out.println("请输入路径");
            Scanner sc=new Scanner(System.in);
            String a=sc.next();
            sc.close();
            File file = new File(a);
            String text =txtString(file);
            findEnglishNum(text);
            }
    
    }
    View Code
  • 相关阅读:
    TcpUDP通讯
    hashlib模块和logging模块
    Windows之系统自带截屏快捷键
    Windows之文件夹中打开PowerShell
    scrapy之管道
    爬虫之通讯协议
    爬虫
    jupyter使用
    MongoDB之$
    MongoDB之修改器
  • 原文地址:https://www.cnblogs.com/lixv2018/p/11057352.html
Copyright © 2011-2022 走看看