题目来源:Python语言程序设计
授课老师: 嵩天、黄天羽、礼欣
hamlet小说下载路径:https://python123.io/resources/pye/threekingdoms.txt
三国演义人物词频统计-4:https://blog.csdn.net/Mzjuser/article/details/82527865
三国演义人物词频统计-3:https://blog.csdn.net/Mzjuser/article/details/82527464
三国演义人物词频统计-2:https://blog.csdn.net/Mzjuser/article/details/82527412
三国演义人物词频统计-1:https://blog.csdn.net/Mzjuser/article/details/82527289
问题描述
由三国演义词频统计-2可知,输出的结果中存在着一系列不是人名的单词而且还有些指的是同一个人,所以我们需要对此进行进一步的优化
代码
import jieba
path = 'C:\\Users\\Desktop\\三国演义.txt'
text = open(path,'r',encoding='utf-8').read()
#使用结巴的函数对文本进行分词
words = jieba.lcut(text)
#需要排除一些不是人名的单词
excludes = ['将军','却说','二人','不可','荆州']
#定义字典类型去存储文字和文字出现的次数
counts = {}
for word in words:
if len(word) == 1:
continue
elif word == '诸葛亮'or word == '孔明曰':
rword = '孔明'
elif word == '玄德'or word == '玄德曰':
rword = '刘备'
elif word == '孟德'or word == '丞相':
rword = '曹操'
elif word == '关公'or word == '云长':
rword = '关羽'
else:
rword = word
counts[rword] = counts.get(rword,0) + 1
#把一些不是人名的词语排除掉
for word in excludes:
del counts[word]
items = list(counts.items())
#根据iems的第二个值进行从大到小的排序
items.sort(key = lambda x:x[1],reverse=True)
for i in range(15):
word,count = items[i]
#左对齐,占位10位,填充字符为空格
print("{0:<10}{1:>5}".format(word,count))