單詞統計

題目:用戶需求:英語的26 個字母的頻率在一本小說中是如何分佈的?某類型文章中常出現的單詞是什麼?某做家最經常使用的詞彙是什麼?《哈利波特》 中最經常使用的短語是什麼,等等。咱們就寫一些程序來解決這個問題,知足一下咱們的好奇心。java

第0步:輸出某個英文文本文件中 26 字母出現的頻率,由高到低排列,並顯示字母出現的百分比,精確到小數點後面兩位。字母頻率 = 這個字母出現的次數 / (全部A-Z,a-z字母出現的總數)若是兩個字母出現的頻率同樣,那麼就按照字典序排列。  若是 S 和 T 出現頻率都是 10.21%, 那麼, S 要排在T 的前面。app

第1步:輸出單個文件中的前 N 個最常出現的英語單詞。做用:一個用於統計文本文件中的英語單詞出現頻率。單詞:以英文字母開頭,由英文字母和字母數字符號組成的字符串視爲一個單詞。單詞以分隔符分割且不區分大小寫。在輸出時,全部單詞都用小寫字符表示。英文字母:A-Z,a-z字母數字符號:A-Z,a-z,0-9spa

2步:輸出單個文件中的前 N 個最常出現的英語單詞。分割符:空格,非字母數字符號 例:good123是一個單詞,123good不是一個單詞。good,Good和GOOD是同一個單詞。code

  1 import java.io.BufferedReader;
  2 import java.io.File;
  3 import java.io.FileInputStream;
  4 import java.io.IOException;
  5 import java.io.InputStreamReader;
  6 import java.text.DecimalFormat;
  7 import java.util.ArrayList;
  8 import java.util.HashMap;
  9 import java.util.Iterator;
 10 import java.util.List;
 11 import java.util.StringTokenizer;
 12 public class test2 {
 13 public static void main(String[] args)throws IOException
 14 {
 15 List<Integer> list=new ArrayList<>();
 16 DecimalFormat df=new DecimalFormat("######0.00");
 17 File f = new File("piao1.txt");
 18 FileInputStream fip = new FileInputStream(f);
 19 InputStreamReader reader = new InputStreamReader(fip, "gbk");
 20 StringBuffer sb = new StringBuffer();
 21 while (reader.ready()) {
 22 sb.append((char) reader.read());
 23 }
 24 System.out.println(sb.toString());
 25 reader.close();
 26 fip.close();
 27 int i;
 28 String A=sb.toString();
 29 String M="abcdefghijklmnopqrstuvwxyz";
 30 String temp = "";
 31 char NUM[]=new char[A.length()];
 32 char Z[]=new char[26];
 33 int X[]=new int[26];
 34 int MAX=0;
 35 Z=M.toCharArray();
 36 for(int k=0;k<26;k++)
 37 {
 38 X[k]=0;
 39 for(i=0;i<A.length();i++)
 40 {
 41 NUM[i]=A.charAt(i);
 42 if(Z[k]==NUM[i]||Z[k]==ch(NUM[i]))
 43 {
 44 X[k]++;
 45 }
 46 }
 47 }
 48 System.out.println("這篇文章中英文字母個數分別爲:");
 49 double sum=0;
 50 System.out.println("////////////排序以下:");
 51 for(i=0;i<25;i++)
 52 for(int k=0;k<25-i;k++)
 53 {
 54 if(X[k]<X[k+1])
 55 {
 56 int temp2=X[k];
 57 X[k]=X[k+1];
 58 X[k+1]=temp2;
 59 char temp3=Z[k];
 60 Z[k]=Z[k+1];
 61 Z[k+1]=temp3;
 62 }
 63 }
 64 for(i=0;i<26;i++)
 65 {
 66 System.out.println(Z[i]+"字母個數爲:"+X[i]);
 67 sum=sum+X[i];
 68 }
 69 for(i=0;i<26;i++)
 70 {
 71 double jkl=(X[i])/sum*100;
 72 System.out.println(Z[i]+"字母頻率爲:"+df.format(jkl)+"%");
 73 }
 74 StringTokenizer st = new StringTokenizer(sb.toString(),",.! \n");
 75 String []a1=StatList(sb.toString());
 76 int[]b1=StatList1(sb.toString());
 77 System.out.println("//////////////////////////////");
 78 for(i=0;i<a1.length-1;i++)
 79 for(int j=0;j<a1.length-1-i;j++)
 80 {
 81 if(b1[j]<b1[j+1])
 82 {
 83 int temp6=b1[j];
 84 b1[j]=b1[j+1];
 85 b1[j+1]=temp6;
 86 String temp7=a1[j];
 87 a1[j]=a1[j+1];
 88 a1[j+1]=temp7;
 89 }
 90 }
 91 for(i=0;i<a1.length-1;i++)
 92 {
 93 System.out.println("單詞:"+a1[i]+" 且出現的次數:"+b1[i]);
 94 }
 95 }
 96 static char ch(char c)
 97 {
 98 if(!(c>=97&&c<=122))
 99 c+=32;
100 return c;
101 }
102 static String[] StatList(String str) {
103 StringBuffer sb = new StringBuffer();
104 HashMap<String ,Integer> has = new HashMap<String ,Integer> (); // 打開一個哈希表
105 String[] slist = str.split("\\W+");
106 int sum=0;
107 int sum1=0;
108 for (int i = 0; i < slist.length; i++) {
109 if (!has.containsKey(slist[i])) { // 若尚無此單詞
110 has.put(slist[i], 1);
111 sum++;
112 sum1++;
113 } else {//若是有,就在將次數加1
114 Integer nCounts = has.get(slist[i]);
115 
116 has.put(slist[i],nCounts+1 );
117 }
118 }
119 int temp=0;
120 int temp1=0;
121 String []a=new String[sum];
122 int []b=new int[sum1];
123 Iterator iterator = has.keySet().iterator();
124 while(iterator.hasNext()){
125 String word = (String) iterator.next();
126 a[temp]=word;
127 temp++;
128 }
129 return a;
130 }
131 static int[] StatList1(String str) {
132 StringBuffer sb = new StringBuffer();
133 HashMap<String ,Integer> has = new HashMap<String ,Integer> (); // 打開一個哈希表
134 String[] slist = str.split("\\W+");
135 int sum=0;
136 int sum1=0;
137 for (int i = 0; i < slist.length; i++) {
138 if (!has.containsKey(slist[i])) { // 若尚無此單詞
139 has.put(slist[i], 1);
140 sum++;
141 sum1++;
142 } else {//若是有,就在將次數加1
143 Integer nCounts = has.get(slist[i]);
144 
145 has.put(slist[i],nCounts+1 );
146 
147 }
148 }
149 int temp=0;
150 int temp1=0;
151 String []a=new String[sum];
152 int []b=new int[sum1];
153 Iterator iterator = has.keySet().iterator();
154 while(iterator.hasNext()){
155 String word = (String) iterator.next();
156 b[temp1]=has.get(word);
157 temp1++;
158 }
159 return b;
160 }
161 }
 

功能能夠完成,可是沒有辦法檢驗準確性。orm

相關文章
相關標籤/搜索