文本分析

0.效果图


这里有些“二人”、“不会”等词语没用筛选掉,手动筛选即可。

1.整体思路:

  1. 调用的库:jieba,matplotlib,networkx,wordcloud
  2. 分析的文本:三联版连城诀
  3. 需要的工具:Python,小说文本,中文停词文档。

2.具体实现:

1.读取文本:

def read_txt():file=open('连城诀【三联版】.txt','r+',encoding='gbk')txt=file.read()file.close()return txt

2.词性统计(写入文档):

def sda():import jieba.posseg as psgtext=open("连城诀【三联版】.txt", encoding='gbk', errors='ignore').read() seg=psg.cut(text) file=open("词性.txt",'a+')for ele in seg:file.writelines(ele)

3.导入停词文档

def stopwordslist(filepath):stopwords=[line.strip() for line in open(filepath,'r',encoding='utf-8').readlines()]return stopwords

4.分词生成人物(写入文档)

def write_txt():words = jieba.lcut(read_txt())     # 使用精确模式对文本进行分词counts = {}     # 通过键值对的形式存储词语及其出现的次数counts={}stopwords=stopwordslist('stop.txt')for word in words:if len(word) == 1:    # 单个词语不计算在内continueelif word not in stopwords:counts[word] = counts.get(word, 0) + 1    # 遍历所有词语,每出现一次其对应的值加 1items = list(counts.items())items.sort(key=lambda x: x[1], reverse=True)    # 根据词语出现的次数进行从大到小排序f=open("词频统计.txt","w")#写入文件for i in range(len(items)):word, count = items[i]f.writelines("{0:<5}{1:>5}\n".format(word, count))f.close()

5.生成词云:

def creat_wordcloud():f_0=open("词频统计.txt",'r')bg_pic=plt.imread('张国荣.jpg')text=f_0.read()f_0.close()wcloud=wordcloud.WordCloud(font_path=r"C:\Windows\Fonts\simhei.ttf",background_color="white",width=1000,max_words=500,mask=bg_pic,height=860,margin=2,).generate(text)wcloud.to_file("连城诀cloud.jpg")plt.imshow(wcloud)plt.axis('off')plt.show()

6.生成人物关系图:

def creat_relationship():Names=['狄云', '水笙', '万震山', '丁典', ' 戚芳', ' 万圭 ', '花铁干' ,' 血刀老祖 ', '戚长发', ' 言达平' , '宝象',' 汪啸风' ,'水岱']relations={}lst_para=(read_txt()).split('\n')#lst_para是每一段for text in lst_para:for name_0 in Names:if name_0 in text:for name_1 in Names:if name_1 in text and name_0!=name_1 and (name_1,name_0) not in relations:relations[(name_0,name_1)]=relations.get((name_0,name_1),0)+1maxRela=max([v for k,v in relations.items()])relations={k:v /  maxRela for k,v in relations.items()}#return relationsplt.figure(figsize=(15,15))G=nx.Graph()for k,v in relations.items():G.add_edge(k[0],k[1],weight=v)#筛选权重大于0.6的边elarge=[(u,v) for (u,v,d) in G.edges(data=True) if d['weight']>0.6]#筛选权重大于0.3小于0.6的边emidle=[(u,v) for (u,v,d) in G.edges(data=True) if (d['weight']>0.3) & (d['weight']<=0.6)]#筛选权重小于0.3的边esmall=[(u,v) for (u,v,d) in G.edges(data=True) if d['weight']<=0.3]#设置图形布局pos=nx.spring_layout(G)#设置节点样式nx.draw_networkx_nodes(G,pos,alpha=0.8, node_size=1200)#设置大于0.6的边的样式nx.draw_networkx_edges(G,pos,edgelist=elarge, width=2.5,alpha=0.9,edge_color='g')#0.3~0.6nx.draw_networkx_edges(G,pos,edgelist=emidle, width=1.5,alpha=0.6,edge_color='y')#<0.3nx.draw_networkx_edges(G,pos,edgelist=esmall, width=1,alpha=0.4,edge_color='b',style='dashed')nx.draw_networkx_labels(G,pos,font_size=12)plt.axis('off')plt.title("连城诀人物权重图")plt.show()

完整代码:

import jieba
import matplotlib.pyplot as plt
import wordcloud
import networkx as nx
import matplotlib
import jieba.posseg as psg
matplotlib.rcParams['font.sans-serif']=['SimHei']
#读取文本
def read_txt():file=open('连城诀【三联版】.txt','r+',encoding='gbk')txt=file.read()file.close()return txt#词性统计(写入文档)
def sda():import jieba.posseg as psgtext=open("连城诀【三联版】.txt", encoding='gbk', errors='ignore').read() seg=psg.cut(text) file=open("词性.txt",'a+')for ele in seg:file.writelines(ele)#停词文档
def stopwordslist(filepath):stopwords=[line.strip() for line in open(filepath,'r',encoding='utf-8').readlines()]return stopwords#分词生成人物(写入文档)
def write_txt():words = jieba.lcut(read_txt())     # 使用精确模式对文本进行分词counts = {}     # 通过键值对的形式存储词语及其出现的次数counts={}stopwords=stopwordslist('stop.txt')for word in words:if len(word) == 1:    # 单个词语不计算在内continueelif word not in stopwords:counts[word] = counts.get(word, 0) + 1    # 遍历所有词语,每出现一次其对应的值加 1items = list(counts.items())items.sort(key=lambda x: x[1], reverse=True)    # 根据词语出现的次数进行从大到小排序f=open("词频统计.txt","w")#写入文件for i in range(len(items)):word, count = items[i]f.writelines("{0:<5}{1:>5}\n".format(word, count))f.close()#生成词云
def creat_wordcloud():f_0=open("词频统计.txt",'r')bg_pic=plt.imread('张国荣.jpg')text=f_0.read()f_0.close()wcloud=wordcloud.WordCloud(font_path=r"C:\Windows\Fonts\simhei.ttf",background_color="white",width=1000,max_words=500,mask=bg_pic,height=860,margin=2,).generate(text)wcloud.to_file("连城诀cloud.jpg")plt.imshow(wcloud)plt.axis('off')plt.show()#生成人物关系图(全按书上抄的)
def creat_relationship():Names=['狄云', '水笙', '万震山', '丁典', ' 戚芳', ' 万圭 ', '花铁干' ,' 血刀老祖 ', '戚长发', ' 言达平' , '宝象',' 汪啸风' ,'水岱']relations={}lst_para=(read_txt()).split('\n')#lst_para是每一段for text in lst_para:for name_0 in Names:if name_0 in text:for name_1 in Names:if name_1 in text and name_0!=name_1 and (name_1,name_0) not in relations:relations[(name_0,name_1)]=relations.get((name_0,name_1),0)+1maxRela=max([v for k,v in relations.items()])relations={k:v /  maxRela for k,v in relations.items()}#return relationsplt.figure(figsize=(15,15))G=nx.Graph()for k,v in relations.items():G.add_edge(k[0],k[1],weight=v)#筛选权重大于0.6的边elarge=[(u,v) for (u,v,d) in G.edges(data=True) if d['weight']>0.6]#筛选权重大于0.3小于0.6的边emidle=[(u,v) for (u,v,d) in G.edges(data=True) if (d['weight']>0.3) & (d['weight']<=0.6)]#筛选权重小于0.3的边esmall=[(u,v) for (u,v,d) in G.edges(data=True) if d['weight']<=0.3]#设置图形布局pos=nx.spring_layout(G)#设置节点样式nx.draw_networkx_nodes(G,pos,alpha=0.8, node_size=1200)#设置大于0.6的边的样式nx.draw_networkx_edges(G,pos,edgelist=elarge, width=2.5,alpha=0.9,edge_color='g')#0.3~0.6nx.draw_networkx_edges(G,pos,edgelist=emidle, width=1.5,alpha=0.6,edge_color='y')#<0.3nx.draw_networkx_edges(G,pos,edgelist=esmall, width=1,alpha=0.4,edge_color='b',style='dashed')nx.draw_networkx_labels(G,pos,font_size=12)plt.axis('off')plt.title("连城诀人物权重图")plt.show()def main():write_txt()creat_wordcloud()creat_relationship()if __name__ == '__main__':main()

