当前位置:   article > 正文

LTP4+句法依存可视化_ltp依存句法可视化

ltp依存句法可视化

修改自博客

NLP(十二)依存句法分析的可视化及图分析_山阴少年-CSDN博客  依存句法分析的效果虽然没有像分词、NER的效果来的好,但也有其使用价值,在日常的工作中,我们免不了要和其打交道。笔者这几天一直在想如何分析依存句法分析的结果,一个重要的方面便是其可视化和它的图分析。  我们使用的NLP工具为jieba和LTP,其中jieba用于分词,LTP用于词性标注和句法分析,需要事件下载pos.model和parser.model文件。  本文使用的示例句子为:2...https://blog.csdn.net/jclian91/article/details/97695387ltp和networkx都有一些调整

  1. from ltp import LTP
  2. ltp = LTP()
  3. # seg, hidden = ltp.seg(['熊高雄你吃饭了吗'])
  4. # pos = ltp.pos(hidden)
  5. # ner = ltp.ner(hidden)
  6. # srl = ltp.srl(hidden)
  7. # dep = ltp.dep(hidden)
  8. # sdp = ltp.sdp(hidden)
  9. #
  10. # print(seg[0])
  11. # print(pos)
  12. # print(sdp)
  13. # print(dep)
  14. # -*- coding: utf-8 -*-
  15. import os
  16. import jieba
  17. # sent = '2018年7月26日,华为创始人任正非向5G极化码(Polar码)之父埃尔达尔教授举行颁奖仪式,表彰其对于通信领域做出的贡献。'
  18. sent='三商美邦总经理杨棋材,请辞获准。'
  19. jieba.add_word('Polar码')
  20. jieba.add_word('5G极化码')
  21. jieba.add_word('埃尔达尔')
  22. jieba.add_word('之父')
  23. words = list(jieba.cut(sent))
  24. print(words)
  25. seg, hidden = ltp.seg([sent])
  26. print(seg[0])
  27. # print(hidden)
  28. # 词性标注
  29. # pos_model_path = os.path.join(os.path.dirname(__file__), 'data/pos.model')
  30. # postagger = Postagger()
  31. # postagger.load(pos_model_path)
  32. # postags = postagger.postag(words)
  33. postags = ltp.pos(hidden)
  34. ner = ltp.ner(hidden)
  35. dep = ltp.dep(hidden)
  36. rely_id = []
  37. relation = []
  38. for i in range(len(seg[0])):
  39. # print(type(seg[0]),type(postags[0]))
  40. print(seg[0][i], dep[0][i])
  41. rely_id.append(dep[0][i][1])
  42. relation.append(dep[0][i][2])
  43. heads = ['Root' if id == 0 else seg[0][id - 1] for id in rely_id]
  44. print(heads)
  45. # 依存句法分析,ltp4改用 ltp.dep(hidden)
  46. # 生成的数据是元组形式,使用列表读取
  47. # arcs = parser.parse(words, postags)
  48. # rely_id = [arc.head for arc in arcs] # 提取依存父节点id
  49. # relation = [arc.relation for arc in arcs] # 提取依存关系
  50. # heads = ['Root' if id == 0 else words[id-1] for id in rely_id] # 匹配依存父节点词语
  51. #
  52. # for i in range(len(words)):
  53. # print(relation[i] + '(' + words[i] + ', ' + heads[i] + ')')
  54. for i in range(len(seg[0])):
  55. print(relation[i] + '(' + seg[0][i] + ', ' + heads[i] + ')')

这里使用LTP4替换了之前的pyltp,输出依存信息

  1. # 利用networkx绘制句法分析结果
  2. import networkx as nx
  3. import matplotlib.pyplot as plt
  4. from pylab import mpl
  5. mpl.rcParams['font.sans-serif'] = ['Arial Unicode MS'] # 指定默认字体
  6. G = nx.Graph() # 建立无向图G
  7. # 添加节点
  8. for word in seg[0]:
  9. G.add_node(word,desc=word)
  10. G.add_node('Root')
  11. # 添加边
  12. for i in range(len(seg[0])):
  13. G.add_edge(seg[0][i], heads[i])
  14. pos = nx.spring_layout(G)
  15. nx.draw(G, pos)
  16. node_labels = nx.get_node_attributes(G, 'desc')
  17. nx.draw_networkx_labels(G, pos, labels=node_labels,font_size=15, font_family ='YouYuan')
  18. plt.savefig("undirected_graph.png")

这里输出可视化,使用networkx可能会出现hook无法iterable的报错,需要将matplotlab降级到2.1.1。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/348917
推荐阅读
相关标签
  

闽ICP备14008679号