统计单词
題目:
英語的26 個(gè)字母的頻率在一本小說中是如何分布的? 某類型文章中常出現(xiàn)的單詞是什么? 某作家最常用的詞匯是什么? 《哈利波特》 中最常用的短語是什么,等等。? 我們就寫一些程序來解決這個(gè)問題,滿足一下我們的好奇心。
第0步:輸出某個(gè)英文文本文件中 26 字母出現(xiàn)的頻率,由高到低排列,并顯示字母出現(xiàn)的百分比,精確到小數(shù)點(diǎn)后面兩位。 字母頻率 = 這個(gè)字母出現(xiàn)的次數(shù) / (所有A-Z,a-z字母出現(xiàn)的總數(shù)) 如果兩個(gè)字母出現(xiàn)的頻率一樣,那么就按照字典序排列。? 如果 S 和 T 出現(xiàn)頻率都是 10.21%, 那么, S 要排在T 的前面。
第1步:輸出單個(gè)文件中的前 N 個(gè)最常出現(xiàn)的英語單詞。 作用:一個(gè)用于統(tǒng)計(jì)文本文件中的英語單詞出現(xiàn)頻率。 單詞:以英文字母開頭,由英文字母和字母數(shù)字符號(hào)組成的字符串視為一個(gè)單詞。單詞以單詞以分隔符分割且不區(qū)分大小寫。在輸出時(shí),所有單詞都用小寫字符表示。? 英文字母:A-Z,a-z 字母數(shù)字符號(hào):A-Z,a-z,0-9 第1步:輸出單個(gè)文件中的前 N 個(gè)最常出現(xiàn)的英語單詞。 分割符:空格,非字母數(shù)字符號(hào) 例:good123是一個(gè)單詞,123good不是一個(gè)單詞。good,Good和GOOD是同一個(gè)單詞。
設(shè)計(jì)思想:
?首先實(shí)現(xiàn)讀取相關(guān)輸出文件,由于自己所找的英文書記非英文標(biāo)準(zhǔn)語法,錯(cuò)誤甚多,程序只支持標(biāo)準(zhǔn),造成輸出結(jié)果混亂。
然后遍歷文件中的內(nèi)容,從英文字母:A-Z,a-z ,分別進(jìn)行數(shù)組值的加減。一個(gè)數(shù)組存字母,另外一個(gè)存字母對(duì)應(yīng)的出現(xiàn)次數(shù)。
最后根據(jù)記錄字母出現(xiàn)次數(shù)的數(shù)組計(jì)算出頻率,得到結(jié)果。
上述是自己當(dāng)時(shí)的設(shè)計(jì)思路,但是實(shí)現(xiàn)時(shí)在兩個(gè)數(shù)組進(jìn)行對(duì)應(yīng)時(shí),一直思考不過去,后來,同學(xué)的做法減少了自己設(shè)計(jì)思想中的利用數(shù)組存取字母的方法,即利用switch--case語句,很好的解決了自己的疑惑。
源代碼:
package ceshi;import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; public class ceshi1 {public static void main(String args[]) {try {char shu[] = new char[1000000];char zimu[] = new char[52];int j=0;int count[]=new int[52];String pathname="F:\\飄英文版.txt";File filename=new File(pathname);InputStreamReader reader=new InputStreamReader(new FileInputStream(filename));BufferedReader br=new BufferedReader(reader);String line[]=new String[350]; for(int i=0;i<line.length;i++){line[i]=br.readLine(); System.out.println(line[i]);}br.close();int k=0;while(line[k]!=null) {for(int i=0;i<line[k].length();i++) { shu[j]=line[k].charAt(i);j++; }k++;} for(int i=0;i<shu.length;i++) {switch(shu[i]) {case 'a':zimu[0]='a';count[0]++;break;case 'b':zimu[1]='b';count[1]++;break;case 'c':zimu[2]='c';count[2]++;break;case 'd':zimu[3]='d';count[3]++;break;case 'e':zimu[4]='e';count[4]++;break;case 'f':zimu[5]='f';count[5]++;break;case 'g':zimu[6]='g';count[6]++;break;case 'h':zimu[7]='h';count[7]++;break;case 'i':zimu[8]='i';count[8]++;break;case 'j':zimu[9]='j';count[9]++;break;case 'k':zimu[10]='k';count[10]++;break;case 'l':zimu[11]='l';count[11]++;break;case 'm':zimu[12]='m';count[12]++;break;case 'n':zimu[13]='n';count[13]++;break;case 'o':zimu[14]='o';count[14]++;break;case 'p':zimu[15]='p';count[15]++;break;case 'q':zimu[16]='q';count[16]++;break;case 'r':zimu[17]='r';count[17]++;break;case 's':zimu[18]='s';count[18]++;break;case 't':zimu[19]='t';count[19]++;break;case 'u':zimu[20]='u';count[20]++;break;case 'v':zimu[21]='v';count[21]++;break;case 'w':zimu[22]='w';count[22]++;break;case 'x':zimu[23]='x';count[23]++;break;case 'y':zimu[24]='y';count[24]++;break;case 'z':zimu[25]='z';count[25]++;break;case 'A':zimu[26]='A';count[26]++;break;case 'B':zimu[27]='B';count[27]++;break;case 'C':zimu[28]='C';count[28]++;break;case 'D':zimu[29]='D';count[29]++;break;case 'E':zimu[30]='E';count[30]++;break;case 'F':zimu[31]='F';count[31]++;break;case 'G':zimu[32]='G';count[32]++;break;case 'H':zimu[33]='H';count[33]++;break;case 'I':zimu[34]='I';count[34]++;break;case 'J':zimu[35]='G';count[35]++;break;case 'K':zimu[36]='K';count[36]++;break;case 'L':zimu[37]='L';count[37]++;break;case 'M':zimu[38]='M';count[38]++;break;case 'N':zimu[39]='N';count[39]++;break;case 'O':zimu[40]='O';count[40]++;break;case 'P':zimu[41]='P';count[41]++;break;case 'Q':zimu[42]='Q';count[42]++;break;case 'R':zimu[43]='R';count[43]++;break;case 'S':zimu[44]='S';count[44]++;break;case 'T':zimu[45]='T';count[45]++;break;case 'U':zimu[46]='U';count[46]++;break;case 'V':zimu[47]='V';count[47]++;break;case 'W':zimu[48]='W';count[48]++;break;case 'X':zimu[49]='X';count[49]++;break;case 'Y':zimu[50]='Y';count[50]++;break;case 'Z':zimu[51]='Z';count[51]++;}} int ci=0;int sum=0;System.out.println("短文中各字母出現(xiàn)情況統(tǒng)計(jì)如下:");for(int i=0;i<52;i++){if(count[i]!=0) {ci++;sum+=count[i];}} ci=0;for(int i=0;i<52;i++){if(count[i]!=0) {ci++;System.out.println(count[i]);double a=(double) ((Math.round(count[i]*100)/100.0)/sum)*100;double b= (double) (Math.round(a*100)/100.0);System.out.println(ci+".字母"+zimu[i]+"的出現(xiàn)頻率是:"+b);}}System.out.println("字母共計(jì):"+sum+"個(gè)");}catch (Exception e) {e.printStackTrace();}}}?
運(yùn)行結(jié)果:
| ? |
轉(zhuǎn)載于:https://www.cnblogs.com/Qi77/p/11061428.html
總結(jié)
- 上一篇: 快速幂求余
- 下一篇: C:如何分解整数(从末位往前取以及从首位