三国演义人物词频统计-3

题目来源: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))

结果显示(通过添加excludes里面的值以及if的判断,对结果进行多次迭代)

猜你喜欢

转载自blog.csdn.net/Mzjuser/article/details/82527464