统计单词

用户需求:

英语的26 个字母的频率在一本小说中是如何分布的?

某类型文章中常出现的单词是什么?

某作家最常用的词汇是什么?

《哈利波特》 中最常用的短语是什么,等等。

我们就写一些程序来解决这个问题,满足一下我们的好奇心。

0步:输出某个英文文本文件中 26 字母出现的频率,由高到低排列,并显示字母出现的百分比,精确到小数点后面两位。

字母频率 = 这个字母出现的次数 / (所有A-Za-z字母出现的总数)

如果两个字母出现的频率一样,那么就按照字典序排列。  如果 S T 出现频率都是 10.21%, 那么, S 要排在T 的前面。

代码如下:

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;

public class WordNumTest {

    @SuppressWarnings("null")
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        int [] Num=new int [26];
        for(int i=0;i<26;i++)
        {
            Num[i]=0;
        }
        //统计
        try {
            FileReader fr = new FileReader("piao.txt");
            BufferedReader bf = new BufferedReader(fr);
            while(bf.ready())
            {
                int n=bf.read();
                if(n=='a'||n=='A')
                    Num[0]++;
                if(n=='b'||n=='B')
                    Num[1]++;
                if(n=='c'||n=='D')
                    Num[2]++;
                if(n=='d'||n=='D')
                    Num[3]++;
                if(n=='e'||n=='E')
                    Num[4]++;
                if(n=='f'||n=='F')
                    Num[5]++;
                if(n=='g'||n=='G')
                    Num[6]++;
                if(n=='h'||n=='H')
                    Num[7]++;
                if(n=='i'||n=='I')
                    Num[8]++;
                if(n=='j'||n=='J')
                    Num[9]++;
                if(n=='k'||n=='K')
                    Num[10]++;
                if(n=='l'||n=='L')
                    Num[11]++;
                if(n=='m'||n=='M')
                    Num[12]++;
                if(n=='n'||n=='N')
                    Num[13]++;
                if(n=='o'||n=='O')
                    Num[14]++;
                if(n=='p'||n=='P')
                    Num[15]++;
                if(n=='q'||n=='Q')
                    Num[16]++;
                if(n=='r'||n=='R')
                    Num[17]++;
                if(n=='s'||n=='S')
                    Num[18]++;
                if(n=='t'||n=='T')
                    Num[19]++;
                if(n=='u'||n=='U')
                    Num[20]++;
                if(n=='v'||n=='V')
                    Num[21]++;
                if(n=='w'||n=='W')
                    Num[22]++;
                if(n=='x'||n=='X')
                    Num[23]++;
                if(n=='y'||n=='Y')
                    Num[24]++;
                if(n=='z'||n=='Z')
                    Num[25]++;
            }
            bf.close();
            fr.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //求和
        int sum=0;
        for(int i=0;i<26;i++)
        {
            sum=sum+Num[i];
        }
        //求百分比
        double [] persent=new double [26];
        for(int i=0;i<26;i++)
        {
            persent[i]=0.00;
        }
     //排序
        for(int i=0;i<26;i++)
        {
            persent[i]=Num[i]*1.00/sum;
            //System.out.println(persent[i]);
            System.out.println(String.format("%.2f", persent[i]));
        }
        //输出
        double []Max=new double [26];
        for(int i=0;i<26;i++)
        {
            Max[i]=0;
        }//赋0处理
        //排序
        
        //45分钟
        //2.统计单词
        
        //3.无用词
    }

}

 

原文地址:https://www.cnblogs.com/lishengming00/p/11061097.html