题目来源:Python语言程序设计
授课老师: 嵩天、黄天羽、礼欣
hamlet小说下载路径:https://python123.io/resources/pye/threekingdoms.txt
三国演义人物词频统计-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
代码
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 == '玄德曰' or word == '主公':
rword = '刘备'
elif word == '孟德'or word == '丞相':
rword = '曹操'
elif word == '关公'or word == '云长':
rword = '关羽'
elif word == '都督':
rword = '周瑜'
elif word == '后主':
rword = '刘禅'
elif 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))
结果显示
其他解决方案
可以通过人物的名称(需要对三国中的人物有详细的了解)对人物出现的次数进行统计,然后在进行排序。