• 单词统计


    用户需求:

    英语的26 个字母的频率在一本小说中是如何分布的?

    某类型文章中常出现的单词是什么?

    某作家最常用的词汇是什么?

    《哈利波特》 中最常用的短语是什么,等等。

    我们就写一些程序来解决这个问题,满足一下我们的好奇心。

    0步:输出某个英文文本文件中 26 字母出现的频率,由高到低排列,并显示字母出现的百分比,精确到小数点后面两位。

    字母频率 = 这个字母出现的次数 / (所有A-Z,a-z字母出现的总数)

    如果两个字母出现的频率一样,那么就按照字典序排列。  如果 S 和 T 出现频率都是 10.21%, 那么, S 要排在T 的前面。

    1步:输出单个文件中的前 N 个最常出现的英语单词。

    作用:一个用于统计文本文件中的英语单词出现频率。

    单词:以英文字母开头,由英文字母和字母数字符号组成的字符串视为一个单词。单词以分隔符分割且不区分大小写。在输出时,所有单词都用小写字符表示。

    英文字母:A-Z,a-z

    字母数字符号:A-Z,a-z,0-9

    1步:输出单个文件中的前 N 个最常出现的英语单词。

    分割符:空格,非字母数字符号 例:good123是一个单词,123good不是一个单词。good,Good和GOOD是同一个单词。

    package danci;

    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.TreeMap;

    import java.util.regex.Matcher;

    import java.util.regex.Pattern;

    public class Danci {

        public static void main(String[] args) throws Exception {

            BufferedReader reader = new BufferedReader(new FileReader(

                    "E:\.txt"));

            StringBuffer buffer = new StringBuffer();

            String line = null;

            while ((line = reader.readLine()) != null) {

                buffer.append(line);

            }

            reader.close();

            Pattern expression = Pattern.compile("[a-zA-Z]+");// 定义正则表达式匹配单词

            String string = buffer.toString();

            Matcher matcher = expression.matcher(string);//

            Map<String, Integer> map = new TreeMap<String, Integer>();

            String word = "";

            int times = 0;

      while (matcher.find()) {// 是否匹配单词

                word = matcher.group();// 得到一个单词-树映射的键

                if (map.containsKey(word)) {// 如果包含该键,单词出现过

                    times = map.get(word);// 得到单词出现的次数

                    map.put(word, times + 1);

                } else {

                    map.put(word, 1);// 否则单词第一次出现,添加到映射中

                }

            }

            /*

             * 核心:如何按照TreeMap value排序而不是key排序.Map.Entry放在集合里, 重写比较器,在用

             * Collections.sort(list, comparator);进行 排序

             */

            List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(

                    map.entrySet());

            /*ZZZZZZZZZZZZZZZ

             * 重写比较器

             * 取出单词个数(value)比较

             */

            Comparator<Map.Entry<String, Integer>> comparator = new Comparator<Map.Entry<String, Integer>>() {

                public int compare(Map.Entry<String, Integer> left,

                        Map.Entry<String, Integer> right) {

                    return (left.getValue()).compareTo(right.getValue());

                }

            };

            Collections.sort(list, comparator);// 排序

            int last = list.size() - 1;

            for (int i = last; i > last - 1000; i--) {

                String key = list.get(i).getKey();

                Integer value = list.get(i).getValue();

                System.out.println(key + " :" + value);

                

            }

            

        }

    }

  • 相关阅读:
    python json 和 pickle的补充 hashlib configparser logging
    go 流程语句 if goto for swich
    go array slice map make new操作
    go 基础
    块级元素 行内元素 空元素
    咽炎就医用药(慢性肥厚性咽炎)
    春季感冒是风寒还是风热(转的文章)
    秋季感冒 咳嗽 怎么选药
    解决IE浏览器“无法显示此网页”的问题
    常用的 css 样式 记录
  • 原文地址:https://www.cnblogs.com/love-nan/p/11106686.html
Copyright © 2020-2023  润新知