2 个文本文件分别摘自2019年和2018年的政府工作报告。
问题1 :数据统计。要求: 统计出两个文件中出现次数最多的10 个词语,作为主题词,要求词语不少于2个字符,打印输出在屏幕上,输出示例如下:(示例仅作为示意)
2019:改革:10,企业:9,…(略),深化:2
2018:改革:11,效益,7,…(略),深化:1
注意:输出格式采用英文冒号和英文逗号,标点符号前后无空格,各词语间用逗号分隔,最后一个词语后无逗号。
import jieba
def getWords(fn):
fi = open(fn, 'r', encoding='utf-8')
ls = jieba.lcut(fi.read()) #f.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)
问题2: 数据关联。要求:对比两组主体词的差异,输出两组的共有词语和分别的特有词语,输出示例如下:(示例词语非答案)
共有词语:改革,…(略),深化
2019 特有:企业,…(略),加强
2018 特有:效益,…(略),创新
注意:输出格式采用英文冒号和英文逗号,标点符号前后无空格,各词语间用逗号分隔,最后一个词语后无逗号。
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 extraWords(li, num=10):
ls = []
for i in range(num):
k, v = li[i]
ls.append(k)
return ls
def compareWords(ls1, ls2):
comm = []
lt1 = []
lt2 = []
for i in ls1:
if i in ls2:
comm.append(i)
else:
lt1.append(i)
for i in ls2:
if i not in ls1:
lt2.append(i)
return comm, lt1, lt2
def showDiffWords(comm, y1, y2, lt1, lt2):
print('共有词语:', end='')
print(','.join(comm))
print('{}特有:'.format(y1), end='')
print(','.join(lt1))
print('{}特有:'.format(y2), end='')
print(','.join(lt2))
def main():
ls2019 = getWords('政府工作报告2019.txt')
ls2018 = getWords('政府工作报告2018.txt')
nls2019 = extraWords(ls2019)
nls2018 = extraWords(ls2018)
comm, x2019, x2018 = compareWords(nls2019, nls2018)
showDiffWords(comm, 2019, 2018, x2019, x2018)
main()