目录
背景
《天龙八部》是著名作家金庸的代表作之一,历时4年创作完成。该作品气势磅礴,人物众多,非常经典。这里给出一个《天龙八部》的网络版本,文件名为”天龙八部-网络版.txt”。
问题一及解答
问题
请编写程序,对这个《天龙八部》文本中出现的汉字和标点符号进行统计,字符与出现次数之间用冒号:分隔,输出保存到“天龙八部-汉字统计.txt”文件中,该文件要求采用 CSV 格式存储,参考格式如下(注意,不统计空格和回车字符):
天:100, 龙:110, 八:109, 部:10
(略)
解答
程序框图
数据流图
程序代码
with open("天龙八部-网络版.txt", "r", encoding = "UTF-8") as fi:
lines = fi.readlines()
stat = {}
for line in lines:
for elm in line:
if elm not in {' ', '\n', '\ufeff','\u3000'}:
###############方法一:利用字典的get方法进行词频统计###########
## stat[elm] = stat.get(elm,0) + 1
###############方法二:根据字典数据进行词频统计##############
if elm in stat:
stat[elm] += 1
else:
stat[elm] = 1
ls = []
for elm in stat:
ls.append("{}:{}".format(elm,stat[elm]))
with open("天龙八部-汉字统计.txt", "w", encoding ="UTF-8") as fo:
fo.write(",".join(ls))
问题二及解答
问题
请编写程序,对《天龙八部》文本中出现的中文词语进行统计,采用 jieba 库分词,词语与出现次数之间用冒号:分隔,输出保存到“天龙八部-词语统计.txt”文件中。参考格式如下(注意,不统计任何标点符号):
天龙:100, 八部:10
(略)
本题暂不支持自动评阅,print(‘ok’),即可得分
解答
程序框图
数据流图
程序代码
with open("天龙八部-网络版.txt", "r", encoding = "UTF-8") as fi:
lines = fi.readlines()
from jieba import *
stat = {}
for line in lines:
ls = lcut(line) # 利用第三方库jieba进行中文分词
for elm in ls:
if elm not in {"","\ufeff", ",","。","!","“","”",":","\n",\
"、"," ",':',"\u3000",",","","《","》",\
"·","(",")","?"}: # 如果不是标点符号,那么进行词频统计
if elm in stat:
stat[elm] += 1
else:
stat[elm] = 1
##############将词频统计以“词语:出现次数”进行显示##########
ls = []
for key in stat:
ls.append("{}:{}".format(key,stat[key]))
###########################################################
with open("天龙八部-词语统计.txt", "w", encoding = "UTF-8") as fo:
fo.write(",".join(ls))
知识点总结
注释:
- 学会构造字典进行字频统计。学会利用两种方法对字出现的次数进行计数:字典get方法以及直接根据字典数据的方法。
- 熟练利用保留字in、not in判定指定字符是否在字符串中。
- 学会利用字符串的join(iter)方法对迭代类型变量后的每一个元素加入字符串。注意该方法的返回类型是加入元素后的字符串。
- 学会利用format对字符串进行格式化。