栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【Python二级】政府工作报告两问

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Python二级】政府工作报告两问

题目描述:

该题目共二个问题,分成两道题分别作答。2 个文本文件分别摘自2019年和2018年的政府工作报告。请在右侧代码框中个源文件 ,实现以下功能‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

本题解答问题1‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

问题1 :数据统计。要求: 统计出两个文件中出现次数最多的10 个词语,作为主题词,要求词语不少于2个字符,打印输出在屏幕上,输出示例如下:(示例仅作为示意)‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

2019:改革:10,企业:9,…(略),深化:2‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

2018:改革:11,效益,7,…(略),深化:1‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

注意:输出格式采用英文冒号和英文逗号,标点符号前后无空格,各词语间用逗号分隔,最后一个词语后无逗号。

import jieba
d={}
d2019={}
fo=open('政府工作报告2018.txt','r',encoding='utf-8')
fi=open('政府工作报告2019.txt','r',encoding='utf-8')

for line in fi.readlines():
    m=jieba.lcut(line.strip('n'))
    for k in m:
        if len(k)>=2:
            d2019[k]=d2019.get(k,0)+1
lt = list(d2019.items())
lt.sort(key = lambda x:x[1],reverse = True)
print('2019:',end='')
for i in range(10):
    if i+1 <10:
        print('{}:{},'.format(lt[i][0],lt[i][1]),end='')
    else:
        print('{}:{}'.format(lt[i][0],lt[i][1]),end='')
print('')
for line in fo.readlines():
    m=jieba.lcut(line.strip('n'))
    for k in m:
        if len(k)>=2:
            d[k]=d.get(k,0)+1
lt = list(d.items())
lt.sort(key = lambda x:x[1],reverse = True)
print('2018:',end='')
for i in range(10):
    if i+1 <10:
        print('{}:{}'.format(lt[i][0],lt[i][1]),end=',')
    else:
        print('{}:{}'.format(lt[i][0],lt[i][1]),end='')
        

笔者的方式比较繁琐,大家可以看一看,这里作简要说明:
首先是去遍历这个两个文件,然后分词,然后用字典方法计算个数。再用列表的sort方法进行排序。然后再用range(10)来遍历前十个,再就是输出。输出要特别注意,因为有提到最后不能以逗号结尾,所以还要用if i+1< 10来判断一下是否是最后一行,不是的话就以逗号结尾。

再介绍以下答案的简洁代码:

import jieba


def getWords(fn):
    fi = open(fn, 'r', encoding='utf-8')
    ls = jieba.lcut(fi.read())
    d = {}
    for l in ls:
        if len(l) >= 2:
            d[l] = d.get(l, 0) + 1
    lt = list(d.items())
    lt.sort(key=lambda x: x[1], reverse=True)
    return lt


def showWords(li, year, num=10):
    print('{}:'.format(year), end='')
    for i in range(num):
        k, v = li[i]
        if i < num - 1:
            print('{}:{}'.format(k, v), end=',')
        else:
            print('{}:{}'.format(k, v))


ls2019 = getWords('政府工作报告2019.txt')
ls2018 = getWords('政府工作报告2018.txt')

showWords(ls2019, 2019)
showWords(ls2018, 2018)

这里定义了两个函数,第一个函数用来分词以及排序,参数是文件名,返回值是排好了顺序的列表。第二个函数用来输出的,参数是排好了序的列表,年份,以及10,10用来给排好序的列表遍历出前10个元组,然后把每个元组里的两个元素赋值给k,v,分别是分的词和词频。然后输出时候也是作一个判断,用 if i 然后再调用上面的排序以及输出函数。

第二问

问题2: 数据关联。要求:修改右侧代码框中代码,对比两组主体词的差异,输出两组的共有词语和分别的特有词语,输出示例如下:(示例词语费答案)‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

共有词语:改革,…(略),深化‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

2019 特有:企业,…(略),加强‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

2019 特有:效益,…(略),创新‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

注意:输出格式采用英文冒号和英文逗号,标点符号前后无空格,各词语间用逗号分隔,最后一个词语后无逗号。

import jieba
def getwords(fname):
    d={}
    fo=open(fname,'r',encoding='utf-8')
    for line in fo.readlines():
        m=jieba.lcut(line.strip('n').strip())
        for k in m:
            if len(k)>=2:
                d[k]=d.get(k,0)+1
    lt = list(d.items())
    lt.sort(key = lambda x:x[1],reverse = True)
    tpc={}
    for i in range(10):
        tpc[lt[i][0]]=lt[i][1]
    return tpc
tpsl2019=getwords('政府工作报告2019.txt')
tpsl2018=getwords('政府工作报告2018.txt')
cmm={}
t2019={}
for each in tpsl2019:
    if each in tpsl2018:
        cmm[each]=tpsl2019[each]
        tpsl2018.pop(each)
    else:
        t2019[each]=tpsl2019[each]
print('共有词语:',end='')
print(','.join(list(cmm.keys())))
print('2019特有:',end='')
print(','.join(list(t2019.keys())))
print('2018特有:',end='')
print(','.join(list(tpsl2018.keys())))

简要说明一下:也是和第一问类似,定义一个函数,参数是读取的文件名,去分词、排序、遍历出前十个,如出一辙,但是我把这10个元组值以键值对形式放在一个字典里,然后返回值是这个字典。然后通过调用函数,得到2019年与2018年的分词与词频的键值对组成的字典。
去用each遍历2019年的字典,如果 它也在2018年的字典里,就把它放入cmm这个新字典代表共同的,然后再把这个相同的元素从2018字典里摘出去,这样2018字典里剩下的就是它特有的。
如果2018字典里没有,那就是2019字典特有的,就把它放到t2019这个新字典里。
然后我们就有了“共同元素字典”、“2019特有词字典”、“2018特有词字典”,再用’,'.join(list(d.keys()))方式分别输出出来。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/923027.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号