【头歌-Python】8.5 中文词频统计(project) 1~5关

该文系列介绍了如何使用Python的jieba库处理中文文本,从读取文件、中文分词到统计词频,逐步去除无意义的单字词和停用词,以提取文本的核心内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考教程:B站视频讲解——https://space.bilibili.com/3546616042621301

第1关:读文件

任务描述

本关任务:编写一个能读文件到字符串小程序。

一般来说,一篇文章的最重要的内容会反复出现,所以词频可以表示文章的重点,本项目将训练统计文件中的文本词频的能力。

编程要求

根据提示,输入一个正整数n,在右侧编辑器补充代码,将文件中的文本读取为字符串,并输出前n个字符。
二十大报告.txt

测试说明

平台会对你编写的代码进行测试:

  • 测试输入:
15
  • 预期输出:
高举中国特色社会主义伟大旗帜

参考代码

file = '/data/bigfiles/二十大报告.txt'
with open(file, 'r', encoding='utf-8') as f:
    txt = f.read()
	n = int(input())
	print(txt[:n])

第2关:中文切分

任务描述

本关任务:编写一个能读文件到字符串小程序。

一般来说,一篇文章的最重要的内容会反复出现,所以词频可以表示文章的重点,本项目将训练统计文件中的文本词频的能力。

编程要求

根据提示,输入一个正整数n,在右侧编辑器补充代码,将文件中的文本读取为字符串,利用jieba库的精确模式将文本切分为字符串,并输出前n个字符串的列表。
二十大报告.txt

测试说明

平台会对你编写的代码进行测试:

  • 测试输入:
15
  • 预期输出:
['高举', '中国', '特色', '社会主义', '伟大旗帜', '\n', '\n', '为', '全面', '建设', '社会主义', '现代化', '国家', '而', '团结奋斗']

参考代码

import jieba
jieba.setLogLevel(jieba.logging.INFO)

file = '/data/bigfiles/二十大报告.txt'
with open(file, 'r', encoding='utf-8') as f:
    txt = f.read()
	n = int(input())
	print(list(jieba.cut(txt))[:n])  # 精确模式

第3关:统计词频

任务描述

本关任务:编写一个能统计词频小程序。

一般来说,一篇文章的最重要的内容会反复出现,所以词频可以表示文章的重点,本项目将训练统计文件中的文本词频的能力。

编程要求

根据提示,输入一个正整数n,在右侧编辑器补充代码,将文件中的文本读取为字符串,利用jieba库的精确模式将文本切分为字符串,统计每个字符串出现的频率,存储为字典类型,输出词频最高的元素为二元组的列表前n项。
二十大报告.txt

测试说明

平台会对你编写的代码进行测试:

  • 测试输入:
10
  • 预期输出:
[(',', 1360), ('、', 847), ('。', 610), ('的', 563), ('和', 351), ('\n', 341), ('\u3000', 322), ('发展', 218), ('坚持', 170), ('建设', 151)]

参考代码

import jieba
jieba.setLogLevel(jieba.logging.INFO)

file = '/data/bigfiles/二十大报告.txt'
with open(file, 'r', encoding='utf-8') as f:
    txt = f.read()
	n = int(input())
	dic = {}
	for c in jieba.cut(txt):
	    dic[c] = dic.get(c, 0)+1   # 统计词频
	dic = sorted(dic.items(), key=lambda x:x[1], reverse=True)
	print(list(dic[:n]))

第4关:去除单字词

任务描述

本关任务:编写一个能统计词频小程序。

一般来说,一篇文章的最重要的内容会反复出现,所以词频可以表示文章的重点,本项目将训练统计文件中的文本词频的能力。

编程要求

根据提示,输入一个正整数n,在右侧编辑器补充代码,将文件中的文本读取为字符串,利用jieba库的精确模式将文本切分为字符串,将无实质意义的单字符元素去掉,统计长度大于1的每个字符串出现的频率,存储为字典类型,输出词频最高的元素为二元组的列表前n项。
二十大报告.txt

测试说明

平台会对你编写的代码进行测试:

  • 测试输入:
10
  • 预期输出:
