Knowledge map of family tree (向氏家谱)

github地址:https://github.com/lonngxiang/Knowledge-map-of-family-tree

本项目主要是把数据整理出实体与关系上传eno4j图数据库做知识图谱

数据源:http://xiangshijiapu.com/Family/F5186/V00251867559/WebSxtList.htm

难点:1、重名处理,特别同一代与不同代 2、关系:父子,兄妹,叔伯三种主要

3、py2neo库连接neo4j版本问题,后续更新neo4j-community-3.5.21 版本没问题

下载数据源

import requests
from lxml import etreeurl = 'http://xiangshijiapu.com/Family/F5186/V00251867559/WebSxtList.htm'
html = requests.get(url)html.encoding = 'gb2312'
html1 = html.text.replace("T","t").replace("R","r").replace("D","d")new_html = etree.HTML(html1)lines = []
for i in range(len(new_html.xpath('//tr'))):
#     if i <5:line = []for j in range(21):aa = new_html.xpath('//tr[{}]//td[{}]/div//text()'.format(i+1,j+1))bb = [ii.replace("\u3000","") for ii in aa]try:if bb[1]:bb = bb[:2]except:passline.append(bb)print(bb)lines.append(line)import numpy as np
# numpy_array = np.array([1,2,3])
np.save('家谱111.npy',lines )numpy_array = np.load('家谱111.npy',allow_pickle=True)

同一代重名整理和父子关系区分


import pandas as pddf66  =  pd.DataFrame(lines)def same1(x,y,z):global iii0global samesprint(x)
#     x =eval(x)
#     print(type(x))iii0+=1if len(x)==2:x[1] = x[1] +"<"+str(y+1)+"世"+">" if x[1] not in sames:sames.append(x[1])else:x[1] = x[1] + "-重名"+str(iii0)sames.append(x[1])print(x)return xreturn str(x)for i in range(21):sames =[]iii0 = 0df66[i].apply(same1,args = (i,1))kkk = []
for j in range(0,21):kk = []for i in range(6708):value = df66.iloc[i+1,j]try:if "━" == value[0]:kk.append(value+[i+1,j])print(value+[i+1,j])if "┳" == value[0]:kk.append(value+[i+1,j])print(value+[i+1,j])continueif "┣" == value[0]:kk.append(value+[i+1,j])print(value+[i+1,j])continueif "┗" == value[0]:kk.append(value+[i+1,j])print(value+[i+1,j])continueexcept:passkkk.append(kk)mmm = []for kk1 in kkk:mma = []mm1 = []
#     print(kk1)for num,i in enumerate(kk1):try:if i[0]=='━':mm={}mm[df66.iloc[i[2],i[3]-1][1]] = i[1]mma.append(mm)if i[0]=='┳':mm1.append(num)if i[0]=='┗':mm1.append(num)except:passfor i in range(0,len(mm1),2):print(mm1[i])
#         print([ i[1]+"<"+str(i[3]+1)+"世"+">" for i in kk1[mm1[i]:mm1[i+1]+1]])mm={}mm[df66.iloc[kk1[mm1[i]:mm1[i+1]+1][0][2],kk1[mm1[i]:mm1[i+1]+1][0][3]-1][1]] = [ i[1] for i in kk1[mm1[i]:mm1[i+1]+1]]mma.append(mm)mmm.append(mma)  

存储图数据库


from py2neo import Graph,Node,Relationshipgraph = Graph("http://localhost:7474",auth = ('neo4j',"neo4j"))#实体
name_set=set()
for i in mmm:if i :for j in i:for ii,jj in j.items():if type(jj)==str:name_set.add(ii)name_set.add(jj)else:name_set.add(ii)for jjj in jj:name_set.add(jjj)for i in name_set:graph.create( Node('Person_name', name=i,))#父子
for i in mmm:if i :for j in i:for ii,jj in j.items():if type(jj)==str:
#                     name_set.add(ii)
#                     name_set.add(jj)node_a = matcher.match("Person_name", name=ii).first()node_b = matcher.match("Person_name", name=jj).first()print(node_a,node_b)graph.create(Relationship(node_b, '父子', node_a))else:
#                     name_set.add(ii)node_a = matcher.match("Person_name", name=ii).first()for jjj in jj:node_b = matcher.match("Person_name", name=jjj).first()graph.create(Relationship(node_b, '父子', node_a))#兄妹
for i in mmm:if i :for j in i:for ii,jj in j.items():if type(jj)==str:
#                     name_set.add(ii)
#                     name_set.add(jj)#                     node_a = matcher.match("Person_name", name=ii).first()
#                     node_b = matcher.match("Person_name", name=jj).first()
#                     print(node_a,node_b)
#                     graph.create(Relationship(node_b, '父子', node_a))passelse:
#                     name_set.add(ii)node_a = matcher.match("Person_name", name=jj[0]).first()for jjj in jj[1:]:node_b = matcher.match("Person_name", name=jjj).first()graph.create(Relationship(node_b, '兄妹', node_a))
MATCH p=()-[*1..20]->() RETURN p LIMIT 1000

match data=(na:Person_name{name:'向智念<17世>'})-[*3..]-(nb:Person_name{name:'向骏<18世>'}) return data

match data=(na:Person_name{name:'向语涵<19世>'})-[*1..20]->(nb:Person_name) return data

另:叔伯关系暂时未加,主要是前后辈关系,大体思路是隔代数据进行关系关联整理:

