中文自然语言处理--文本分析Python网络图(networkx)

import jieba, networkx as nx, matplotlib.pyplot as plt
import jieba.posseg as jp

# 创建图
# G = nx.Graph()  # 无多重边无向图
G = nx.DiGraph()  # 无多重边有向图
# G = nx.MultiGraph()  # 有多重边无向图
# G = nx.MultiDiGraph()  # 有多重边有向图
# 添加节点
G.add_node('a')
# 添加边
G.add_edge('b', 'c')
# 绘图
nx.draw(G, with_labels=True)
plt.show()

# 无多重边无向图
# 分词
# #调节单个词语的词频,使其能被分出来。
# jieba.suggest_freq(('关系图', '法'), tune=True)
jieba.add_word('关系图法')
jieba.add_word('连线图')
jieba.add_word('关系图')
jieba.add_word('相互关系')
jieba.add_word('E-R')
text = '关系图法,是指用连线图来表示事物相互关系的一种方法。' \
       '最常见的关系图是数据库里的 E-R 图,表示实体、关系、属性三者之间的关系。'
words = jieba.lcut(text)
# 创建空的网络图
G = nx.Graph()
# 添加节点
for word in words:
    G.add_node(word)
# 添加边
for i in range(len(words) - 1):
    G.add_edge(words[i], words[i+1])
# 用黑体显示中文
plt.rcParams['font.sans-serif']=['SimHei']
# 绘图
nx.draw(G, alpha=1, with_labels=True, node_color='white', font_size=12)
plt.show()

# 有多重边有向图
words = jp.lcut(text)
G = nx.MultiDiGraph()  # 有多重边有向图
# 添加节点
for word in words:
    G.add_node(word.flag)
# 添加边
for i in range(len(words) - 1):
    G.add_edge(words[i].flag, words[i+1].flag)
# 绘图
nx.draw(G, alpha=0.8, with_labels=True, node_color='lightgreen', font_size=36, node_size=999, width=2)
plt.show()
'''
布局
参数                  解释
circular_layout    节点在一个圆环上均匀分布
random_layout    节点随机分布
shell_layout    节点在同心圆上分布
spring_layout    用Fruchterman-Reingold算法排列节点
'''
nx.draw(G, pos=nx.shell_layout(G), alpha=0.8, with_labels=True, node_color='lightgreen', font_size=36, node_size=999, width=2)
plt.show()



原文:
https://blog.csdn.net/yellow_python/article/details/83042748

猜你喜欢

转载自blog.csdn.net/fgg1234567890/article/details/114684410
今日推荐