一、知識(shí)圖譜概念
知識(shí)圖譜的概念是由谷歌公司在2012年5月17日提出的,谷歌公司將以此為基礎(chǔ)構(gòu)建下一代智能化搜索引擎,知識(shí)圖譜技術(shù)創(chuàng)造出一種全新的信息檢索模式,為解決信息檢索問(wèn)題提供了新的思路。本質(zhì)上,知識(shí)圖譜是一種揭示實(shí)體之間關(guān)系的語(yǔ)義網(wǎng)絡(luò),可以對(duì)現(xiàn)實(shí)世界的事物及其相互關(guān)系進(jìn)行形式化地描述?,F(xiàn)在的知識(shí)圖譜已被用來(lái)泛指各種大規(guī)模的知識(shí)庫(kù)。
知識(shí)圖譜,簡(jiǎn)而言之就是圖數(shù)據(jù)庫(kù),既可以存儲(chǔ)信息,又能直觀地表達(dá)兩個(gè)實(shí)體之間的關(guān)系。
知識(shí)圖譜的基本單位就是三元組,即“實(shí)體1”-“關(guān)系”-“實(shí)體2”,本文以藥品的知識(shí)圖譜為例,即“藥品”-“適應(yīng)癥”-“疾病”,如圖所示:
“氯唑沙宗片”-“適應(yīng)癥”-“韌帶扭傷”
下面是實(shí)體標(biāo)簽和關(guān)系標(biāo)簽:
在示例中,實(shí)體類型主要有藥品、疾病、觀測(cè)操作、用藥目的、臨床所見(jiàn)、事件、人群等;關(guān)系類型主要有適應(yīng)癥、適用人群、劑型等。
二、知識(shí)圖譜常用的數(shù)據(jù)庫(kù)
在這里我只給出我知道和常用的,不全請(qǐng)見(jiàn)諒哈,哈哈哈哈哈
(1)Neo4j
Neo4j是一個(gè)流行的圖形數(shù)據(jù)庫(kù),它是開(kāi)源的。最近,Neo4j的社區(qū)版已經(jīng)由遵循AGPL許可協(xié)議轉(zhuǎn)向了遵循GPL許可協(xié)議。盡管如此,Neo4j的企業(yè)版依然使用AGPL許可。Neo4j基于Java實(shí)現(xiàn),兼容ACID特性,也支持其他編程語(yǔ)言,如Ruby和Python。
比較簡(jiǎn)單易學(xué),以上例子就是neo4j的數(shù)據(jù)效果。
官網(wǎng):https://neo4j.com/
下載界面:Neo4j Download Center - Neo4j Graph Data Platform
(2)Nebula Graph
Nebula Graph是一款開(kāi)源的、分布式的、易擴(kuò)展的原生圖數(shù)據(jù)庫(kù),能夠承載數(shù)千億個(gè)點(diǎn)和數(shù)萬(wàn)億條邊的超大規(guī)模數(shù)據(jù)集,并且提供毫秒級(jí)查詢。
優(yōu)點(diǎn)很多,很多大廠都在用,不細(xì)介紹,就是學(xué)起來(lái)比neo4j復(fù)雜一點(diǎn)。
下載安裝包:(有學(xué)習(xí)指南)
Releases · vesoft-inc/nebula-console · GitHub
(3)OrientDB
????OrientDB是兼具文檔數(shù)據(jù)庫(kù)的靈活性和圖形數(shù)據(jù)庫(kù)管理鏈接能力的可深層次擴(kuò)展的文檔-圖形數(shù)據(jù)庫(kù)管理系統(tǒng)??蛇x無(wú)模式、全模式或混合模式下。支持許多高級(jí)特性,諸如ACID事務(wù)、快速索引,原生和SQL查詢功能??梢訨SON格式導(dǎo)入、導(dǎo)出文檔。若不執(zhí)行昂貴的JOIN操作的話,如同關(guān)系數(shù)據(jù)庫(kù)可在幾毫秒內(nèi)可檢索數(shù)以百記的鏈接文檔圖。
????學(xué)習(xí)起來(lái)也比較簡(jiǎn)單,研究生時(shí)候做過(guò)相關(guān)項(xiàng)目,體驗(yàn)一般。
官網(wǎng):https://orientdb.com/
W3C教程:https://www.w3cschool.cn/orientdb/
官方文檔:Home · OrientDB Manual
三、基于neo4j進(jìn)行知識(shí)圖譜的實(shí)例創(chuàng)建
neo4j安裝過(guò)程:略,我安裝的是桌面版的neo4j
(1)數(shù)據(jù)準(zhǔn)備
知識(shí)圖譜的數(shù)據(jù)需要是三元組的形式,如果不是三元組,則需要我們通過(guò)代碼轉(zhuǎn)化為三元組的形式。本文的樣例數(shù)據(jù)是:藥品適應(yīng)癥和禁忌癥數(shù)據(jù),這個(gè)需要小伙伴們自己提前清洗數(shù)據(jù)
?(2)Python 代碼模塊
應(yīng)用的是py2neo包,這個(gè)是第三方開(kāi)發(fā)的實(shí)用性比較高的開(kāi)源模塊,它支持批量導(dǎo)入neo4j數(shù)據(jù)庫(kù)數(shù)據(jù),進(jìn)而快捷地建立圖數(shù)據(jù)庫(kù),并且交互性比較好。用pip語(yǔ)句安裝py2neo庫(kù)即可。
pip install py2neo
pip3 install py2neo
#清華鏡像安裝
pip install --user -i https://pypi.tuna.tsinghua.edu.cn/simple py2neo
首先打開(kāi),neo4j桌面版,創(chuàng)建一個(gè)空如數(shù)據(jù)庫(kù),自己起名(不改名字就是默認(rèn)的)和創(chuàng)建密碼:
?
?運(yùn)行數(shù)據(jù)庫(kù),start:
?打開(kāi)python的IDE,在這里我用的是jupyter notebook,連接數(shù)據(jù)庫(kù),test_drug是我自己的數(shù)據(jù)庫(kù),需要改成你的,密碼也是:
from py2neo import Graph, Node, Relationship, NodeMatcher
from py2neo.matching import RelationshipMatcher
# 連接數(shù)據(jù)庫(kù)
graph = Graph("http://localhost:7474", username="test_drug", password='123456')
創(chuàng)建節(jié)點(diǎn):
p1 = Node("drug", name="伸腿瞪眼丸")
p2 = Node("disease", name="精神恍惚")
graph.create(p1)
graph.create(p2)
創(chuàng)建關(guān)系:
r = Relationship(p1, "特效治療", p2)
graph.create(r)
現(xiàn)在就創(chuàng)建了一個(gè)節(jié)點(diǎn),打開(kāi)neo4j檢查一下:
?(3)批量創(chuàng)建節(jié)點(diǎn)和關(guān)系
需要讀取自己的數(shù)據(jù),并轉(zhuǎn)化為三元組的形式,創(chuàng)建節(jié)點(diǎn)集合,批量導(dǎo)入節(jié)點(diǎn):
# -------------------------------------------------------------------------------
# coding:utf-8
# Description:
# Reference:
# Author: dacongming
# -------------------------------------------------------------------------------
import pandas as pd
from py2neo import Graph, Node, Relationship, NodeMatcher, Subgraph
from py2neo.matching import RelationshipMatcher
#讀取數(shù)據(jù)
df = pd.read_excel('drug.xlsx')
test_graph = Graph('http://localhost:7474',username = 'test_drug',password = '123456')
#創(chuàng)建節(jié)點(diǎn)集合
a = df[['entity','entityTag']]
b = df[['value','valueTag']]
b.columns = ['entity','entityTag']
entity = pd.concat([a,b])
node_lis = []
for i in entity.values:
node = Node(i[1], name = i[0])
node_lis.append(node)
nodes=Subgraph(node_lis)
test_graph.create(nodes)
效果如圖:
?
批量導(dǎo)入關(guān)系:
#創(chuàng)建關(guān)系集合
lis = []
count = 0
for i in df.values:
count +=1
print(count)
c= test_graph.nodes.match(i[1],name=i[0]).first()
d = test_graph.nodes.match(i[4],name=i[3]).first()
rel_a=Relationship(c,i[2],d)
lis.append(rel_a)
#導(dǎo)入關(guān)系
nodes=Subgraph(relationships=lis)
test_graph.create(nodes)
這樣就建立了一個(gè)完整的知識(shí)圖譜,導(dǎo)入了3個(gè)小時(shí)左右終于完成了,如圖所示:
?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-795739.html
總結(jié):在知識(shí)圖譜的建設(shè)過(guò)程中,最復(fù)雜的是數(shù)據(jù)的獲取和處理過(guò)程,數(shù)據(jù)越全面和越標(biāo)準(zhǔn),搭建的知識(shí)圖譜越實(shí)用,其賦能的業(yè)務(wù)場(chǎng)景也越廣泛。在合理用藥方面,知識(shí)圖譜的應(yīng)用有智能問(wèn)診、智能開(kāi)藥、藥品審核等方向,這些都以全面和標(biāo)準(zhǔn)的數(shù)據(jù)為基礎(chǔ),所以,我們所要做的工作還有很多很多!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-795739.html
到了這里,關(guān)于Python neo4j建立知識(shí)圖譜,藥品知識(shí)圖譜,neo4j知識(shí)圖譜,知識(shí)圖譜的建立過(guò)程,智能用藥知識(shí)圖譜,智能問(wèn)診必備知識(shí)圖譜的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!