Neo4j
Neo4j是一个高性能的NOSQL图形数据库,它将机构化数据存储在网络上而不是表中
Node节点 获得图数据库中所有实体节点
relationship 增加所有增删改查的边关系节点
NodeMatcher 查找节点
#coding:utf-8
from py2neo import Graph, Node, Relationship,NodeMatcher
import pandas as pd
import re
buwei = ['全身', '男性股沟', '颈部', '眼', '生殖部位', '下肢', '口', '上肢', '腰部', '耳', '四肢', '腹部', '头部', '皮肤', '女性盆骨', '排泄部位', '胸部', '皮肤', '鼻']
keshi = ['眼科', '五官科', '皮肤科', '骨外科', '康复科', '中医骨伤科', '中医科', '耳鼻喉科', '理疗科', '体检科', '皮肤性病科', '泌尿内科', '遗传病科', '肝胆外科', '中西医结合科', '内科', '心胸外科', '肿瘤内科', '营养科', '药品科', '外科', '肛肠科', '神经内科', '烧伤科', '口腔科', '血液科', '小儿内科', '心理科', '神经外科', '泌尿外科', '肾内科', '消化内科', '肿瘤外科', '风湿免疫科', '呼吸内科', '普外科', '内分泌科', '妇产科', '妇科', '男科', '儿科综合', '精神科', '急诊科', '感染科', '其他科室', '传染科', '中医理疗科', '心内科', '小儿外科', '整形美容科', '儿科', '性病科', '产科', '肿瘤科',
'生殖健康', '保健养生', '辅助检查', '重症监护', '其他综合', '中医综合', '不孕不育', '肝病', '减肥']
buwei_show_list = []
keshi_show_list = []
linchuang_show_list = []
# from .get_level import get_level
from zhishi_tupu.get_level import get_level
def create_kg():
graph = Graph("http://localhost:7474", username="neo4j", password='')
matcher = NodeMatcher(graph)
graph.delete_all()
skus = [] # SKU码,
trade_names = [] # 商品名称,
generic_names = [] # 通用名称
specifications = [] # 药物规格,药物规格没有做处理是字符串
first_commoditys = [] # 药物一级分类
second_commoditys = [] # 药物二级分类
third_commoditys = [] # 药物三级分类
OTC_labels = [] # OTC标识分类
medicine_classifications = [] # 药物分类
diseases = [] # 疾病
symptoms = [] # 病症
components = [] # 药物成份
entity_num ={
'商品SKU编码':0,'商品名称':0,'通用名称':0,'规格':0,'商品一级分类':0,'商品二级分类':0,'商品三级分类':0,'OTC标识分类':0,'药物分类':0,'疾病':0,'病症':0,'成份':0,
}
relationgship_num ={
'商品名称是':0,'通用名称是':0,'规格是':0,'包括':0,'治疗':0,'导致':0,'包含':0
}
xunyiwenyao_entity ={
'科室':0,'部位':0,'临床分级':0
}
xunyiwenyao_level, linchuang_medicine_level, graph = get_level()
data = pd.read_excel('测试数据.xlsx')
# 商品SKU编码 商品名称 通用名称 规格 商品一级分类 商品二级分类 商品三级分类 OTC标识 分类 疾病 病症 成份
for i in range(data.shape[0]):
sku = str(data['商品SKU编码'].loc[i])
if sku not in skus:
sku_node = Node('SKU', name=sku)
graph.create(sku_node)
entity_num['商品SKU编码']+=1
skus.append(sku)
else:
sku_node = matcher.match("SKU").where(name=sku).first()
trade_name = str(data['商品名称'].loc[i])
if trade_name not in trade_names:
trade_name_node = Node('商品名称', name=trade_name)
graph.create(trade_name_node)
entity_num['商品名称']+=1
trade_names.append(trade_name)
else:
trade_name_node = matcher.match("商品名称").where(name=trade_name).first()
# for medicine_name in linchuang_medicine_level:
# if trade_name in medicine_name:
# print(trade_name,medicine_name)
# 创建一个relationship 边关系 然后利用graph进行插入
graph.create(Relationship(sku_node, '商品名称是', trade_name_node))
relationgship_num['商品名称是']+=1
generic_name = str(data['通用名称'].loc[i])
if generic_name not in generic_names:
generic_name_node = Node('通用名称', name=generic_name)
graph.create(generic_name_node)
entity_num['通用名称']+=1
generic_names.append(generic_name)
else:
generic_name_node = matcher.match('通用名称').where(name=generic_name).first()
graph.create(Relationship(sku_node, '通用名称是', generic_name_node))
relationgship_num['通用名称是']+=1
specification = str(data['规格'].loc[i])
if specification not in specifications:
specification_node = Node('规格', name=specification)
graph.create(specification_node)
entity_num['规格']+=1
specifications.append(specification)
else:
specification_node = matcher.match('规格').where(name=specification).first()
graph.create(Relationship(sku_node, '规格是', specification_node))
relationgship_num['规格是']+=1
first_commodity = str(data['商品一级分类'].loc[i])
if first_commodity not in first_commoditys:
first_commodity_node = Node('商品一级分类', name=firs