• 单词统计之单词频率统计


      

    第1步:输出单个文件中的前 N 个最常出现的英语单词。

    功能1:输出文件中所有不重复的单词,按照出现次数由多到少排列,出现次数同样多的,以字典序排列。

    功能2: 指定文件目录,对目录下每一个文件执行统计的操作。 

    功能3:指定文件目录,是会递归遍历目录下的所有子目录的文件进行统计单词的功能。

    功能4:输出出现次数最多的前 n 个单词, 

     例如, 提示统计统计前多少名:输入10。 就是输出最常出现单词的前 10 名。 当没有指明数量的时候,我们默认列出所有单词的频率。

    第2步:第二步:  支持 stop words

    在一本小说里, 频率出现最高的单词一般都是 "a",  "it", "the", "and", "this", 这些词, 可以做一个 stop word 文件 (停词表), 在统计词汇的时候,跳过这些词。  我们把这个文件叫 "stopwords.txt" file. 

    第三步:  想看看常用的短语是什么, 怎么办呢? 

    先定义短语:"两个或多个英语单词, 它们之间只有空格分隔".   请看下面的例子:

     

      hello world   //这是一个短语

     

      hello, world //这不是一个短语

     

    同一频率的词组, 按照字典序来排列。

    第四步:把动词形态都统一之后再计数。

    想找到常用的单词和短语,但是发现英语动词经常有时态和语态的变化,导致同一个词,同一个短语却被认为是不同的。 怎么解决这个问题呢?

    假设我们有这样一个文本文件,这个文件的每一行都是这样构成:

    动词原型  动词变形1 动词变形2... ,词之间用空格分开。

    e.g.  动词 TAKE 有下面的各种变形:take takes took taken taking

    我们希望在实现上面的各种功能的时候,有一个选项, 就是把动词的各种变形都归为它的原型来统计。 

    功能 支持动词形态的归一化

    实验代码:

      1 package sy0509_ZiMu;
      2 
      3 import java.io.BufferedReader;
      4 import java.io.File;
      5 import java.io.FileInputStream;
      6 import java.io.IOException;
      7 import java.io.InputStreamReader;
      8 import java.text.DecimalFormat;
      9 import java.util.ArrayList;
     10 import java.util.HashMap;
     11 import java.util.Iterator;
     12 import java.util.List;
     13 import java.util.StringTokenizer;
     14 
     15 
     16 public class sy0509 {
     17 public static void main(String[] args)throws IOException
     18 {
     19     List<Integer> list=new ArrayList<>();
     20     DecimalFormat df=new DecimalFormat("######0.00");    //格式化
     21     File f = new File("D:\飘英文版.txt");
     22      FileInputStream fip = new FileInputStream("D:\飘英文版.txt");
     23     InputStreamReader reader = new InputStreamReader(fip, "gbk");
     24     StringBuffer sb = new StringBuffer();
     25     while (reader.ready()) {
     26         sb.append((char) reader.read());
     27     }
     28     System.out.println(sb.toString());
     29     reader.close();
     30     fip.close();
     31     
     32     int i;
     33     String A=sb.toString();
     34     String M="abcdefghijklmnopqrstuvwxyz";
     35    String temp = "";
     36     char NUM[]=new char[A.length()];
     37     char Z[]=new char[26];
     38     int X[]=new int[26];
     39     int MAX=0;
     40     Z=M.toCharArray();
     41     for(int k=0;k<26;k++)
     42     {
     43         X[k]=0;
     44     for(i=0;i<A.length();i++)
     45     {
     46         NUM[i]=A.charAt(i);
     47         if(Z[k]==NUM[i]||Z[k]==ch(NUM[i]))
     48         {
     49             X[k]++;
     50         }
     51     }
     52     }
     53     System.out.println("这篇文章中英文字母个数分别为:");
     54     double sum=0;
     55     System.out.println("////////////排序如下:");
     56     for(i=0;i<25;i++)
     57     for(int k=0;k<25-i;k++)
     58     {
     59     if(X[k]<X[k+1])
     60     {
     61     int temp2=X[k];
     62     X[k]=X[k+1];
     63     X[k+1]=temp2;
     64     char temp3=Z[k];
     65     Z[k]=Z[k+1];
     66     Z[k+1]=temp3;
     67     }
     68     }
     69     for(i=0;i<26;i++)
     70     {
     71     System.out.println(Z[i]+"字母个数为:"+X[i]);
     72     sum=sum+X[i];
     73     }
     74     for(i=0;i<26;i++)
     75     {
     76     double jkl=(X[i])/sum*100;
     77     System.out.println(Z[i]+"字母频率为:"+df.format(jkl)+"%");
     78     }
     79     StringTokenizer st = new StringTokenizer(sb.toString(),",.! 
    ");
     80     String []a1=StatList(sb.toString());
     81     int[]b1=StatList1(sb.toString());
     82     System.out.println("//////////////////////////////");
     83     for(i=0;i<a1.length-1;i++)
     84     for(int j=0;j<a1.length-1-i;j++)
     85     {
     86     if(b1[j]<b1[j+1])
     87     {
     88     int temp6=b1[j];
     89     b1[j]=b1[j+1];
     90     b1[j+1]=temp6;
     91     String temp7=a1[j];
     92     a1[j]=a1[j+1];
     93     a1[j+1]=temp7;
     94     }
     95     }
     96     for(i=0;i<a1.length-1;i++)
     97     {
     98     System.out.println("单词:"+a1[i]+" 且出现的次数:"+b1[i]);
     99     }
    100     }
    101     static char ch(char c)
    102     {
    103     if(!(c>=97&&c<=122))
    104     c+=32;
    105     return c;
    106     }
    107     static String[] StatList(String str) {
    108     StringBuffer sb = new StringBuffer();
    109     HashMap<String ,Integer> has = new HashMap<String ,Integer> (); // 打开一个哈希表
    110     String[] slist = str.split("\W+");
    111     int sum=0;
    112     int sum1=0;
    113     for (int i = 0; i < slist.length; i++) {
    114     if (!has.containsKey(slist[i])) { // 若尚无此单词
    115     has.put(slist[i], 1);
    116     sum++;
    117     sum1++;
    118     } else {//如果有,就在将次数加1
    119     Integer nCounts = has.get(slist[i]);
    120 
    121     has.put(slist[i],nCounts+1 );
    122     }
    123     }
    124     int temp=0;
    125     int temp1=0;
    126     String []a=new String[sum];
    127     int []b=new int[sum1];
    128     Iterator iterator = has.keySet().iterator();
    129     while(iterator.hasNext()){
    130     String word = (String) iterator.next();
    131     a[temp]=word;
    132     temp++;
    133     }
    134     return a;
    135     }
    136     static int[] StatList1(String str) {
    137     StringBuffer sb = new StringBuffer();
    138     HashMap<String ,Integer> has = new HashMap<String ,Integer> (); // 打开一个哈希表
    139     String[] slist = str.split("\W+");
    140     int sum=0;
    141     int sum1=0;
    142     for (int i = 0; i < slist.length; i++) {
    143     if (!has.containsKey(slist[i])) { // 若尚无此单词
    144     has.put(slist[i], 1);
    145     sum++;
    146     sum1++;
    147     } else {//如果有,就在将次数加1
    148     Integer nCounts = has.get(slist[i]);
    149 
    150     has.put(slist[i],nCounts+1 );
    151 
    152     }
    153     }
    154     int temp=0;
    155     int temp1=0;
    156     String []a=new String[sum];
    157     int []b=new int[sum1];
    158     Iterator iterator = has.keySet().iterator();
    159     while(iterator.hasNext()){
    160     String word = (String) iterator.next();
    161     b[temp1]=has.get(word);
    162     temp1++;
    163     }
    164     return b;
    165     }
    166 }//jcc
    167 package sy0509_ZiMu;
    168 
    169 import java.io.BufferedReader;
    170 import java.io.File;
    171 import java.io.FileInputStream;
    172 import java.io.IOException;
    173 import java.io.InputStreamReader;
    174 import java.text.DecimalFormat;
    175 import java.util.ArrayList;
    176 import java.util.HashMap;
    177 import java.util.Iterator;
    178 import java.util.List;
    179 import java.util.StringTokenizer;
    180 
    181 
    182 public class sy0509 {
    183 public static void main(String[] args)throws IOException
    184 {
    185     List<Integer> list=new ArrayList<>();
    186     DecimalFormat df=new DecimalFormat("######0.00");    //格式化
    187     File f = new File("D:\飘英文版.txt");
    188      FileInputStream fip = new FileInputStream("D:\飘英文版.txt");
    189     InputStreamReader reader = new InputStreamReader(fip, "gbk");
    190     StringBuffer sb = new StringBuffer();
    191     while (reader.ready()) {
    192         sb.append((char) reader.read());
    193     }
    194     System.out.println(sb.toString());
    195     reader.close();
    196     fip.close();
    197     
    198     int i;
    199     String A=sb.toString();
    200     String M="abcdefghijklmnopqrstuvwxyz";
    201    String temp = "";
    202     char NUM[]=new char[A.length()];
    203     char Z[]=new char[26];
    204     int X[]=new int[26];
    205     int MAX=0;
    206     Z=M.toCharArray();
    207     for(int k=0;k<26;k++)
    208     {
    209         X[k]=0;
    210     for(i=0;i<A.length();i++)
    211     {
    212         NUM[i]=A.charAt(i);
    213         if(Z[k]==NUM[i]||Z[k]==ch(NUM[i]))
    214         {
    215             X[k]++;
    216         }
    217     }
    218     }
    219     System.out.println("这篇文章中英文字母个数分别为:");
    220     double sum=0;
    221     System.out.println("////////////排序如下:");
    222     for(i=0;i<25;i++)
    223     for(int k=0;k<25-i;k++)
    224     {
    225     if(X[k]<X[k+1])
    226     {
    227     int temp2=X[k];
    228     X[k]=X[k+1];
    229     X[k+1]=temp2;
    230     char temp3=Z[k];
    231     Z[k]=Z[k+1];
    232     Z[k+1]=temp3;
    233     }
    234     }
    235     for(i=0;i<26;i++)
    236     {
    237     System.out.println(Z[i]+"字母个数为:"+X[i]);
    238     sum=sum+X[i];
    239     }
    240     for(i=0;i<26;i++)
    241     {
    242     double jkl=(X[i])/sum*100;
    243     System.out.println(Z[i]+"字母频率为:"+df.format(jkl)+"%");
    244     }
    245     StringTokenizer st = new StringTokenizer(sb.toString(),",.! 
    ");
    246     String []a1=StatList(sb.toString());
    247     int[]b1=StatList1(sb.toString());
    248     System.out.println("//////////////////////////////");
    249     for(i=0;i<a1.length-1;i++)
    250     for(int j=0;j<a1.length-1-i;j++)
    251     {
    252     if(b1[j]<b1[j+1])
    253     {
    254     int temp6=b1[j];
    255     b1[j]=b1[j+1];
    256     b1[j+1]=temp6;
    257     String temp7=a1[j];
    258     a1[j]=a1[j+1];
    259     a1[j+1]=temp7;
    260     }
    261     }
    262     for(i=0;i<a1.length-1;i++)
    263     {
    264     System.out.println("单词:"+a1[i]+" 且出现的次数:"+b1[i]);
    265     }
    266     }
    267     static char ch(char c)
    268     {
    269     if(!(c>=97&&c<=122))
    270     c+=32;
    271     return c;
    272     }
    273     static String[] StatList(String str) {
    274     StringBuffer sb = new StringBuffer();
    275     HashMap<String ,Integer> has = new HashMap<String ,Integer> (); // 打开一个哈希表
    276     String[] slist = str.split("\W+");
    277     int sum=0;
    278     int sum1=0;
    279     for (int i = 0; i < slist.length; i++) {
    280     if (!has.containsKey(slist[i])) { // 若尚无此单词
    281     has.put(slist[i], 1);
    282     sum++;
    283     sum1++;
    284     } else {//如果有,就在将次数加1
    285     Integer nCounts = has.get(slist[i]);
    286 
    287     has.put(slist[i],nCounts+1 );
    288     }
    289     }
    290     int temp=0;
    291     int temp1=0;
    292     String []a=new String[sum];
    293     int []b=new int[sum1];
    294     Iterator iterator = has.keySet().iterator();
    295     while(iterator.hasNext()){
    296     String word = (String) iterator.next();
    297     a[temp]=word;
    298     temp++;
    299     }
    300     return a;
    301     }
    302     static int[] StatList1(String str) {
    303     StringBuffer sb = new StringBuffer();
    304     HashMap<String ,Integer> has = new HashMap<String ,Integer> (); // 打开一个哈希表
    305     String[] slist = str.split("\W+");
    306     int sum=0;
    307     int sum1=0;
    308     for (int i = 0; i < slist.length; i++) {
    309     if (!has.containsKey(slist[i])) { // 若尚无此单词
    310     has.put(slist[i], 1);
    311     sum++;
    312     sum1++;
    313     } else {//如果有,就在将次数加1
    314     Integer nCounts = has.get(slist[i]);
    315 
    316     has.put(slist[i],nCounts+1 );
    317 
    318     }
    319     }
    320     int temp=0;
    321     int temp1=0;
    322     String []a=new String[sum];
    323     int []b=new int[sum1];
    324     Iterator iterator = has.keySet().iterator();
    325     while(iterator.hasNext()){
    326     String word = (String) iterator.next();
    327     b[temp1]=has.get(word);
    328     temp1++;
    329     }
    330     return b;
    331     }
    332 }

    实验结果:

  • 相关阅读:
    Unity3D 4.0 界面 基础 入门
    try catch finally 用法
    Mysql表引擎Innodb、MyIsam、Memory
    初步的kudu+impala vs dorisdb vs tidb
    mysql创建类似oracle的dblink
    jedis请求keys超时报错
    php 1223
    php 1214
    php 1216
    php 1222
  • 原文地址:https://www.cnblogs.com/jmdd/p/11061958.html
Copyright © 2020-2023  润新知