统计一个文本出现频率最高的…

一、作业要求

    在一个txt文件中统计其中出现最多的10词语,最好可以统计中文词语

二、实现方法

    首先,建立一个word类,其中这个类的对象有两个属性,其中这个词语的值,以及这个值出现的次数。首先把这个文件中的所有的内容传输到一个缓存当中,然后每输出一个字母就存储到一个str中,当出现各种符号,以及空格的时候就认为这个单词的读取结束!建立word,lian两个链,然后每输出一个单词,就存储在word当中,然后指向下一个,同时把word的值赋给lian,并判断是否存在相同的单词,存在的话,就把这个单词的个数加一,没有的话就赋在这个lian的后面。当所有的单词以及单词的个数都已经存储好了之后,就将前10个词语输出。

三、源代码

package sum;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

class Word                                        //定义单词类
{
    String value;                                  //具体的单词
    int geshu;                                     //出现的个数
    Word next;                                     //将单词链起来
    public Word(String value,int geshu)            //带参构造函数
    {
        this.value=value;
        this.geshu=geshu;
        next=null;
    }
    public Word()                                   //空构造函数
    {
        this.value="";
        this.geshu=0;
        next=null;
    }
                                      
public class r {
   public static void main(String args[]) throws IOException      //主函数
    {
        Word word=new Word();                                      //单词的链头
        Word lian,xin;                                            
        String str="";
        FileReader f=new FileReader("d:/text.txt");                //读取英文文件
        char[] c=new char[1];                                 //每次读取一个字母
        int b=0;
        boolean exist=false;                              //判断单词是否存在于  word 链中
        while((b=f.read(c))!=-1)                              //每次读取一个字母直到最后
        {
            //如果字符为  换行、空格、单引号、双引号、逗号、句号  则为一个单词的结束及另一个单词的开始
            if(String.valueOf(c).equals("r")||String.valueOf(c).equals("n")||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.equals(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次
        for(int i=1;i<=10;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.equals(xin.value))                 {
                    lian.next=lian.next.next;
                    break;
                }
                lian=lian.next;
            }
        }
    }
}

四、实验测试

[转载]统计一个文本出现频率最高的10个词

[转载]统计一个文本出现频率最高的10个词

五、实验结果

[转载]统计一个文本出现频率最高的10个词

六、实验不足

1.这个实验的目的是统计最常出现的10个词语,想这些人称词语就可以不出现,在筛选的时候可以增加一些约束条件,把这些词语删除。

2.对于汉字来说,实现方法有点困难,自己还是没有想到方法来实现,在以后的学习之中还是要努力,加强各方面的能力。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
统计一本英文出现频率最高10个单词,可以按照以下步骤进行: 1. 首先,将书的文本内容读入程序,可以使用Python的open()函数打开文件并读取内容。 2. 对文本内容进行预处理,包括去掉标点符号、转换成小写等。 3. 将文本内容分割成单词,可以使用Python的split()函数。 4. 统计每个单词在文本出现次数,可以使用Python的字典来实现。遍历文本每个单词,将其作为字典的键,如果该键不存在,则添加键值对,值为1;如果该键存在,则将对应的值加1。 5. 对字典按值进行排序,可以使用Python的sorted()函数,设置按值降序排序。 6. 输出出现频率最高10个单词,可以遍历排序后的字典,输出前10个键即可。 下面是Python代码示例: ```python import string # 读取文本内容 with open('book.txt', 'r') as f: text = f.read() # 预处理文本内容 text = text.translate(str.maketrans('', '', string.punctuation)) text = text.lower() # 分割文本内容成单词列表 words = text.split() # 统计每个单词出现次数 freq_dict = {} for word in words: if word not in freq_dict: freq_dict[word] = 1 else: freq_dict[word] += 1 # 按值降序排序字典 sorted_dict = dict(sorted(freq_dict.items(), key=lambda x: x[1], reverse=True)) # 输出出现频率最高10个单词 for word, freq in sorted_dict.items(): print(word, freq) if len(sorted_dict) == 10: break ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值