zoukankan      html  css  js  c++  java
  • 统计单词

    题目:

    英语的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是同一个单词。

    设计思想:

     首先实现读取相关输出文件,由于自己所找的英文书记非英文标准语法,错误甚多,程序只支持标准,造成输出结果混乱。

    然后遍历文件中的内容,从英文字母:A-Z,a-z ,分别进行数组值的加减。一个数组存字母,另外一个存字母对应的出现次数。

    最后根据记录字母出现次数的数组计算出频率,得到结果。

    上述是自己当时的设计思路,但是实现时在两个数组进行对应时,一直思考不过去,后来,同学的做法减少了自己设计思想中的利用数组存取字母的方法,即利用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("短文中各字母出现情况统计如下:");
                    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]+"的出现频率是:"+b);
                            }
                    }
                    System.out.println("字母共计:"+sum+"个");
                }catch (Exception e) {
                    e.printStackTrace();
                }
            }
    
        }

    运行结果:

     

  • 相关阅读:
    高级软件工程--第八次作业
    高级软件工程2017第7次作业--C++团队项目:Beta阶段综合报告
    Bate测试报告
    版本发布说明
    Beta版本展示博客
    Beta阶段总结分析报告
    Bate敏捷冲刺每日报告--day5
    Bate敏捷冲刺每日报告--day4
    Bate敏捷冲刺每日报告--day3
    Kettle中通过触发器方式实现数据 增量更新
  • 原文地址:https://www.cnblogs.com/Qi77/p/11061428.html
Copyright © 2011-2022 走看看