2019年第21周-01文章词频统计

 1. 题目:任一个英文的纯文本文件,统计其中的单词出现的个数。
 2. 对于编程问题,解决思路即IPO,确定输入(Input)、处理(Process)、输出(Output)
 3. 按照该思路,这题目解决流程如下:
 
 
 
 4. 按照以上思路
 (1)对数据进行处理,主要包括清除非字符内容、统一大小写、确定分隔符
 这部分编程内容就应该包括**文件操作**、**字符替换**、**单词分隔**;
  涉及到的方法包括f.open()、f.close()、string.split()、string.replace()等
 (2)对清理后的数据进行词频统计
 对文本中单词统计,即记录下每个单词在文本中出现的词数。对单词统计,首先想到了for循环和列表。这样可以实现,但当时考虑到第n个单词进来时,要与前面n-1个单词进行对比,效率低下。因此考虑用字典。
 (3)输出统计结果。这个没什么难度。
 
 5. 上代码

def getText():
#定义getText函数,对文件清洗并获取文件
    txt=open("Test_text.txt",'r').read()
    txt=txt.lower()
    for ch in ',:-"':
        txt=txt.replace(ch," ")
    return txt

test=getText()
words=test.split()
counts={}
#用字典及for循环统考每个单词个数,并保存到字典的value中。
for word in words:
    counts[word]=counts.get(word,0)+1
#根据字典中value进行排序
seq=sorted(counts.items(),key=lambda x:x[1],reverse=True)
#打印出频率最高的前五个
for i in range(5):
    print(seq[i])

6.代码知识解读

(1)首先解读单词统计

counts={}
for word in words:
    counts[word]=counts.get(word,0)+1
这段代码运用了字典去统计每个单词在文本中出现的次数,用到了字典两个特性:
  • 字典中键的唯一性。用单词作键,用次数作值。则完成了统计。
  • 字典的get方法。dict.get(key, default=None),返回指定键的值,并且能够给值提供默认值。

(2)单词次数的排序

#根据字典中value进行排序
seq=sorted(counts.items(),key=lambda x:x[1],reverse=True)
#打印出频率最高的前五个
for i in range(5):
    print(seq[i])

排序中用到了3个知识点

  • 字典的items方法,
    dict.items(),以列表返回可遍历的(键, 值) 元组数组。通过items方法,可以对字典的值进行排序,并返回键值对元组。
  • sorted方法

sorted(iterable,key,reverse)

iterable 待排序的可迭代对象,由于该参数要求为可迭代对象,因此用了items方法

key 对应的是个函数, 该函数用来决定选取用哪些值来进行排序,此处运用了lambda函数

reverse 反转排序

  • lambda函数,即匿名函数

lambda的语法形式如下: 
  lambda arg1, arg2, …, argN : expression

在上面的代码中,用x即字典作参数,用值作表达式,返回值。

(“心心在一艺,其艺必工;心心在一职,其职必举”)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值