需求
根据第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)