单词统计

 任务:

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

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

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

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

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

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

  思路其实很简单:

1.按字节读取文档,碰到非字母跳过,字母则相应的字母数量加一,至于存储,可以用二维数组,也可以考虑使用链表,链表相对简单一点,就是开始设计比较难。计算频率的时候,先计算出总和,利用1.00/1=1.00的特性求出概率,在惊进行排列。

2.单词,按字节读取,遇到非字母跳过,遇到字母则开始存储,直到遇到非字母,组成一个单词,进行查重,非重复则单词数量加一。频率算法相同。

 

  代码:

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/msdog/p/11061047.html