【头歌-Python】8.3 政府工作报告数据提取(project)-第5关

第5关:提取报告中的高频词

任务描述

附件中为2023年政府工作报告,本关要求将报告读取为一个字符串,再利用jieba对中文进行分词,略过停用词后,统计报告中出现的前n个高频词。

编程要求

输入一个正整数n,将字符串切分为中文词语后,略过停用词(“src/stopword.txt”)和单字词,统计每个长度大于1的词出现的频度,词频从高到低输出前n个高频词语。
为实现自动评测,本关需要在代码前加以下三行语句,用于导入分词库和关闭jieba 日志输出。

import jieba  # jieba是中文分词库,将中文句子切分成词。
import logging  # 导入模块,用于设置日志级别
jieba.setLogLevel(logging.INFO)    # 关闭jieba日志输出

测试说明

平台会对你编写的代码进行测试,按词频由高到低输出前n个高频词,词频相同时,按出现次序统计。
输出格式为(参考示例):
词语左对齐宽度4;数量右对齐宽度4

格式示例:

  • 输入1:
10
  • 输出1:
发展   136
推进    66
建设    60
经济    58
支持    51
实施    46
推动    44
政策    38
政府    36
工作    35

解题思路

  1. 读取数据文件和停用词文件
  2. 使用jieba精确模式对数据文件进行分词(其它模式无法通过测试)
  3. 列表推导式筛选非停用词以及长度大于2的词组
  4. 使用字典统计词频,其中字典的键为词组、值为词频
  5. 使用sorted对字典排序
  6. 输出前n个最高词频的词组与对应词频即可

参考代码

import jieba  # jieba是中文分词库,将中文句子切分成词。
import logging  # 导入模块,用于设置日志级别
jieba.setLogLevel(logging.INFO)    # 关闭jieba日志输出

with open('src/政府工作报告.txt', 'r', encoding='utf-8') as f:
    s = f.read()
with open('src/stopword.txt', 'r', encoding='utf-8') as f:
    stop = f.read().split()  # 读停用词表
s = jieba.lcut(s)            # 精确模式分词
s = [c for c in s if c not in stop and len(c)>1]
dic = {}
for c in s:                  # 统计词频
    dic[c] = dic.get(c, 0)+1

n = int(input())
# 排序,高到低
dic = sorted(dic.items(), key=lambda x:x[1], reverse=True)
for k,v in dic[:n]:
    print(f'{k:<4}{v:>4}')

有问题欢迎留言~

你可能感兴趣的:(头歌-Educoder,Python,python,开发语言,学习方法)