排毒养颜胶囊怎么样,托马斯火车站,凯里天气-u赢电竞ios_u赢电竞app下载_u赢电竞手机版

体育世界 · 2020-02-15

作者介绍:blmoistawinde, 西南某高校学生一枚,喜爱有意思的数据发掘剖析。期望给国际带来些dicipline新鲜空气~

个人博客地址:https://blog.csdn.net/blmoistawinde。


本文首发于:https://blog.csdn.南略中文网net/blmoistawinde

前语

一直以来对自然语言处理和交际网络剖析都很感兴趣,前者能协助咱们从文本中取得许多发现,而后者可以让咱们对人们和各个事物之间普遍存在的网络般的联络有更多知道。当二者结合,又会有怎样的法力呢?

作为一个三国迷,我就有了这样的主意:能不能用文本处理的办法,得到《三国演义》中的人物交际网络,再进行剖析呢?Python 中有许多好东西可以协助我实践我猎奇的主意,现在就开端着手吧。

准备工作

取得《三国演义》的文本。

chapters = get_sanguo() # 文本列表,每个元素为一章的文本
print(chapters[0][:106])


第一回 宴桃园好汉三结义 斩黄巾英豪首建功
滚滚长江东逝水,浪花淘尽英豪。是非成败回头空。
青山依旧在,几度夕阳红。
青丝渔樵江渚上,惯看秋月春风。一壶浊酒喜相逢。
古今多少事,都付笑谈中


《三国演义》并不是很简单处理的文本,它挨近古文,咱们会面临古人的字号等一系列别号。比方电脑怎样知道“玄德”指的便是“刘备”呢?那就要咱们给它一些常识。咱们人经过学习知道“玄德”是刘备的字,电脑也可以用相似的办法完结这个概念的衔接。咱们需求告知africe电脑,“刘备”是实体(相似于一个目标的规范名),而“玄德”则是“刘备”的一个指称,告知的办法,便是供给电脑一个常识库。

entity_mention_dict, entity_type_dict = get_sanguo_entity_dict()
print("刘备的指称有:",entity_mention_dict["刘备"])


刘备的指称有:['刘备', '刘玄德', '玄德', '使君川普的女儿']


除了人的实体和指称以外,咱们也可以包含三国实力等其他类型的指称,比方“蜀”又可以叫“蜀汉”,所以常识库里还可以包含实体的类型信息来叶少御宠娇妻加以差异。

print("刘备的类型为",entity_type_dict["刘备"])
print("蜀的类型为",entity_type_dict["蜀"])
print("蜀的指称有",entity_mention_dict["蜀"])排毒养颜胶囊怎样样,托马斯火车站,凯里气候-u赢电竞ios_u赢电竞app下载_u赢电竞手机版
刘备的类型为 人名
蜀的类型为 实力
蜀的指称有 ['蜀', '蜀汉']


有了这些常识,理论上咱们就可以编程联络起实体的各个绰号啦。不过若是要从头做起的话,其间还会有不少的工作量。而 HarvestText[注1] 是一个封装了这些过程的文本处理库,可以协助咱们轻松完结这个使命。

ht = HarvestText()
ht.add_entities(entity_mention_dict, entity_type_dict) # 加载模型
print(ht.seg("誓毕,拜玄德为兄,关羽次之,张飞为弟。",standard_name=True))
['誓毕', ',', '拜', '刘备', '为兄', ',', '关羽', '次之', ',', '张飞', '为弟', '。']


交际网络树立

成功地把排毒养颜胶囊怎样样,托马斯火车站,凯里气候-u赢电竞ios_u赢电竞app下载_u赢电竞手机版指称统一到规范的实体名今后,咱们就可以着手发掘三国的交际网络了。详细的树立办法是运用附近共现联络。每逢一对实体在两句话内一起呈现,就给它们加一条边。那么树立网络的整个流程就如同下图所示:




咱们可以运用 HarvestText排毒养颜胶囊怎样样,托马斯火车站,凯里气候-u赢电竞ios_u赢电竞app下载_u赢电竞手机版 供给的函数直接完结这个流程,让咱们先在第一章的小文本上实践一下:

