• 单词统计


    要求:用户需求:
    英语的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是同一个单词。

      1 package 字母频率统计;
      2 import java.io.BufferedReader;
      3 import java.io.File;
      4 import java.io.FileInputStream;
      5 import java.io.FileNotFoundException;
      6 import java.io.IOException;
      7 import java.io.InputStreamReader;
      8 import java.text.DecimalFormat;
      9 import java.util.*;
     10 import java.util.ArrayList;
     11 import java.util.Collections;
     12 import java.util.Comparator;
     13 import java.util.HashMap;
     14 import java.util.List;
     15 import java.util.Map;
     16 import java.util.Map.Entry;
     17 public class test2 {
     18     public static void danci() throws FileNotFoundException {
     19         File file=new File("D:/QQ/1920126082/FileRecv/c1.txt");                  //读取文件
     20         Scanner input=new Scanner(file);
     21         HashMap<String,Integer> hashMap=new HashMap<String,Integer>();
     22         while(input.hasNextLine()) {
     23             String line=input.nextLine();
     24             String[] lineWords=line.split("\W+");          
     25             Set<String> wordSet=hashMap.keySet();
     26             for(int i=0;i<lineWords.length;i++) {
     27                 if(wordSet.contains(lineWords[i])) {
     28                     Integer number=hashMap.get(lineWords[i]);
     29                     number++;
     30                     hashMap.put(lineWords[i], number);  
     31                     }
     32                 else {
     33                     hashMap.put(lineWords[i], 1);
     34                 }
     35             }
     36         }
     37         for (String key : hashMap.keySet()) {
     38             System.out.println(key+"出现:"+hashMap.get(key)+"次");
     39         }
     40     }
     41     
     42     public static void danci2() throws IOException {
     43         Scanner input=new Scanner(System.in);
     44         System.out.println("输入要统计的个数:");
     45         int n=input.nextInt();
     46         File file = new File("D:/QQ/1920126082/FileRecv/c1.txt");
     47         FileInputStream fis = new FileInputStream(file);
     48         InputStreamReader isr = new InputStreamReader(fis);
     49 
     50         int thechar;
     51         StringBuffer sb = new StringBuffer();
     52         HashMap<String, Integer> wordList = new HashMap<String, Integer>();
     53         
     54         while ((thechar = isr.read()) != -1) {
     55             char letter = (char) thechar;
     56             if ((letter >= 'a' && letter <= 'z')
     57                     || (letter >= 'A' && letter <= 'Z')) {
     58                 sb.append(letter);
     59             } else if (sb.length() != 0) {
     60                 String theword = new String(sb);
     61                 if (wordList.containsKey(theword)) {
     62                     wordList.put(theword, wordList.get(theword) + 1);
     63                 } else {
     64                     wordList.put(theword, 1);
     65                 }
     66                 sb.delete(0, sb.length());
     67             }
     68         }
     69         isr.close();
     70         
     71         List<Map.Entry<String, Integer>> words = new ArrayList<Map.Entry<String, Integer>>(
     72                 wordList.entrySet());
     73         
     74         Collections.sort(words, new Comparator<Map.Entry<String, Integer>>() {
     75 
     76             @Override
     77             public int compare(Entry<String, Integer> o1,
     78                     Entry<String, Integer> o2) {
     79                 return -(o1.getValue() - o2.getValue());
     80             }
     81         });
     82         System.out.println("读取的文件中出现频率最多的"+n+"个单词是:");
     83         int i = 0;
     84         for (Map.Entry<String, Integer> node : words) {
     85             if (i < n) {
     86                 System.out.println(node.getKey() + " : " + node.getValue());
     87             } else {
     88                 break;
     89             }
     90             i++;
     91         }
     92     }
     93     public static void zimu() {
     94         DecimalFormat df = new DecimalFormat("0.00%");
     95         try {
     96             char shu[] = new char[100000];
     97             char zimu[] = new char[52];
     98             int j=0;
     99             int count[]=new int[52];
    100             String pathname="D:/QQ/1920126082/FileRecv/c1.txt";
    101             File filename=new File(pathname);
    102             InputStreamReader reader=new InputStreamReader(new FileInputStream(filename));
    103             BufferedReader br=new BufferedReader(reader);
    104             String line[]=new String[100000];;  
    105             for(int i=0;i<line.length;i++){
    106             line[i]=br.readLine();  
    107             }
    108             br.close();
    109             int k=0;
    110             while(line[k]!=null) {
    111                  for(int i=0;i<line[k].length();i++) {                              
    112                       shu[j]=line[k].charAt(i);
    113                       j++;                   
    114                  }
    115                  k++;
    116             }           
    117             for(int i=0;i<shu.length;i++) {
    118                  switch(shu[i]) {
    119                  case 'a':zimu[0]='a';count[0]++;break;
    120                  case 'b':zimu[1]='b';count[1]++;break;
    121                  case 'c':zimu[2]='c';count[2]++;break;
    122                  case 'd':zimu[3]='d';count[3]++;break;
    123                  case 'e':zimu[4]='e';count[4]++;break;
    124                  case 'f':zimu[5]='f';count[5]++;break;
    125                  case 'g':zimu[6]='g';count[6]++;break;
    126                  case 'h':zimu[7]='h';count[7]++;break;
    127                  case 'i':zimu[8]='i';count[8]++;break;
    128                  case 'j':zimu[9]='j';count[9]++;break;
    129                  case 'k':zimu[10]='k';count[10]++;break;
    130                  case 'l':zimu[11]='l';count[11]++;break;
    131                  case 'm':zimu[12]='m';count[12]++;break;
    132                  case 'n':zimu[13]='n';count[13]++;break;
    133                  case 'o':zimu[14]='o';count[14]++;break;
    134                  case 'p':zimu[15]='p';count[15]++;break;
    135                  case 'q':zimu[16]='q';count[16]++;break;
    136                  case 'r':zimu[17]='r';count[17]++;break;
    137                  case 's':zimu[18]='s';count[18]++;break;
    138                  case 't':zimu[19]='t';count[19]++;break;
    139                  case 'u':zimu[20]='u';count[20]++;break;
    140                  case 'v':zimu[21]='v';count[21]++;break;
    141                  case 'w':zimu[22]='w';count[22]++;break;
    142                  case 'x':zimu[23]='x';count[23]++;break;
    143                  case 'y':zimu[24]='y';count[24]++;break;
    144                  case 'z':zimu[25]='z';count[25]++;break;
    145                  case 'A':zimu[26]='A';count[26]++;break;
    146                  case 'B':zimu[27]='B';count[27]++;break;
    147                  case 'C':zimu[28]='C';count[28]++;break;
    148                  case 'D':zimu[29]='D';count[29]++;break;
    149                  case 'E':zimu[30]='E';count[30]++;break;
    150                  case 'F':zimu[31]='F';count[31]++;break;
    151                  case 'G':zimu[32]='G';count[32]++;break;
    152                  case 'H':zimu[33]='H';count[33]++;break;
    153                  case 'I':zimu[34]='I';count[34]++;break;
    154                  case 'J':zimu[35]='G';count[35]++;break;
    155                  case 'K':zimu[36]='K';count[36]++;break;
    156                  case 'L':zimu[37]='L';count[37]++;break;
    157                  case 'M':zimu[38]='M';count[38]++;break;
    158                  case 'N':zimu[39]='N';count[39]++;break;
    159                  case 'O':zimu[40]='O';count[40]++;break;
    160                  case 'P':zimu[41]='P';count[41]++;break;
    161                  case 'Q':zimu[42]='Q';count[42]++;break;
    162                  case 'R':zimu[43]='R';count[43]++;break;
    163                  case 'S':zimu[44]='S';count[44]++;break;
    164                  case 'T':zimu[45]='T';count[45]++;break;
    165                  case 'U':zimu[46]='U';count[46]++;break;
    166                  case 'V':zimu[47]='V';count[47]++;break;
    167                  case 'W':zimu[48]='W';count[48]++;break;
    168                  case 'X':zimu[49]='X';count[49]++;break;
    169                  case 'Y':zimu[50]='Y';count[50]++;break;
    170                  case 'Z':zimu[51]='Z';count[51]++;
    171                  }
    172             }   
    173             int ci=0;
    174             int sum=0;
    175             System.out.println("短文中各字母出现情况统计如下:");
    176             int a[]=new int[26];
    177             for(int i=0;i<26;i++)
    178             {
    179                 
    180                 a[i]=count[i]+count[i+26];              
    181                 int max=a[0];               
    182                 if(count[i]!=0) {                   
    183                     ci++;
    184                     sum+=count[i];          
    185                     System.out.println(ci+".字母"+zimu[i]+"或字母"+zimu[i+26]+"的出现次数是:"+a[i]);
    186                     }
    187             }
    188             for (int i = 0; i < 26; i++) {
    189                 //System.out.println(zimu[i]+"或字母"+zimu[i+26]+"出现的百分比为:"+df.format(count[i]*1.0/sum));
    190             }
    191             System.out.println("字母共计:"+sum+"个");
    192         }catch (Exception e) {
    193             e.printStackTrace();
    194         }
    195     }
    196     
    197     public static void menu() {
    198         System.out.println("*****************************");
    199         System.out.println("欢迎访问本系统");
    200         System.out.println("1.统计字母出现情况");
    201         System.out.println("2.统计不重复单词情况");
    202         System.out.println("3.统计出现次数前n个单词");
    203         System.out.println("0.退出");
    204         System.out.println("*****************************");
    205         System.out.println("请选择:");
    206     }
    207    public static  void main(String[] args) throws IOException   {
    208     
    209     Scanner shuru=new Scanner(System.in);
    210     int a=1;
    211     
    212     while(a!=0) {
    213         menu();
    214         a=shuru.nextInt();
    215         switch(a)
    216         {
    217         case 1:zimu();break;
    218         case 2:danci();break;
    219         case 3:danci2();break;
    220         case 0:a=0;break;
    221         default:a=0;break;
    222         }
    223     }
    224 }
    225 }
  • 相关阅读:
    Android SDK Manager和AVD Manager使用
    Android Studio 学习之 Android SDK快速更新
    Windows10远程报错:由于CredSSP加密Oracle修正
    电商促销优惠规则业务分析建模
    关于分库分表最全的一篇文章
    根据自增ID生成不重复序列号
    【转】 Pro Android学习笔记(五八):Preferences(2):CheckBoxPreference
    【转】 Pro Android学习笔记(五七):Preferences(1):ListPreference
    【转】 Pro Android学习笔记(五六):配置变化
    【转】 Pro Android学习笔记(五五):调试和分析(3):adb命令、模拟器控制台和StrictMode
  • 原文地址:https://www.cnblogs.com/mawangwang/p/11071571.html
Copyright © 2020-2023  润新知