单词统计

要求:用户需求:
英语的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 }
原文地址:https://www.cnblogs.com/mawangwang/p/11071571.html