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部分改为机器处理

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

 

第一版:

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

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

相关阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: