创建知识图谱 第二版

创建知识图谱 第二版,第1张

import pandas as pd
from py2neo import Graph, Node, Relationship
from py2neo import Graph, NodeMatcher, Node, Relationship, RelationshipMatcher


# 字段映射字典
mapping_dict = {"标题": "title",
                "专利号": "id",
                "申请时间": "time",
                "申请人": "shenqing",
                "地址": "dizhi",
                "第一发明人": "famingA",
                "第二发明人": "famingB",
                "第三发明人": "famingC",
                "主题": "zhuti",
                "第一主要人员": "peopleA",
                "第二主要人员": "peopleB",
                "第三主要人员": "peopleC"}
# 读取文件
storage_df = pd.read_csv('zhuanli.csv',encoding='utf-8')
# 获取列标签
columns_list = storage_df.columns.tolist()
# 获取数据条数
nums = len(storage_df['title'])
# 删除title列标签
columns_list.remove('title')
columns_list.remove('shenqing')
# 逆转映射字典
new_dic = dict(zip(mapping_dict.values(), mapping_dict.keys()))
# 连接数据库,输入个人配置
graph = Graph("http://localhost:7474/", username='neo4j', password='CHENRJ122223',run="testpy6")

# 清空全部数据
graph.delete_all()
# 开启一个新的事务
graph.begin()
for i in range(nums):
    data_dict = {}
    title = storage_df['title'][i]
    for columns in columns_list:
        if str(storage_df[columns][i]) != 'nan':
            data_dict[columns] = storage_df[columns][i]
    shenqing = storage_df['shenqing'][i]
    for columns in columns_list:
        if str(storage_df[columns][i]) != 'nan':
            data_dict[columns] = storage_df[columns][i]

    # 创建事件节点(主节点),节点属性
    node1 = Node("patent", name=title, **data_dict)
    graph.merge(node1, 'patent', 'name')
    node3 = Node("company", name=shenqing)
    graph.merge(node3, 'company', 'name')
    rel = Relationship(node1,'申请人', node3)
    graph.merge(rel)
    # 删除id列
    data_dict.pop('id')
    # 创建关系与副节点
    for key, value in data_dict.items():
        # 创建副节点

        if key=='peopleA' or key=='peopleB' or key=='peopleC' or key=='dizhi':
            # 创建关系

            node2 = Node(key, name=value)
            graph.merge(node2, key, 'name')
            rel = Relationship(node3, new_dic[key], node2, type=key)
            graph.merge(rel)
        else:
            node2 = Node(key, name=value)
            graph.merge(node2, key, 'name')
            rel = Relationship(node1, new_dic[key], node2, type=key)
            graph.merge(rel)

数据:

 第二版 图:根据华为公司为中心

1、把发明人拆分开(只取前三位作者),每个人是一个节点,第一版中未处理此部分导致很多节点中有多个人物

2、把申请时间(途中蓝色节点)和申请人地址(图中浅棕色节点)单独列为一个节点,不再只作为属性在专利节点内展示,地址与申请人相连

3、添加申请人——(公司主要负责人、高校教授)此关系,图中表示为浅粉色节点,仅收录排名前三位的人员

4、把第一版中人工处理import部分改为机器处理

绿色:主题   黄色:专利  蓝色:申请时间   棕色:发明人  深粉色:申请人   浅粉色:公司人员、教授   浅棕色:申请人地址

 

第一版:

紫色:主题  绿色:专利  橘色:申请人  棕色:发明人

 主题——专利     专利——申请人   专利——发明人

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/571313.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存