2022-04-06 统计文本字符数

题目

请编写程序,对一段英文文本,统计其中所有不同单词的个数,以及词频最大的10%的单词。所谓“单词”是指由不超过80个单词字符组成的连续字符串,但长度超过15的单词将只截取保留前15个单词字符。而合法的“单词字符”为大小写字母、数字和下划线,其它字符均认为是单词分隔符。注意“单词”不区分英文大写,例如“PAT”和“pat”被认为是同一个单词。输入给出一段非空文本,最后以符号#结尾。输入保证存在至少10个不同的单词。输出按照词频递减的顺序,按照“词频:单词”的格式输出词频最大的前10%的单词。若有并列,则按递增字典序输出。
(浙江大学 Python程序设计 陈春晖)

import sys
s=sys.stdin.read();strs=s[:s.find('#')]#输入“Ctrl-d”结束输入
#"s[:s.find(‘#’)]"
#表示取输入字符串,以符号“#”结尾
for k in set([i for i in strs if i.isalnum()==False and i!='_']):#isalnum判断是否是数字、字母
    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]))#ans是大列表套小列表
print(len(counts))
for i in range(0,int(0.1*len(counts))):
    print(str(ans[i][1])+':'+ans[i][0])

输入:

34 happy haha heyr ha hraurhauj878 85782 jhrfa hfaury23 8383 8383 8383 ha 34 34 
55 55 88 happy happy happy happy happy 34 34 34 happy 788 h77 h7 h4 749 84 j9 
87654 jji

输出结果:

21#输入了多少单词(重复单词不计)
7:happy
6:34

关于sys.read()函数

import sys
try:
    while True:
        print('Please input a number:')
        n = int(sys.stdin.readline().strip('\n')) #strip('\n')表示去掉字符串中\n,否则输出是“字符串+\n”
        print('Please input some numbers:')
        sn = sys.stdin.readline().strip()#strip()默认去掉字符串左侧、右侧的空格、\n
        if sn == '':
            break
        sn = list(map(int,sn.split())) #如果要强制转换成int等类型,可以调用map()函数。
        print(n)
        print(sn,'\n')
except:
    pass

input()方法和stdin()类似,不同的是input()括号内可以直接填写说明文字。

关于find()

>>>info = 'abca'
>>> print info.find('a')    # 从下标0开始,查找在字符串里第一个出现的子串,返回结果:0
0
>>> print info.find('a',1)  # 从下标1开始,查找在字符串里第一个出现的子串:返回结果3
3
>>> print info.find('3')    # 查找不到返回-1
-1
>>>
#!/usr/bin/python
 
str1 = "this is string example....wow!!!";
str2 = "exam";
 
print str1.find(str2);
print str1.find(str2, 10);
print str1.find(str2, 40);

(转载自菜鸟教程 (runoob.com))

你可能感兴趣的:(2022-04-06 统计文本字符数)