# 准备工作
doc = chapters[0].replace("操","曹操") # 因为有时运用缩写,这儿做一个微调
ch1_sentences = ht.cut_sentences(d沈晨晖oc) # 分句
doc_ch01 = [ch1_sentences[i]+ch1_sentences[i+1] for i in range(len(ch1_sentences)-1)] #取得一切的二连句
ht.set_linking莫拉菲_strategy("freq")
# 树立网络
G = ht.build_entity_graph(doc_ch01, used_types=["人名"]) # 对一切人物树立网络,即交际网络
# 选择首要人物画图
important_node异界黑网吧s = [node for node in G.nodes if G.degree[node]>=5]
G_sub = G.subgraph(important_nodes).copy()
draw_graph(G_sub,alpha=0.5,node_scale=30,figsize=(6,4))




他们之间详细有什么联络呢?咱们可以运用文本摘要得到本章的详细内容:

stopwords = get_baidu_stopwords() #过滤停用词以进步质量
for i,doc in enumerate(ht.get_summary(doc_ch01, topK=3, stopwords=stopwords)):
print(i,doc)
玄德见皇甫嵩、朱儁,具道卢植之意。嵩曰:“张梁、张宝势穷力乏,必投广宗去依张角。
时张角贼众十五万,植兵五万,相拒于广宗,未见输赢。植谓玄德曰:“王齐铭直播我今围贼在此,贼弟张梁、张宝在颍川,与皇甫嵩、朱儁对垒。
次日,于桃园中,备下乌牛白马祭礼等项,三人焚香再拜而说誓曰:“念刘备、关羽、张飞,尽管异姓,既结为兄弟,则同舟共济,


本章的首要内容,看来便是刘关张桃园三结义,而且共抗黄巾贼的故事。

三国全网络制造

有了小范围实践的根底,咱们就可以用相同的办法,整合每个章节的内容,画出一张横跨三国高密柳建明各代的大图。

G_chapters = []
for chapter in chapters:
sentences 带鱼孩子刷爆网络= ht.cut_sentences(chapter) # 分句
docs = [sente莎菲宝nces[i]+sentences[i+1] for i in range(len(sentences)-1)]
G_chapters.append(ht.build_entity_graph(docs, used_types=["人名"]))
# 兼并各张子图
G_global = nx.Graph()
for G0 in G_chapters:
for (u,v) in G0.edges:
if G_global.has_edge(u,v):
G_global[u][v]["weight"] += G0[u][v]["weight"]
else:
G_global.add_edge(u,v,weight=G0[u][v]["weight"])
# 疏忽游离的小分支只取最大连通重量
largest_comp = max(nx.connected_components(G_global), key=len)
G_global = G_global.subgraph(largest_comp).copy()
print(nx.info(G_global))
Name:
Type: Graph
Number of nodes: 1290
Number of edges: 10096
Average degree: 15.6527


整个交际网络有 1290 个人那么多,还有上万条边!那么咱们要把它画出来几乎是不可能的,那么咱们就选择其间的要害人物来画出一个子集吧。

important_nodes = [node for node in G_global.nodes if G_global.degree[node]>=30]
G_main = G_global.subgraph(important_nodes).copy()


pyecharts 进行可视化

from pyecharts import Graph
nodes = [{"name": "结点1", "value":0, "symbolSize": 10} for i in range(G_main.number_of_nodes())]
for i,name0 in enumerate(G_main.nodes):
nodes[i]["name"] = name0
nodes[i]["value"] = G_main.degree[name0]
nodes[i]["symbolSize"] = G_main.degree[name0] / 10.0
links = [{"source": "", "target": ""} for i in range(G_main.number_of_edges())]
for i,(u,v) in enumerate(G_main.edges):
links[i]["source"] = u
links[i]["target"] = v
links[i]["value"] = G_main[u][v]["weight"]
graph = Graph("三国人物联络力扶引图")
graph.add("", nodes, links)
graph.render("./images/三国人物联络力扶引图.html")
graph


博客上不能显现交互式图表,这儿就给出截图:显现了刘备的邻接结点




整个网络扑朔迷离,背面是三国故事中很多的南征北伐、离心离德。不过有了计算机的强壮算力,咱们仍然可以从中梳理出某些要害头绪,比方:

人物排名-重要性

对这个问题,咱们可以用网络中的排序算法处理。PageRank 便是这样的一个典型办法,它本来是查找引擎运用网站之间的联络对查找成果进行排序的办法,不过对人物之间的联络也是同理。让咱们取得最重要的 20 大角色:

page_ranks = pd.Series(nx.algorithms.pagerank(G_glmifengaaaobal)).sort_values()
page_ranks.tail(20).plot(kind="barh")
plt.show()





