zoukankan      html  css  js  c++  java
  • python练习题7.1词频统计

    请编写程序,对一段英文文本,统计其中所有不同单词的个数,以及词频最大的前10%的单词。

    所谓“单词”,是指由不超过80个单词字符组成的连续字符串,但长度超过15的单词将只截取保留前15个单词字符。而合法的“单词字符”为大小写字母、数字和下划线,其它字符均认为是单词分隔符。

    输入格式:

    输入给出一段非空文本,最后以符号#结尾。输入保证存在至少10个不同的单词。

    输出格式:

    在第一行中输出文本中所有不同单词的个数。注意“单词”不区分英文大小写,例如“PAT”和“pat”被认为是同一个单词。

    随后按照词频递减的顺序,按照词频:单词的格式输出词频最大的前10%的单词。若有并列,则按递增字典序输出。

    输入样例:

    This is a test.
    
    The word "this" is the word with the highest frequency.
    
    Longlonglonglongword should be cut off, so is considered as the same as longlonglonglonee.  But this_8 is different than this, and this, and this...#
    this line should be ignored.
    
    

    输出样例:(注意:虽然单词the也出现了4次,但因为我们只要输出前10%(即23个单词中的前2个)单词,而按照字母序,the排第3位,所以不输出。)

    23
    5:this
    4:is

    代码如下:

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    import sys
    #sys.stdin 标准输入
    # sys.stdout 标准输出
    # sys.stderr 标准错误输出
    
    s = sys.stdin.read()
    strs = s[:s.find('#')]
    
    key = set()
    for i in strs:
        if i.isalnum()==False and i!='_':
            key.add(i)
    for k in key:
        strs = strs.replace(k,' ')
    #去掉空格,全部变小写,变成列表
    strs=strs.rstrip(' ').lower().split() #全部变小写
    counts=dict()
    for i in strs:
        k=i[:15] #取前15个字符
        if k not in counts:
            counts[k]=1
        else:
            counts[k]+=1
    ans=sorted(counts.items(), key=lambda x:(-x[1], x[0]))
    print(len(counts))
    
    for i in range(0,int(0.1*len(counts))): #词频最大的前10%
        print(str(ans[i][1])+':'+ans[i][0])

    参考课堂的程序,基本上是抄过来的。

    越来越写不动了,理解能力跟不上了。~~~~(>_<)~~~~


    读书和健身总有一个在路上

  • 相关阅读:

    今天的收获080716
    手机写博客
    修改加速软件之本地分流(突破电信上网限制)
    Linux并不是传说中的那么不变
    Ubuntu Linux下的几款“磁盘操作阐明器”对比
    在SuSE中设置开机主动启动挨次
    Fedora显卡驱动的装配
    新Qt主题引擎让GNOME下KDE程序更舒服
    Ubuntu的运用总结
  • 原文地址:https://www.cnblogs.com/Renqy/p/12786298.html
Copyright © 2011-2022 走看看