├── README.md ├── index.html └── kgview.py /README.md: -------------------------------------------------------------------------------- 1 | # 知识图谱可视化 2 | 3 | 知识图谱是将复杂的信息通过计算处理成能够结构化表示的知识,所表示的知识可以通过图形绘制而展现出来,为人们的学习提供有价值的参考,为信息的检索提供便利。本文将利用思知知识图谱API接口对知识图谱进行可视化展示。(API请求说明见:https://www.ownthink.com/ ) 4 | 5 | ![head](https://pic1.zhimg.com/80/v2-681d10fdf19e3f249b24bdd7805144e6_hd.jpg) 6 | 7 | ### 环境准备 8 | 9 | Python3安装requests库:pip3 install requests 10 | 11 | 12 | 13 | ### 数据获取方式 14 | 15 | 目前知识图谱有许多开放的API接口,为知识图谱可视化提供了大大的便利,这里以思知API接口对知识图谱可视化进行简单示范。 16 | 17 | 思知请求API: 18 | 19 | ```shell 20 | https://api.ownthink.com/kg/knowledge?entity=刘德华 21 | ``` 22 | 23 | 正确返回的数据格式为: 24 | 25 | ```shell 26 | { 27 | "entity": "entity_name", // 实体名称 28 | "desc": "entity_desc", // 实体描述 29 | "avp": [ // AVP列表 30 | [ 31 | "entity_attribute1", // 属性1 32 | "entity_value1" // 值 33 | ], 34 | [ 35 | "entity_attribute2", // 属性2 36 | "entity_value2" // 值 37 | ] 38 | ], 39 | "tag": [ // 标签列表 40 | "tag1", // 标签1 41 | "tag2" // 标签2 42 | ] 43 | } 44 | ``` 45 | 46 | 利用Python请求api接口,获取可视化数据节点: 47 | 48 | ```python 49 | import os 50 | import sys 51 | import requests 52 | 53 | def KG_View(entity): 54 | url = 'https://api.ownthink.com/kg/knowledge?entity=%s'%entity # 知识图谱API 55 | 56 | sess = requests.get(url) # 请求 57 | text = sess.text # 获取返回的数据 58 | 59 | response = eval(text) # 转为字典类型 60 | knowledge = response['data'] 61 | 62 | nodes = [] 63 | for avp in knowledge['avp']: 64 | if avp[1] == knowledge['entity']: 65 | continue 66 | node = {'source': knowledge['entity'], 'target': avp[1], 'type': "resolved", 'rela':avp[0]} 67 | nodes.append(node) 68 | 69 | for node in nodes: 70 | node = str(node) 71 | node = node.replace("'type'", 'type').replace("'source'", 'source').replace("'target'", 'target') 72 | print(node+',') 73 | 74 | if __name__=='__main__': 75 | KG_View('图灵') 76 | ``` 77 | 78 | 这里将其保存为kgview.py 并运行 79 | 80 | ```shell 81 | [Yener@localhost ~]$ python3 kgview.py 82 | ``` 83 | 84 | 打印出来的节点数据: 85 | 86 | ```python 87 | {type: 'resolved', target: 'Alan Mathison Turing', source: '艾伦·麦席森·图灵', 'rela': '外文名'}, 88 | {type: 'resolved', target: '英国', source: '艾伦·麦席森·图灵', 'rela': '国籍'}, 89 | {type: 'resolved', target: '英国伦敦', source: '艾伦·麦席森·图灵', 'rela': '出生地'}, 90 | {type: 'resolved', target: '1912年6月23日', source: '艾伦·麦席森·图灵', 'rela': '出生日期'}, 91 | {type: 'resolved', target: '1954年6月7日', source: '艾伦·麦席森·图灵', 'rela': '逝世日期'}, 92 | {type: 'resolved', target: '数学家,逻辑学家,密码学家', source: '艾伦·麦席森·图灵', 'rela': '职业'}, 93 | {type: 'resolved', target: '剑桥大学国王学院,普林斯顿大学', source: '艾伦·麦席森·图灵', 'rela': '毕业院校'}, 94 | {type: 'resolved', target: '“计算机科学之父”', source: '艾伦·麦席森·图灵', 'rela': '主要成就'}, 95 | {type: 'resolved', target: '提出“图灵测试”概念', source: '艾伦·麦席森·图灵', 'rela': '主要成就'}, 96 | {type: 'resolved', target: '人工智能', source: '艾伦·麦席森·图灵', 'rela': '主要成就'}, 97 | {type: 'resolved', target: '破解德国的著名密码系统Enigma', source: '艾伦·麦席森·图灵', 'rela': '主要成就'}, 98 | {type: 'resolved', target: '《论数字计算在决断难题中的应用》', source: '艾伦·麦席森·图灵', 'rela': '代表作品'}, 99 | {type: 'resolved', target: '《机器能思考吗?》', source: '艾伦·麦席森·图灵', 'rela': '代表作品'}, 100 | ``` 101 | 102 | 103 | 104 | ### 数据可视化 105 | 106 | 利用d3js实现可视化展示: 107 | 108 | 将前面打印出来的数据复制到以下的html代码的links中,如下所示。html全部代码见文末GitHub,保存后直接用浏览器打开即可对数据进行可视化绘制。 109 | 110 | ```html 111 | 112 | 113 | 114 | 115 | 116 | 6 | 202 | 203 | 204 | -------------------------------------------------------------------------------- /kgview.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | ''' 3 | * Name : kgview.py - 知识图谱api请求 4 | * Author : Yener(Zheng Wenyu) 5 | * Version : 1.0 6 | * Description : 从OwnThink知识图谱中获取数据,利用D3.js实现知识图谱的可视化。 7 | 数据获取https://api.ownthink.com/kg/knowledge?entity=刘德华 8 | ''' 9 | import os 10 | import sys 11 | import requests 12 | 13 | def kg_view(entity): 14 | url = 'https://api.ownthink.com/kg/knowledge?entity=%s'%entity # 知识图谱API 15 | 16 | sess = requests.get(url) # 请求 17 | text = sess.text # 获取返回的数据 18 | 19 | response = eval(text) # 转为字典类型 20 | knowledge = response['data'] 21 | 22 | nodes = [] 23 | for avp in knowledge['avp']: 24 | if avp[1] == knowledge['entity']: 25 | continue 26 | node = {'source': knowledge['entity'], 'target': avp[1], 'type': "resolved", 'rela':avp[0]} 27 | nodes.append(node) 28 | 29 | for node in nodes: 30 | node = str(node) 31 | node = node.replace("'type'", 'type').replace("'source'", 'source').replace("'target'", 'target') 32 | print(node+',') 33 | 34 | if __name__=='__main__': 35 | kg_view('图灵') 36 | 37 | 38 | --------------------------------------------------------------------------------