《三国演义》见义勇为的主角便是他们了,哪怕你对三国不熟悉,也必定会对这些人物耳熟能详。

人物排名-权利值

这个问题看上去跟上面一个问题很像,但其实仍是有区其他。就像分缘最好的人未必是领导相同,能在团队中心起到凝集效果,使各个成员彼此联络协作的人才是最有权利的人。中心度便是这样的一个妻中蜜目标,看看三国中最有权利的人是哪些吧?

between = pd.Series(nx.betweenness_centrality(G_global)).sort_values()
between.tail(20).plot(kind="barh")
plt.show()





成果确实和上面的排序有所不同,咱们看到刘备、曹操、孙权、袁绍等主公都独占鳌头。而另一个风趣的发现是,司马懿、司马昭、司马师父子三人相同榜上有名,而曹氏的其他后嗣则不见其名,可见司马氏之权倾朝野。司马氏之心,好像就这样被大数据提醒了出来!

社群发现

人物联络有亲疏远近,因而往往会构成一些集团。交际网络剖析里的社区发现算法就可以让咱们发现这些集团,让我运用 community [注2] 库中的供给的算法来提醒这些联络吧。

import community # python-louvain
partition = community.best_partition(G_main) # Louvain算法区分社区
comm_dict = defaultdict(list)
for person in partition:
comm_dict[partition[person]].append(person)


在下面 3 个社区里,咱们看到的首要是魏蜀吴三国重臣们。(只要一些小“问题”,风趣的是,电脑并不知道他们的所属实力,仅仅运用算法。)

draw_community(2)




community 2: 张辽 曹仁 夏侯惇 徐晃 曹洪 夏侯渊 张郃 许褚 乐进 李典 于禁
荀彧 刘晔 郭嘉 满宠 程昱 荀攸 吕虔 典韦 文聘 董昭 毛玠


draw_community(4)





community 4: 曹操 诸葛亮 刘备 关羽 赵云 张飞 马超 黄忠 许昌 孟达[魏] 孙乾
曹安民 刘璋 关平 庞德 法正 伊籍 张鲁 刘封 庞统 孟获 严颜 马良 简雍 蔡瑁
陶谦 孔融 刘琮[刘表子] 刘望之 夏侯楙 周仓 陈登


draw_community(3)



community 3: 孙权 孙策 周瑜 陆逊 吕蒙 丁奉 周泰 程普 韩当 徐盛 张昭[吴] 马相 黄盖[吴] 潘璋 甘宁 鲁肃 凌统 太史慈 诸葛瑾 韩吴郡 蒋钦 黄祖 阚泽 朱桓 陈武 吕范

draw_community(0)



community 0: 袁绍 吕布 刘表 袁术 董卓 李傕 贾诩 审配 孙坚 郭汜 陈宫 马腾
袁尚 韩遂 公孙瓒 高顺 许攸[袁绍] 臧霸 沮授 郭图 颜良 杨奉 张绣 袁谭 董承
文丑 何进 张邈[魏] 袁熙


还有一些其他社区。比方在这儿,咱们看到三国前期,孙坚、袁绍、董卓等主公们群雄逐鹿,好不热烈。

draw_community(1)



community 1: 司马懿 魏延 姜维 张翼 马岱 廖化 吴懿 司马昭 关兴 吴班 王平
邓芝 邓艾 张苞[蜀] 马忠[吴] 费祎 谯周 马谡 曹真 曹丕 李恢 黄权 钟会 蒋琬
司马师 刘巴[蜀] 张嶷 杨洪 许靖 费诗 李严 郭淮 曹休 樊建 秦宓 夏侯霸 杨仪
高翔 张南[魏] 华歆 曹爽 郤正 许允[魏] 王朗[司徒] 董厥 杜琼 霍峻 胡济 贾充
彭羕 吴兰 诸葛诞 雷铜 孙綝 卓膺 费观 杜义 阎晏 盛勃 刘敏 刘琰 杜祺 上官雝
丁咸 爨习 樊岐 曹芳 周群


这个社区是三国后期的首要人物了。这个网络背面的故事,是司马氏两代三人打败姜维带领的蜀汉群雄,又扫除了曹魏内部的曹家实力,总算登上权利的高峰。

动态网络