python实现对小说的文本分析(人物关系图,人物词云等)相关推荐

  1. python对三国演义,水浒传,红楼梦人物关系与出场频率进行文本分析,数据可视化,词云分析

    python对文本进行分析和数据可视化,主要运用到了jieba,worldcloudmatplotlib,nxwworkx,pandas库,其他库在代码中给出. 1.首先准备好这三本名著 2.准备好停 ...

  2. 机器学习之---文本分析(jieba分词和词云绘制)

    一.定义: 文本挖掘:从大量文本数据中抽取出有价值的知识,并且利用这些知识重新组织信息的过程. 二.语料库(Corpus) 语料库是我们要分析的所有文档的集合. import os import os ...

  3. 文本分析4-词频统计与词云展示

    笔记来自课程:玩转文本挖掘(51ct0学院),总结整理为个人学习.复习使用,供参考. 对小说第一章进行分词 首先重复之前的操作,读文本数据–章节标识–选取第一章–分词 读取并选取第一章 import ...

  4. Python 三国演义文本可视化(词云,人物关系图,主要人物出场次数,章回字数)

    文章目录 效果展示 介绍 软件架构 使用说明 导入需要的库 执行main.py 这里以三国演义为例 三国演义.txt alice_mask.png 效果展示 介绍 Python读取小说文本,绘制词云图 ...

  5. python绘制社会关系网络图_文本分析之制作网络关系图——Python

    今天给大家带来我一个脚本,用来分析社会网络关系. 这个图我没有用到gephi或者其他的工具,是我用python纯脚本运行出来的.简单的实现了封装,大家有兴趣可以下载下脚本,运行下. 原理知识 我就简单 ...

  6. python代码电影人物关系_Python基于network模块制作电影人物关系图

    Python基于network模块制作电影人物关系图,节点,值为,模块,关系,算法 Python基于network模块制作电影人物关系图 易采站长站,站长之家为您整理了Python基于network模 ...

  7. 用pyecharts制作小说《剑来》的人物关系图(粗)

    先上效果 今天在一如既往地划水时,水友给我推了个小说叫<剑来>.下班回到家,准备下载了看一下,结果一看,光txt都要9MB,以我磨蹭的速度,怕不是明年都看不完.正好最近在做一些NLP相关的 ...

  8. python 课后习题:项目二数据分析之《冰与火之歌》全五卷人物关系图

    其实这种人物关系图网上教程一大堆,我也是照着做的.在这里说一下我出错的地方,以及需要注意的一些东西. 注意: a. 代码缩进,我照着网上抄,网上的缩进不清楚然后我抄错了都没发现,结果出现了人名出现次数 ...

  9. python关系图谱_python 绘制三国人物关系图

    author:weizhendong data:2019.12.19 func:绘制三国演义人物关系图 """ import codecs import jieba.po ...

最新文章

  1. WIN2003 下安装 WinWebMail 3.6.3.1
  2. yolov5训练_YoloV5模型训练实战教程:Kaggle全球小麦检测竞赛
  3. 【转】C++11 并发指南五(std::condition_variable 详解)
  4. Jquery实现简单图片切换
  5. [AngularJS] 理解AngularJS Directive中的Scope
  6. 我用Python帮学校写了一款图书管理系统!教导员居然请我吃饭
  7. Web Application Security 网络应用程序安全 - (二)2010年网络安全威胁排行榜TOP 10...
  8. SpringBoot中的文件读取
  9. PDMS二次开发(八)——向PDMS12.1版本迁移
  10. 互联网共享图书馆+自习室商业计划书
  11. java web 错误处理实例_javaweb异常提示信息统一处理(使用springmvc,附源码)
  12. 【Web动画】SVG 线条动画入门
  13. Python笔记 之 interval模块
  14. ant design of vue中表格列内容过长,需要截取并且鼠标滑过悬浮显示全部内容
  15. redis cli命令详解
  16. android怎么做表格显示数据
  17. 怎么查看电脑内存的型号
  18. 里奥机器人控制app_Mio控制APP-mio机器人控制app1.1.3 安卓版【咪奥机器人控制】-东坡下载...
  19. 第十次作业 - 项目测评(团队)
  20. 键盘--(微机原理实验五)

热门文章

  1. 取消wps右键菜单_iRightMouse for Mac (超级右键鼠标辅助工具)
  2. 用python绘制高光谱图像的光谱曲线图
  3. 从零开始研发GPS接收机连载——13、定位结果分析
  4. Seq2seq - End2end
  5. linux系统删除lammps任务,Linux 的常用命令
  6. 如何理解最大似然估计?
  7. 字符串处理:输入字符串s1和s2以及插入位置f,在字符串s1中的指定位置f处插入字符串s2。如输入BEIJING, 123, 3,则输出:BEI123JING。
  8. 最短路——最短路计数(spfa)
  9. QT开发的pdf阅读器资料
  10. Elasticsearch reindex 和批量写入调优