python对红楼梦的每一章节进行词频统计

该博客详细介绍了如何使用Python的jieba库对《红楼梦》文本进行词频统计。首先,通过读取文件并使用jieba进行精准分词,然后将‘第几回’的标记存入列表,以此作为每回的切分依据。接着,对每一回的词频进行统计,排除单个字符,最后按词频降序排列并输出前五个高频词汇。此代码段适用于文本挖掘和中文处理场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python对红楼梦的每一章节进行词频统计

import jieba
f=open("G:\\红楼梦.txt","r",encoding="utf-8")
txt=f.read()
words=jieba.lcut(txt)#精准模式
ls=[]
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201030001436824.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RkbDMyMDcyMQ==,size_16,color_FFFFFF,t_70#pic_center)

for word in words:
    a={}
    if word[0] == "第" and word[-1] == "回":
        if word in ls:
            continue
        else:
            ls.append(word)
print(ls)

for i in range(len(ls)):
    print(ls[i])
    a={}
    if i<len(ls)-1:
        for word in words[words.index(ls[i])+1:words.index(ls[i + 1])]:
            if len(word) == 1:  # 排除单个字符的统计结果
                continue
            else:
                a[word] = a.get(word, 0) + 1

    elif i ==len(ls)-1:#最后一回

        for word in words[words.index(ls[i])+1:]:
            if len(word) == 1:  # 排除单个字符的统计结果
                continue
            else:
                a[word] = a.get(word, 0) + 1

    items = list(a.items())  # 将字典转换为记录列表
    items.sort(key=lambda x: x[1], reverse=True)  # 记录第二列排序


    for i in range(5):
        word, count = items[i]
        print("{0:<10}{1:>5}".format(word, count))
    print("\n")


f.close()

第一步是打开红楼梦.txt文件,只读的方式,使用UTF-8编码方式
第二步是使用精准模式,将单词保存到words列表中,再将“第几回”存放到一个新的列表中,便于对红楼梦文件每一回进行切片,切边的界点便是第多少回这样的字眼,第一种统计是第i回到第i+1回的之间的词频统计,还有一种就是最后一回的词频统计。
使用一个字典类型a={},统计单词的次数:

for word in words:
    if len(word)==1:#排除单个字符的统计结果
        continue
    else:
        a[word]=a.get(word,0)+1

如果字符长度为1则跳过,否则使用a.get(word,0)方法表示:如果word在a中则返回word对应的值,如果word不在a中就返回0。
第三步是对单词的统计的值从高到低进行排序,输出前5个高频词语,并格式化打印输出。由于字典没有顺序,需要将其转换为有顺序的列表类型,再使用sort()方法和lambda函数配合实现单词出现的次数,对元素进行排序。最后输出排序结果前15位的单词。

items=list(a.items())#将字典转换为记录列表
items.sort(key=lambda x:x[1],reverse=True)#记录第二列排序

运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

互动创客坊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值