• 单词统计


    用户需求:

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

     【源代码】

    package txt读入;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.*;
    import java.util.Arrays;
    public class ceshi {
    
        /*
         * 读取指定路径下的文件名和目录名
         */
        public void getFileList() throws IOException {
            System.out.println("请输入路径");
            Scanner scan=new Scanner(System.in);
            String a=scan.next();
            File file = new File(a);
            
            File[] fileList = file.listFiles();
            
            for (int i1 = 0; i1 < fileList.length; i1++) {
                if (fileList[i1].isFile()) {
                    String fileName = fileList[i1].getName();
                    if(fileName.indexOf(".txt")!=-1)
                    {
                        Word word=new Word();                                      //单词的链头
                        Word lian,xin;                                             
                        String str="";
                        String S=a+"\"+fileName;
                        System.out.println(S);
                        FileReader f=new FileReader(S);                //读取英文文件
                        char[] c=new char[1];                                 //每次读取一个字母
                        int b=0;
                        boolean exist=false;                              //判断单词是否存在于  word 链中
                        while((b=f.read(c))!=-1)                              //每次读取一个字母直到最后
                        {
                            //如果字符为  换行、空格、单引号、双引号、逗号、句号  则为一个单词的结束及另一个单词的开始
                            if(String.valueOf(c).equals("
    ")||String.valueOf(c).equals("
    ")||String.valueOf(c).equals(" ")||String.valueOf(c).equals(",")||String.valueOf(c).equals(".")||String.valueOf(c).equals(""")||String.valueOf(c).equals("'"))
                            {
                                lian=word;
                                while(lian!=null)            
                                {
                                    if(lian.value.equalsIgnoreCase(str))           //如果单词在单词链中存在,则单词个数++
                                    {
                                        lian.geshu++;exist=true;break;
                                    }
                                    else
                                    {
                                        lian=lian.next;
                                    }
                                }
                                if(exist==false)                        //如果不存在,则在单词链中添加
                                {
                                    xin=new Word(str,1);
                                    xin.next=word.next;
                                    word.next=xin;
                                    str="";
                                }
                                else
                                {
                                    exist=false;
                                    str="";
                                }
                            }
                            else                                      //单词
                            {
                                str+=String.valueOf(c);
                            }
                        }
                        //   循环10次
                        System.out.println("请输入您想查询的前几个出现此处最多的单词");
                        int N=scan.nextInt();
                        for(int i=1;i<=N;i++)                   
                        {
                            xin=new Word("",0);
                            lian=word.next;
                            //找到单词链中个数最多的
                            while(lian!=null)
                            {
                                if(lian.geshu>xin.geshu)
                                {
                                    xin=lian;
                                }
                                lian=lian.next;
                            }
                            //输出单词链中个数最多的
                            System.out.println("第"+i+"个 :"+xin.value+"个数:"+xin.geshu);
                            lian=word;
                            //删除单词链中单词个数最多的
                            while(lian.next!=null)
                            {
                                if(lian.next.value.equalsIgnoreCase(xin.value))
                                {
                                    lian.next=lian.next.next;
                                    break;
                                }
                                lian=lian.next;
                            }
                        }
                    }
                    System.out.println("文件:" + fileName);                
                }
                
            }
        }
        
        public static void main(String[] args) throws IOException {
            ceshi rf = new ceshi();
            rf.getFileList();
        }
    }
  • 相关阅读:
    2017-2018-1 课表
    所编裴书练习参考解答封面 [购买了书的同志记得一定要邮件联系, 并加我微信, 方便更正错误. 这里更新有时会慢, 或者懒得弄.]
    人工智能图片放大
    猜15个名人
    Excel 当前行高亮
    2014年至今的博文目录(更新至2019年1月7日,2017篇)
    拓扑学中凝聚点的几个等价定义
    江苏省2017年高等数学竞赛本二试题(含解答)
    裴礼文数学分析中的典型问题与方法第4章一元函数积分学练习
    2017年华东师范大学数学竞赛(数学类)试题
  • 原文地址:https://www.cnblogs.com/zql98/p/10994789.html
Copyright © 2020-2023  润新知