返回顶部
首页 > 资讯 > 后端开发 > Python >怎么用Python来理清楚红楼梦里的关系
  • 698
分享到

怎么用Python来理清楚红楼梦里的关系

2023-06-02 03:06:23 698人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

本篇文章为大家展示了怎么用python来理清楚红楼梦里的关系,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。最近把红楼梦又抽空看了一遍,古典中的经典,我真无法用言辞赞美她。今天,想跟大家一起用 Pyt

本篇文章为大家展示了怎么用python来理清楚红楼梦里的关系,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

最近把红楼梦又抽空看了一遍,古典中的经典,我真无法用言辞赞美她。今天,想跟大家一起用 Python 来理一理红楼梦中的的那些关系

不要问我为啥是红楼梦,而不是水浒三国或西游,都是经典,但我个人还是更喜欢偏古典的书,红楼梦也是我多次反复品读的为数不多的小说,对它的感情也是最深的。

好了好了这些都不重要,重要的是我们今天要用Python来理红楼梦的关系!

数据准备

  1. 红楼梦 TXT 文件一份

  2. 金陵十二钗 + 贾宝玉 人物名称列表

  3. 人物列表内容如下:

宝玉 nr

黛玉 nr

宝钗 nr

湘云 nr

凤姐 nr

李纨 nr

元春 nr

迎春 nr

探春 nr

惜春 nr

妙玉 nr

巧姐 nr

秦氏 nr

这份列表,同时也是为了做分词时使用,后面的 nr 就是人名的意思。

数据处理

读取数据并加载词典

 with open("红楼梦.txt", encoding='gb18030') as f: honglou = f.readlines() jieba.load_userdict("renwu_forcut") renwu_data = pd.read_csv("renwu_forcut", header=-1) mylist = [k[0].split(" ")[0] for k in renwu_data.values.tolist()]

这样,我们就把红楼梦读取到了 honglou 这个变量当中,同时也通过 load_userdict 将我们自定义的词典加载到了 jieba 库中。

对文本进行分词处理并提取

tmpNames = [] names = {} relationships = {} for h in honglou: h.replace("贾妃", "元春") h.replace("李宫裁", "李纨") poss = pseg.cut(h) tmpNames.append([]) for w in poss: if w.flag != 'nr' or len(w.Word) != 2 or w.word not in mylist: continue tmpNames[-1].append(w.word) if names.get(w.word) is None: names[w.word] = 0 relationships[w.word] = {} names[w.word] += 1

首先,因为文中"贾妃", “元春”,“李宫裁”, “李纨” 混用严重,所以这里直接做替换处理。

然后使用 jieba 库提供的 pseg 工具来做分词处理,会返回每个分词的词性。

之后做判断,只有符合要求且在我们提供的字典列表里的分词,才会保留。

一个人每出现一次,就会增加一,方便后面画关系图时,人物 node 大小的确定。

对于存在于我们自定义词典的人名,保存到一个临时变量当中 tmpNames。

处理人物关系

 for name in tmpNames: for name1 in name: for name2 in name: if name1 == name2: continue if relationships[name1].get(name2) is None: relationships[name1][name2] = 1 else: relationships[name1][name2] += 1

对于出现在同一个段落中的人物,我们认为他们是关系紧密的,每同时出现一次,关系增加1.

保存到文件

 with open("relationship.csv", "w", encoding='utf-8') as f: f.write("Source,Target,Weight\n") for name, edges in relationships.items(): for v, w in edges.items(): f.write(name + "," + v + "," + str(w) + "\n") with open("NameNode.csv", "w", encoding='utf-8') as f: f.write("ID,Label,Weight\n") for name, times in names.items(): f.write(name + "," + name + "," + str(times) + "\n")
  • 文件1:人物关系表,包含首先出现的人物、之后出现的人物和一同出现次数

  • 文件2:人物比重表,包含该人物总体出现次数,出现次数越多,认为所占比重越大。

制作关系图表

使用 pyecharts 作图

def deal_graph(): relationship_data = pd.read_csv('relationship.csv') namenode_data = pd.read_csv('NameNode.csv') relationship_data_list = relationship_data.values.tolist() namenode_data_list = namenode_data.values.tolist() nodes = [] for node in namenode_data_list: if node[0] == "宝玉": node[2] = node[2]/3 nodes.append({"name": node[0], "symbolSize": node[2]/30}) links = [] for link in relationship_data_list: links.append({"source": link[0], "target": link[1], "value": link[2]}) g = ( Graph() .add("", nodes, links, repulsion=8000) .set_global_opts(title_opts=opts.TitleOpts(title="红楼人物关系")) ) return g
  • 首先把两个文件读取成列表形式

  • 对于“宝玉”,由于其占比过大,如果统一进行缩放,会导致其他人物的 node 过小,展示不美观,所以这里先做了一次缩放

最后得出的关系图

怎么用Python来理清楚红楼梦里的关系

上述内容就是怎么用Python来理清楚红楼梦里的关系,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网Python频道。

--结束END--

本文标题: 怎么用Python来理清楚红楼梦里的关系

本文链接: https://www.lsjlt.com/news/228819.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么用Python来理清楚红楼梦里的关系
    本篇文章为大家展示了怎么用Python来理清楚红楼梦里的关系,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。最近把红楼梦又抽空看了一遍,古典中的经典,我真无法用言辞赞美她。今天,想跟大家一起用 Pyt...
    99+
    2023-06-02
  • 怎么使用Mysql来管理关系型数据库
    这篇文章主要讲解了“怎么使用Mysql来管理关系型数据库”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Mysql来管理关系型数据库”吧! ...
    99+
    2023-04-21
    mysql 数据库
  • 怎么用Python清理收藏夹里已失效的网站
    这篇文章主要介绍“怎么用Python清理收藏夹里已失效的网站”,在日常操作中,相信很多人在怎么用Python清理收藏夹里已失效的网站问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python清理收藏夹里...
    99+
    2023-06-02
  • 怎么用Python快速揭示数据之间的各种关系
    本篇内容介绍了“怎么用Python快速揭示数据之间的各种关系”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!探索性数据分析(EDA)涉及两个基...
    99+
    2023-06-16
  • 轻量应用服务器端口设置在哪里找出来的啊怎么关闭
    轻量应用服务器端口设置可以使用Netscreen或Apache的轻量应用服务器端口设置模块来完成。 首先,你可以打开Netscreen或Apache的轻量应用服务器端口设置模块,选择“Profile”菜单下的“Configuration ...
    99+
    2023-10-26
    端口 哪里找 服务器
  • 轻量应用服务器系统镜像设置在哪找出来的啊怎么关闭
    轻量应用服务器系统镜像是您将服务器上的应用程序部署到云中的一种方法。以下是获取轻量应用服务器系统镜像的步骤: 选择合适的存储设备(如CDN、云存储或虚拟磁带库),以便将其部署到镜像服务器上。 在浏览器中进入轻量应用服务器系统镜像的文件夹...
    99+
    2023-10-26
    镜像 服务器 系统
  • 轻量应用服务器系统镜像设置在哪里打开的呢怎么关闭
    轻量应用服务器系统镜像是轻量级应用服务器系统的一个组成部分,通常用于构建企业级或云应用。为了确保镜像的安全性和完整性,通常建议在系统管理员设置轻量应用服务器系统镜像。以下是通常打开的轻量应用服务器系统镜像的地方: 应用程序配置文件:通常...
    99+
    2023-10-26
    镜像 服务器 系统
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作