zoukankan      html  css  js  c++  java
  • 作业4词频统计

    必做 1] 基于作业3的结果,读取一个较小的文本文件A_Tale_of_Two_Cities.txt,统计该文件中的单词的频率,并将统计结果输出到当前目录下的 Result1.txt 文件。 (第一阶段初稿完成该要求)

    • 命令行格式: 提示符> Myapp.exe -f filename.txt > Result.txt (PS:C++ 程序,Java 程序输出方式类似) filename.txt 为前面下载的文件名。
    • 解释:
      • 选项 -f 表示后面跟文件名
      • 输出格式规定(参考作业3中的示例):
        • 首先按照频率由高到低排序
        • 频率一样的词, 按照字典顺序排序
    • 此外, 读取一个较大的文本文件Gone_with_the_wind.txt实验对比程序执行效率,做如下改进,比较改进前后程序执行时间。PS: 请看一位同学做的效能分析示例

    原先程序中循环部分如下:

    
    for (int i = 0; i < infoIds.size(); i++)        
    {     
       Entry<String, Integer> id = infoIds.get(i);  
       System.out.println(id.getKey()+":"+id.getValue());  
    } 
    

    改进后程序如下:

    
    len= infoIds.size();             // 先计算
    for (int i = 0; i < len; i++)        
    {     
           Entry<String, Integer> id = infoIds.get(i);  
           System.out.println(id.getKey()+":"+id.getValue());  
    }



    作业中的例子用的是Java,所以准备用Java写一下。

    package work;

    import java.io.BufferedReader;

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.FileNotFoundException;

    import java.io.FileReader;

    import java.io.IOException;

    import java.util.Scanner;

    import org.omg.CORBA.PUBLIC_MEMBER;

    public class write {    

      public static String fun(String a)    

      {      if(a.contains(",")||a.contains("."))//单词含标点。      

          {       a=a.substring(0,a.length()-1);//把标点去掉。       return a;      }     

         else       return a;     

      }        

      public static void main(String []s1)      

      {             String s;      

           String []data=new String[1000];//存单词    

           String []value=new String[1000];//单词,不重复。      

           int []count=new int[1000];//对应个数。      

           int sum=0,i,j;      for(i=0;i<1000;i++) //初始化个数。      

           {       count[i]=1;      }                  

           try {             FileReader fileReader=new FileReader("D://A_Tale_of_Two_Cities.txt");        

                  BufferedReader br=new BufferedReader(fileReader);        

                  s=br.readLine();//读取第一行        

                   while(s!=null)        

                  {          String []ss=s.split(" ");//取出单词         

                       for( i=0;i<ss.length;i++)         

                      {           ss[i]=fun(ss[i]);//把标点去掉。          

                           for(j=0;j<sum;j++)          

                          {            if(ss[i].equals(value[j]))           

                                {             count[j]++;             break;            }          

                          }          

                           if(j==sum)          

                          {            value[sum++]=ss[i];           }         

                      }           

                      s=br.readLine();//读取文件下一行        

                  }         

                  for(i=1;i<count.length;i++)
                       {
                           for( j=0;j<count.length-i;j++)
                           {
                                if(count[j]<count[j+1])
                                {
                                      m=count[j];
                                     count[j]=count[j+1];
                                     count[j+1]=m;
                                     nn=value[j];
                                     value[j]=value[j+1];
                                     value[j++]=nn;
                                }
                           }
                        }

                  System.out.println(sum);        

                  for(i=0;i<sum;i++)        

                  {          System.out.println(value[i]+" "+count[i]);         }   

              }                   

            catch (FileNotFoundException e)       

            {    e.printStackTrace();        }              

            catch (IOException e)       

            {    e.printStackTrace();        }      

        }   

    }

     

    其实思路也没什么变化,也是从文本中读取内容然后分成单词进行统计。最后加一个排序的数组进行排序。总的来说只会一点c++的我写Java还是有点不适应,大部分也是对着书打。就这也花了我很长的时间,应为不熟悉不懂。

  • 相关阅读:
    python基础--(hashlib,configparser,logging)模块功能
    java发送邮件
    Struts2和SpringMVC的action是单例还是原型的?
    HashSet存储过程中如何排除不同的自定义对象?
    使用win32Diskimager后恢复U盘(合并U盘容量)
    linux进程与端口
    centos 7.6 忘记root密码
    Authentication token is no longer valid; new one required You (oracle) are not allowed to access to (crontab) because of pam configuration.
    存储过程
    oracle extract()函数
  • 原文地址:https://www.cnblogs.com/ROUGH-TALE/p/5303543.html
Copyright © 2011-2022 走看看