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

三国演义人物词频统计

import jieba


stopwords = {
          
   将军, 却说, 丞相, 二人, 不可, 荆州, 不能, 如此, 商议, 如何, 主公, 军士,
             左右, 军马, 引兵, 次日, 大喜, 天下, 东吴, 于是, 今日, 不敢, 魏兵, 陛下,
             人马, 一人, 汉中, 不知, ,, :, 。, “, ”, ;}
text_file = open(r"threekingdoms.txt", encoding=utf8).read()
seg_list = jieba.cut(text_file, cut_all=False)  # 用jieba库对文本进行中文分词,输出可能的分词的精确模式
a = []
for word in seg_list:
    if word not in stopwords:
        a.append(word)  # 通过循环迭代的方法,将过滤后的词语依次添加到刚刚建立的空数组当中。
# print(a)
counts = {
          
   }  # #新建一个空字典来存储文字和文字出现的次数
for word in a:
    if len(word) == 1:  # 挑出单个的分词(不计数)
        continue
    elif word == 诸葛亮 or word == "孔明曰":
        change_word = "孔明"
    elif word == "关公" or word == "云长":
        change_word = "关羽"
    elif word == "玄德" or word == "玄德曰":
        change_word = "刘备"
    elif word == "孟德":
        change_word = "曹操"
    else:
        change_word = word
    counts[change_word] = counts.get(change_word, 0) + 1  # 对word出现的频率进行统计,当word不在seg_list时,返回值是0,当word在seg_list中时,返回+1
    # ,以此进行累计计数
items = list(counts.items())  # 将字典类型转换为list类型便于操作
items.sort(key=lambda x: x[1], reverse=True)  # 根据items的第二个值进行从大到小的排序
# 默认是false,是从小到大,True的话就是从大到小,里面的key=是list的sort排序的lambda方法
print("人物              出场次数")
print("-------------------------")
for i in range(10):  # 显示词频最高的前10个键值对
    word, count = items[i]  # 返回相对应的键值对
    print("{0:<10}{1:>10}".format(word, count))  # 左对齐,占位10位,填充字符为空格

结果截图

经验分享 程序员 微信小程序 职场和发展