第1关:词频统计

任务描述

本关任务:根据本关所学有关词频统计的基础知识,完成词频统计程序的编写并通过所有测试用例。

相关知识

为了完成本关任务,你需要掌握:

  1. 词频统计的方法;

  2. 词频可视化。

词频统计

在一份给定的文件里,词频指的是某一个给定的词语在该文件中出现的次数。这个数字通常会被正规化,以防止它偏向长的文件。在自然语言处理中,很多算法都是基于统计的原理而实现的,其中,词频统计是其中很重要的一环,学会对文件进行词频统计,会更好地帮我们掌握关键词提取、统计分词等算法。

英文词频统计

假设我们现在需要对一个英文文本进行词频统计。在此之间,我们需要明确的是,在词频统计中,我们统计的主要是文本中的单词,而对于文本中的停用词,我们一般需要将其去除;此外,在英文中,单词的大小写我们应该不进行区分,比如: Good 和 good 应认为是同一个单词进行统计。词频统计的具体步骤可描述如下:

1、读取文件,去除停用词

英文单词的分割可以是空格、标点符号或者特殊符号。为了统一分割方式,将各种特殊字符和标点符号使用 text.repalce() 方法替换成空格,再提取单词。

  1. for ch in '!@#$%:^&*()-.;':
  2. text=text.replace(ch," ")

2、对单词进行计数

定义空字典,用来存放单词和对应的出现次数,再对每个单词出现的频率进行统计,以空格进行分割。

  1. if word in counts:
  2. counts[word] = counts[word]+1
  3. else:
  4. counts[word]=1

3、对单词的统计值进行排序

由于字典类型没有顺序,需要将其转换为有顺序的列表类型,再用sort()方法和 lambda 函数配合实现根据单词次数对元素进行排序。

  1. items=list(counts.items())
  2. items.sort(key=lambda x:x[1],reverse=True)

词频可视化

当我们在进行统计分析时,如果想要快速的了解一个文本中的主要内容是什么,我们可以对文本内容进行可视化,通过对文本的可视化处理,能够帮助我们更好地了解文本中的关键信息,且更加直观,高效。在实践过程中,我们可以基于 wordcloud 以实现文本的可视化。

示例:对 text 文本进行可视化

  1. from wordcloud import WordCloud
  2. import matplotlib.pyplot as plt
  3. # 打开文件
  4. text = open('1.txt').read()
  5. # 生成对象
  6. wc = WordCloud().generate(text=text)
  7. # 显示词云
  8. plt.imshow(wc, interpolation='bilinear')
  9. plt.axis('off')
  10. plt.show()

从而,我们可以得到一个基本的词云图,如图1所示。

图1 词云图

编程要求

在右侧编辑器中的 Begin-End 之间补充 Python 代码,完成词频统计程序的编写,对输入的文本进行词频统计并输出词频最高的三个词。其中,文本的内容通过 input 从后台获取。

测试说明

平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。

测试输入:

  1. Got tho on super sale. Love it! Cuts my drying time in half Reckon I have had
  2. this about a year now, at least 7 months. Works great, I use it 5 days a week,
  3. blows hot air, doesnt overheat, isnt to big, came quick, didnt cost much. Get you
  4. one, you will like it.The styling tip does not stay on, keeps falling off in the
  5. middle of blow drying and then it's too hot to put back .

预期输出:

  1. it:3
  2. drying:2
  3. in:2

 参考代码:

text = input()
text = text.lower()

# 将特殊字符替换成为空格
for ch in '!@#$%:^&*()-.;':
    text = text.replace(ch, " ")

# 对字符串通过空格进行分割
words = text.split()

counts = {}
# 任务:完成对text文本的词频统计,将结果保存到counts字典中
# ********** Begin *********#
for i in words:
    counts[i] = words.count(i)
 # ********** End **********#
items = list(counts.items())
items.sort(key=lambda x: x[1], reverse=True)
# 输出词频统计的结果
for i in range(3):
    word, count = items[i]
    if  i<2:
       print("{0}:{1}".format(word, count))
    else:
       print("{0}:{1}".format(word, count),end="")

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

畜牧当道

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

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

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

打赏作者

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

抵扣说明:

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

余额充值