定义一个类,可以对输入的文章进行统计,要求实现以下几个方法: 1. 统计出各个单词出现的次数和频率 2. 查看出现频率最多的前10个单词 3. 输入单词能够得到单词的出现次数

  1. 定义一个类,可以对输入的文章进行统计,要求实现以下几个方法:
    1. 统计出各个单词出现的次数和频率
    2. 查看出现频率最多的前10个单词
    3. 输入单词能够得到单词的出现次数和频率
import pprint
class Statisics:
    def __init__(self,string):
        f = open(string,'r+')#打开文件
        txt = f.read()#把文本内容读入txt
        f.close()#关闭文件
        #把txt文件转换成小写
        txt =txt.lower()
        #不规则的非英文转化成空格
        a11 = 'abcdefghijklmnopqrstuvwxyz'
        for i in range(len(txt)):
            if txt[i]  in a11:
                pass
            else:
                txt = txt.replace(txt[i],' ')
        #把txt文件以空格分割成列表li1
        self.li1 = txt.split()
        #删除列表中的''
        for i in range(self.li1.count('')):
            self.li.remove('')
        #用li1生成集合set1
        self.set1 = set(self.li1)
        #再把集合set1生成列表li2
        self.li2 = list(self.set1)#存储文件中都有哪些单词
        #self.li1.count(li2[i]),查找li1中各个数据出现的次数,频率,
        li3 = []#存储单词,出现次数,频率
        for i in self.li2:
            times = self.li1.count(i)#单词出现次数
            frequency = times / len(self.li1)
            tuple1 = (i,times,'频率:{:.2%}'.format(frequency))
            li3.append(tuple1)
        self.li2 = li3#存储单词,出现次数,频率
        self.li2.sort(key=lambda x:x[1],reverse =True)#排序,按单词出现次数从大到小排序
        li3 = []
        #修改单词的出现次数
        for i in self.li2:
            times = i[1]#单词出现次数
            tuple1 = (i[0],f'{times}次',i[2])
            li3.append(tuple1)
        self.li2 = li3#存储单词,出现次数,频率
        #打印出现最多的十个单词
        print('出现最多的10个单词:')
        print('{: <8}'.format('单词'),'{: <6}'.format('出现次数'),'{: <8}'.format('频率'))
        for i in range(10):
            print('{: <10}'.format(self.li2[i][0]),'{: <8}'.format(self.li2[i][1]),'{: <10}'.format(self.li2[i][2]))


    #查询单词出现频率,次数    
    def query(self,word):
        for i in self.li2:
            if i[0] == word:
                print('{: <8}'.format('单词'),'{: <6}'.format('出现次数'),'{: <8}'.format('频率'))
                print('{: <10}'.format(word),'{: <8}'.format(i[1]),'{: <10}'.format(i[2]))
                break

    #查询所有单词出现频率,次数         
    def query_all(self):
        print('{: <8}'.format('单词'),'{: <6}'.format('出现次数'),'{: <8}'.format('频率'))
        for i in range(len(self.li2)):
            print('{: <10}'.format(self.li2[i][0]),'{: <8}'.format(self.li2[i][1]),'{: <10}'.format(self.li2[i][2]))



a = Statisics('1.txt')     

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sun614

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值