[('发展', 218), ('坚持', 170), ('建设', 151), ('人民', 134), ('中国', 124), ('社会主义', 116), ('国家', 110), ('体系', 109), ('推进', 107), ('全面', 102)]

参考代码

import jieba
jieba.setLogLevel(jieba.logging.INFO)

file = '/data/bigfiles/二十大报告.txt'
with open(file, 'r', encoding='utf-8') as f:
    txt = f.read()
	n = int(input())
	dic = {}
	for c in jieba.cut(txt):
	    if len(c)>1:
	        dic[c] = dic.get(c, 0)+1
	dic = sorted(dic.items(), key=lambda x:x[1], reverse=True)
	print(list(dic[:n]))

第5关:去除停用词

任务描述

本关任务:编写一个能统计词频小程序。

一般来说,一篇文章的最重要的内容会反复出现,所以词频可以表示文章的重点,本项目将训练统计文件中的文本词频的能力。
stopwordsshz.txt

文本“stopwordsshz.txt”称为停用词文件,其中存储了无意义的虚词,这些词在统计时可以忽略掉。

编程要求

根据提示,输入一个正整数n,在右侧编辑器补充代码,将文件中的文本读取为字符串,利用jieba库的精确模式将文本切分为字符串,将无实质意义的单字符元素和停用词文本中存在的元素去掉,统计长度大于1的每个字符串出现的频率,存储为字典类型,输出词频最高的元素为二元组的列表前n项。
二十大报告.txt

测试说明

平台会对你编写的代码进行测试:

  • 测试输入:
10
  • 预期输出:
[('发展', 218), ('建设', 151), ('中国', 124), ('国家', 110), ('体系', 109), ('推进', 107), ('现代化', 86), ('制度', 76), ('完善', 73), ('推动', 61)]

参考代码

import jieba
jieba.setLogLevel(jieba.logging.INFO)

file = '/data/bigfiles/二十大报告.txt'
with open(file, 'r', encoding='utf-8') as f:
    txt = f.read()
with open('/data/bigfiles/stopwordsshz.txt','r', encoding='utf-8') as f:
    stop = f.read().split()
n = int(input())
dic = {}
for c in jieba.cut(txt):
    if len(c)>1 and c not in stop:     # 去除停用词
        dic[c] = dic.get(c, 0)+1
dic = sorted(dic.items(), key=lambda x:x[1], reverse=True)
print(list(dic[:n]))
### 于谛凌 Python 教程第四章的内容 针对用户的需求,对于谛凌 Python 教程第四章的具体内容未能直接获取到确切的文字描述材料。然而,在通常情况下,Python教程的章节安排具有一定的规律性。假设按照常见的教学大纲设计,第四章可能会覆盖如下主题: #### 函数定义与调用 函数是编程中的基本构建模块之一,允许将代码封装成可重用的部分[^2]。 ```python def greet(name): """ 打印问候语. 参数: name (str): 用户的名字. """ print(f'Hello, {name}!') ``` #### 参数传递方式 探讨位置参数、键字参数以及默认参数的概念及其应用实例[^3]。 ```python def describe_pet(animal_type='dog', pet_name=''): """显示宠物的信息""" print(f"\nI have a {animal_type}.") print(f"My {animal_type}'s name is {pet_name.title()}.") ``` #### 返回值处理 讲解如何让函数返回单个值或多组数据给调用者,并介绍None作为特殊返回情况的意义所在[^4]。 ```python def get_formatted_name(first_name, last_name): """返回整洁的姓名.""" full_name = f"{first_name} {last_name}" return full_name.title() musician = get_formatted_name('jimi', 'hendrix') print(musician) ``` #### 变量作用域规则 解释局部变量和全局变量的区别,说明不同上下文中变量的有效范围及生命周期特点[^5]。 ```python global_var = "I'm global" def my_function(): local_var = "I'm local" print(local_var) my_function() print(global_var) # This will work fine # print(local_var) # Uncommenting this line would cause an error because `local_var` does not exist outside the function ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

谛凌

本人水平有限,感谢您支持与指正

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

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

打赏作者

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

抵扣说明:

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

余额充值