【用Python对全职高手小说分析分词词频词性,小说人物出场次数排序,小说中食物排序,小说人物关系等等】

这篇博客利用Python对《全职高手》小说进行了深入分析,包括分词词频和词性统计,角色出场次数排序,小说中的食物出现频率排序,并绘制了人物关系图,词云以及各种可视化图表,展示了自然语言处理在文学作品分析中的应用。
摘要由CSDN通过智能技术生成

需求

根据第1部分自然语言处理教学内容,请选择一本你喜欢的小说,利用上课讲的但不限于授课内容,对该小说进行分析。比如分析该小说的分词,词频,词性,小说人物出场次数排序,小说中食物排序(这个得有,我喜欢吃),小说人物关系等等。

1、前期准备

1.1 导入库

在这里插入图片描述

1.2 小说、用户字典、食物清单、停用词等txt文档 和 字体simfang.ttf 以及词云用到的图片

在这里插入图片描述
词云图片

以上资料自行百度下载 或者 自我总结

2、源码

'''
Autor: 何邦渊 
DateTime: 2022/3/20 21:24
IDE: PyCharm  
Function: 根据第1部分自然语言处理教学内容,请选择一本你喜欢的小说,利用上课讲的但不限于授课内容,对该小说进行分析。比如分析该小说的分词,词频,
          词性,小说人物出场次数排序,小说中食物排序(这个得有,我喜欢吃),小说人物关系等等。
          要求:1代码以py文件附件形式上传,有功能性注释和普通注释。
          2.功能介绍和运行结果截图可以在作业里写上。
          3.小说文件用txt形式存储。
          4.最后视功能完整性给分.
'''
import random
import networkx as nx
from imageio import imread
from wordcloud import WordCloud,ImageColorGenerator
import jieba
import jieba.posseg as pseg  # 获取词性
from collections import Counter
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.font_manager import FontProperties

# 去除词性为nr,但不是人名的词
excludes = ['乐章','小姑娘','荣耀','易拉灌','易容术','明白','全明星','蓝溪阁','季后赛','本赛季','砰砰','和兴欣','上赛季','华丽','司仪',
            '西风','连胜','银武','周旋','马踏','安静','大屏幕','和嘉世','修正','了兴欣','卫星','谢谢','呼啸山庄','马甲','明星','英勇',
            '真是太','冷不丁','小精灵','高潮','太久','布阵','祝福','段时间','格斗','高水平','言语','别提','冷笑','晓枪','白痴','赛中',
            '顾忌','越来越近','封锁','小镇','贡献度','高阶','嘉世']

# 解决中文乱码,Python实现matplotlib显示中文的方法
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
font = FontProperties(fname=r"C:\Python\src\python与数据分析\simfang.ttf", size=14)

# 打开文本,生成列表
def open_text(path):
    with open(path,'r',encoding='utf-8') as f:
        return [line.strip() for line in f.readlines()]

# 对句子进行中文分词,词频,词性,并生成去除停用词和字符的小说文本
def seg_depart(path,total):
    # 无符号文本
    outstr = ''
    # 创建一个停用词列表
    stopwords = open_text('.\stopword.txt')
    # 对文档中的每一行进行中文分词
    with open(path,'r',encoding='utf-8') as text:
        for line in text:
            sentence_depart = pseg.cut(line.strip())
            for word,flag in sentence_depart:
                if word not in stopwords and word != '\t' and word != '' and len(word) >=2 and word.isdigit()!=True:
                    total[(word,flag)] = total.get((word,flag),0) + 1
                    outstr += word
    with open('./全职高手分词词频词性.txt','w',encoding='utf-8') as text1:
        for key,value in total.items():
            text1.write('%s,%s,%d\n' %(key[0],key[1],value))
    with open('./纯净版全职高手.txt','w',encoding='utf-8') as text2:
        text2.write(outstr)
    return total

# 人物出场次数排序
def character_sequence(total)
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值