使用python 分析红楼梦里的人物关系并可视化
时间: 2023-09-17 15:08:40 浏览: 125
分析红楼梦里的人物关系可以使用Python中的文本分析工具NLTK和网络分析工具NetworkX。首先,需要将红楼梦文本导入Python中。可以使用Python的文件读取函数打开红楼梦的文本文件,然后读取其中的内容。
```python
with open('hongloumeng.txt', 'r', encoding='utf-8') as f:
text = f.read()
```
接下来,需要对文本进行预处理,例如去除停用词、标点符号和数字等。可以使用NLTK库中的分词器和停用词列表完成这些操作。
```python
import nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
# 下载停用词列表
nltk.download('stopwords')
# 加载停用词列表
stop_words = set(stopwords.words('chinese'))
# 分词
words = word_tokenize(text)
# 去除停用词和标点符号
filtered_words = [word for word in words if word not in stop_words and word.isalpha()]
```
接下来,需要识别人物名称并构建人物关系网络。可以使用正则表达式匹配人物名称,然后使用NetworkX库构建人物关系图。
```python
import re
import networkx as nx
# 构建人物名称列表
names = []
for word in filtered_words:
if re.match('[\u4e00-\u9fa5]{2,}', word):
names.append(word)
# 构建人物关系图
G = nx.Graph()
for i in range(len(names)):
for j in range(i+1, len(names)):
if names[i] in text and names[j] in text and text.index(names[i]) < text.index(names[j]):
if G.has_edge(names[i], names[j]):
G[names[i]][names[j]]['weight'] += 1
else:
G.add_edge(names[i], names[j], weight=1)
```
最后,可以使用NetworkX提供的可视化函数将人物关系图可视化。
```python
import matplotlib.pyplot as plt
# 设置节点大小和标签字体
node_size = [G.degree(n) * 10 for n in G.nodes()]
font_size = 10
# 设置布局算法
pos = nx.spring_layout(G, k=0.5)
# 绘制节点和边
nx.draw_networkx_nodes(G, pos, node_size=node_size, node_color='lightblue')
nx.draw_networkx_edges(G, pos, width=1, alpha=0.5)
# 绘制节点标签
nx.draw_networkx_labels(G, pos, font_size=font_size, font_family='SimHei')
plt.axis('off')
plt.show()
```
运行以上代码,就可以得到红楼梦中人物关系的可视化图形。可以通过调整节点大小、布局算法等参数来改变图形的外观。