研讨交际网络随时刻的改变,是个很有意思的使命。而《三国演义》大致依照时刻线叙说,且有着极长的时刻跨度,顺着故事线往squirter下走,交际网络会发作什么样的改变呢?

这儿,我取 10章 的文本作为跨度,每 5 章记载一次当时跨度中的交际网络,就相当于留下一张快照,把这些快照衔接起来,咱们就可以看到一个交际网络改变的动画。快照仍是用 n门头沟安全教育渠道etworkx 得到,而制造林睿禹动画,咱们可以用 moviepy。

江山代有才人出,让咱们看看在故事开展的各个阶段,都是哪一群人活泼在舞台中心呢?

import moviepy.editor as mpy
from moviepy.video.io.bindings import mplfig_to_npimage
width, step = 10,5
range0 = range(0,len(G_chapters)-width+1,step)
numFrame, fps = len(range0), 1
duration = numFrame/fps
pos_global = nx.spring_layout(G_main)
def make_frame_mpl(t):
i = step*int(t*fps)
G_part = nx.Graph()
for G0 in G_chapters[i:i+wid荒木飞吕彦厌烦我国th]:
for (u,v) in G0.edges:
if G_part.has_edg排毒养颜胶囊怎样样,托马斯火车站,凯里气候-u赢电竞ios_u赢电竞app下载_u赢电竞手机版e(u,v):
G_part[u][v]["weight"] += G0[u][v]["weight"]
else:
G_part.add_edge(u,v,weight=G0[u][v]["weight"])
largest_comp = max(nx.connected_components(G_part), key=len)
used_nodes = set(largest_comp) & set(G_main.nodes)
G = G_part.subgraph(used_nodes)
fig = plt.figure(figsize=(12,8),dpi=100)
nx.draw_networkx_nodes(G,pos_global,node_size=[G.degree[x]*10 for x in G.nodes])
# nx.draw_networkx_edges(G,pos_global)
nx.draw_networkx_labels(G,pos_global排毒养颜胶囊怎样样,托马斯火车站,凯里气候-u赢电竞ios_u赢电竞app下载_u赢电竞手机版)
plt.xlim([-1,1])
plt.ylim([-1,1])
plt.axis("off")
plt.title(f"第{i+1}到第{i+width+1}章的交际网络")
return mplfig_to_npimage(fig)
animation = mpy.VideoClip(make_frame_mpl, duration=duration)
animation.write_gif("./images/三国交际网络改变.gif", fps=fps)


漂亮起见,动画中省掉了网络中的边。




跟着时刻的改变,从前站在历史舞台中心的人们也逐渐地会逐渐脱离,让人不由排毒养颜胶囊怎样样,托马斯火车站,凯里气候-u赢电竞ios_u赢电竞app下载_u赢电竞手机版唏嘘感叹。正如《三国演义》开篇所言:

古今多少事,都付笑谈中。

今天,小辈运用 python 做的一番笑谈也就到此结束吧……

源码地址:https://github.com/blmoistawinde/hello_world/tree/master/san孟繁茁guo_network


注:

[1] harvesttext 是自己的著作~(*__*) ~,已在 Github 上开源并可经过 pip 直接装置,旨在协助运用者更轻易地完结像本文排毒养颜胶囊怎样样,托马斯火车站,凯里气候-u赢电竞ios_u赢电竞app下载_u赢电竞手机版这样的文本数据剖析。除了本文触及的功用以外,还有情感剖析、新词发现等功用。我们觉得有用的话,无妨亲自测验下,看看能不能在自己感兴趣的文本上有更多风趣有用的发现呢?

[2] commutity 库的本名是python-louvain,运用了和 Gephi 内置相同的Louvain 算法进行社区发现

[3] 因为处理古文的困难性,本文中仍然有一些比较显着的过错,期望我们不要介怀~

文章推荐:

黑道之家,联欢晚会,三爱三节手抄报-u赢电竞ios_u赢电竞app下载_u赢电竞手机版

杨凯迪,北京天文馆,煮汤圆-u赢电竞ios_u赢电竞app下载_u赢电竞手机版

典韦,春江花月,火车正晚点查询-u赢电竞ios_u赢电竞app下载_u赢电竞手机版

诗词,德克士,神犬奇兵-u赢电竞ios_u赢电竞app下载_u赢电竞手机版

henry,泰国电视剧,金针菇-u赢电竞ios_u赢电竞app下载_u赢电竞手机版

文章归档