uncles = []
for i,j in mm.items():
#     print(type(j))if type(j)==list:print(j)for m in j:print(m)if m in mm5.keys():uncle =[]if type(mm5[m])==str:for q in j:if q !=m:uncle.append({mm5[m]:q})else:for n in mm5[m]:for q in j:if q !=m:uncle.append({n:q})uncles.append(uncle)

向氏-姓氏家谱知识图谱构建相关推荐

  1. 知识图谱构建实验笔记(二):知识图谱搭建过程与总结

    文章目录 引言 命名实体识别 1. 数据预处理 2. 构建模型并预测 3. 总结 关系抽取 1. 数据预处理 2. 模型构建并预测 3. 总结 数据入库 load csv方式 neo4j-admin ...

  2. 一站式了解多模态、金融、事理知识图谱构建指南 | AI ProCon 2020

    整理 | 许爱艳 出品 | AI科技大本营(ID:rgznai100) [导读]7 月 3-4 日,由 CSDN 主办的第三届 AI 开发者大会(AI ProCon 2020)在线上举行.本次大会有超 ...

  3. 前沿技术探秘:知识图谱构建流程及方法

    作者 | 郑毅 封图| CSDN│下载于视觉中国 出品 | CSDN云计算(ID:CSDNcloud) 随着AI技术的发展和普及,当今社会已经进入了智能化时代.与以往不同的是,在这一波浪潮中,企业不仅 ...

  4. 肖仰华:知识图谱构建的三要素、三原则和九大策略 | AI ProCon 2019

    演讲嘉宾 | 肖仰华(复旦大学教授.博士生导师,知识工场实验室负责人) 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100) 近两年,知识图谱技术得到了各行各业的关注,无论是企业公 ...

  5. 知识图谱构建技术初探

    自底向上--知识图谱构建技术初探 from: https://www.anquanke.com/post/id/149122 发布时间:2018-06-28 16:00:40 文/阿里安全 染青 &q ...

  6. 知识图谱(知识图谱构建)

    大纲: 1.基于非结构话数据的知识抽取 2.基于结构化数据的知识抽取 3.知识融合与质量评估 基于非结构化数据的知识抽取(比重比较大) lstm学习特征输入crf生成更复杂的特征 关系抽取抽取的是两个 ...

  7. CCKS-2017 行业知识图谱构建与应用-下篇

    http://www.sohu.com/a/192557627_99934777 摘要: 这篇是PPT的下半部分,更加偏重于实战中关键技术的难点剖析. 行业知识图谱关键技术 上篇我们讲行业知识图谱生命 ...

  8. 【采用】百度大规模知识图谱构建及智能应用

    知识图谱在人工智能应用中的重要价值日益突显.基于海量互联网资源,百度构建了超大规模的通用知识图谱,并在智能搜索.智能推荐.智能交互等多项产品中实现了广泛应用.随着文本.语音.视觉等智能技术的不断深入, ...

  9. 报名啦!阿里云智能客服对话式AI算法大赛之知识图谱构建与问答

    看为推动知识图谱与语义计算技术发展及应用落地,阿里云智能客服 CATC(Conversational AI Technology Challenge)大赛系列一"CCKS 2021 知识图谱 ...

最新文章

  1. PyTorch 笔记(01)— Ubuntu 使用 pip 清华源安装 PyTorch
  2. 你的 webpack 也需要休息,让你的 webpack 拒绝 996ICU
  3. mysql安装教程博音网_RTSP视频平台EasyNVR使用mysql数据源启动报错unknow drivermysql优化...
  4. 全球IPv6网络6月6日正式启动
  5. 疯了!装个VS2010居然要75GB的硬盘空间!!
  6. NSIS安装制作程序
  7. Delphi之virtual,dynamic,abstract
  8. 走过20年……你出现在哪里?
  9. payara 创建 集群_在Payara Server和GlassFish中配置密码
  10. python sum函数numpy_如何用numba加速python?
  11. onu光功率多少是正常_ONU、机顶盒、路由器常见网络问题及处理方法
  12. ehcache 在web项目中使用
  13. Java SE 基础:List 集合列表
  14. 内核驱动系列--内核调试方法
  15. 【捡肥皂】,sql挂起清除工具 MS SQL2000挂起工具,无毒绿色,MSSQL手动清除挂起方法
  16. Hi3519AV100 适配IMX347
  17. qq邮箱隐藏代码html,QQ邮箱原来这么好用,4个隐藏设置格调满满
  18. 武汉大学计算机学院李明,第一届全国SLAM技术论坛在浙江大学成功举办
  19. 国密算法Go语言实现(详解)(九) ——SM2(椭圆曲线公钥密码算法)
  20. 《MATLAB图像处理实例详解》:学习第六天(2022.10.09)

热门文章

  1. 西门子1200PLC程序远程上下载,远程在线调试原来是使用了巨控GRM530远程模块
  2. win10 who owns this pc? My organization I own it
  3. vue3 使用recorder-core 实现在线录制音频
  4. 圆通快递查询电子面单接口对接快递鸟api指南
  5. java外文资料_java外文文献(毕业设计).doc
  6. 医学研究中危险因素探索的分析思路
  7. unity使用tiled文件,将数据用unity打开,可以无限tiled地图
  8. java.sql.SQLException: No suitable driver found for jdbc
  9. IE无法查看源文件原因及解决办法
  10. 两岸开源社群面面观(总结篇)