通过python将excel表导入neo4j

前言

最近在研究知识图谱,想整理出一个基于知识图谱的问答系统
这篇文章就是记录我在将excel导入到neo4j里一些情况
我们需要先下载一些库,以便后续的操作

  • pandas
  • py2neo
    这两个库需要通过pip下载
pip install pandas
pip install py2neo

提取准备好需要导入的excel,我这里是xlsx的工作表
在这里插入图片描述
这里补充Excel数据形式
name、alias、smell、cure和excel的命名,构成了节点
在这里插入图片描述
主体代码如下

def importRelation():
    count=0
    #这里最好使用决定路径
    for root, dirs, files in os.walk(r'F:\知识图谱资料\中医药知识图谱\data'):
        for file in files:
            frame = pandas.read_excel(r"F:/知识图谱资料/中医药知识图谱/data/"+file)
            part = file.split('.')[0]
            for i in frame.index:
            #这里是我工作表的数据,也是我需要建立的节点
                name = frame.get_value(i, 'name')
                alias = frame.get_value(i,'alias')
                smell = frame.get_value(i, 'smell')
                cure = frame.get_value(i, 'cure')
              	career_dict = {'部类': part}
                part_node = Node('部类', name=part)
                g.merge(part_node)
                 # 最后创建关系
                med_node = Node('中药', name=name)  # label为节点标签,name为节点名称,需要注意不要用label='label'否则label会成为节点的的属性
                # '''如果把这个作为中药的属性,而不作为节点属性,不利于后面的问答系统'''
                alias_node=Node('别名',name=alias)
                smell_node=Node('气味品质',name=smell)
                cure_node=Node('主治方法',name=cure)
                # # med_node['别名'] = alias  # 向node添加属性'property'
                # # med_node['气味品质'] = smell
                # # med_node['使用方法'] = cure
                # # g.merge(med_node)  # 将节点加入图数据库与create不同之处在于若节点存在则不创
                relat = Relationship(med_node, '属于', part_node)
                relat_one = Relationship(med_node, '别名是', alias_node)
                relat_two = Relationship(med_node, '气味品质是', smell_node)
                relat_three = Relationship(med_node, '使用方法是', cure_node)
                #g是我的neo4j账号,create可直接建立节点或者关系
                try:
                     g.create(relat_one)
                except:
                     continue
                try:
                     g.create(relat_two)
                except:
                     continue
                try:
                     g.create(relat_three)
                except:
                     continue
                try:
                     g.create(relat)
                except:
                     continue
                count+=1
                print(count)
importRelation()  

在运行之前打开cmd命令行,输入neo4j.bat console
在浏览器中打开网站这个url
在这里插入图片描述
这个小型的知识图谱,一共有5类节点,4条关系,以中草药为中心节点,涉及721个中草药,爬取用时0.5天,数据入库与图谱构建2天,问答系统现在已经用4天,问答系统依然存在问题,慢慢来吧
2019.12.8
参考:https://blog.csdn.net/qq_36618444/article/details/92383074

  • 7
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
要将一个excel导入neo4j,需要按照以下步骤操作: 1. 将excel格转换为CSV格式。 2. 使用Python内置的csv模块或pandas模块读取CSV文件中的数据。 3. 使用py2neo或neo4j-driver模块连接到Neo4j数据库。 4. 创建节点和关系,并将数据导入Neo4j数据库中。 以下是一个基本示例代码,可以将一个包含电影、演员和导演之间关系的CSV文件导入Neo4j数据库中: ```python import csv from py2neo import Graph, Node, Relationship # 连接到Neo4j数据库 graph = Graph("bolt://localhost:7687", auth=("neo4j", "password")) # 打开CSV文件,读取其中的数据 with open('movies.csv', newline='') as csvfile: reader = csv.reader(csvfile, delimiter=',', quotechar='"') for row in reader: # 创建电影节点和演员节点 movie = Node("Movie", title=row[0]) actor = Node("Actor", name=row[1]) director = Node("Director", name=row[2]) # 创建关系 acted_in = Relationship(actor, "ACTED_IN", movie) directed_by = Relationship(director, "DIRECTED_BY", movie) # 将节点和关系添加到Neo4j数据库中 graph.create(movie) graph.create(actor) graph.create(director) graph.create(acted_in) graph.create(directed_by) ``` 在该示例中,我们首先导入了csv模块和py2neo模块(用于连接到Neo4j数据库)。接着,我们使用`open()`函数打开一个名为movies.csv的CSV文件,并使用csv.reader对象读取其中的数据。然后,我们使用`Node()`函数创建电影、演员和导演节点,并使用`Relationship()`函数创建演员和导演与电影之间的关系。最后,我们使用`graph.create()`函数将节点和关系添加到Neo4j数据库中。 注意,在使用py2neo模块时,我们需要先创建一个Graph对象来连接到Neo4j数据库。在Graph()函数中,我们指定了Neo4j的Bolt协议和端口号,以及用户名和密码(这里默认用户名为neo4j,密码为password)。 除了py2neo模块,我们还可以使用neo4j-driver模块来连接到Neo4j数据库。neo4j-driver是Neo4j官方提供的Python驱动程序,更加稳定和可靠。使用neo4j-driver模块的代码示例如下: ```python from neo4j import GraphDatabase # 定义一个连接Neo4j数据库的函数 def connect(uri, user, password): return GraphDatabase.driver(uri, auth=(user, password)) # 连接到Neo4j数据库 driver = connect("bolt://localhost:7687", "neo4j", "password") # 打开CSV文件,读取其中的数据 with open('movies.csv', newline='') as csvfile: reader = csv.reader(csvfile, delimiter=',', quotechar='"') for row in reader: # 开启一个Neo4j事务 with driver.session() as session: # 创建电影节点和演员节点 movie = "CREATE (m:Movie {title: $title})" actor = "CREATE (a:Actor {name: $name})" director = "CREATE (d:Director {name: $name})" # 创建关系 acted_in = "MATCH (a:Actor),(m:Movie) WHERE a.name = $name AND m.title = $title CREATE (a)-[r:ACTED_IN]->(m)" directed_by = "MATCH (d:Director),(m:Movie) WHERE d.name = $name AND m.title = $title CREATE (d)-[r:DIRECTED_BY]->(m)" # 使用Cypher语句执行节点和关系的创建 session.run(movie, title=row[0]) session.run(actor, name=row[1]) session.run(director, name=row[2]) session.run(acted_in, name=row[1], title=row[0]) session.run(directed_by, name=row[2], title=row[0]) ``` 在该示例中,我们首先定义了一个connect()函数来连接到Neo4j数据库。然后,我们使用driver变量连接到Neo4j数据库,打开movies.csv文件并使用csv.reader对象读取其中的数据。在读取每一行数据时,我们使用`session.run()`函数执行Cypher查询语句(类似SQL语句),创建节点和关系。在执行Cypher语句时,我们可以通过传递参数的方式来保证代码的安全性和可读性。 无论是使用py2neo模块还是neo4j-driver模块,导入数据到Neo4j数据库的流程是类似的:打开文件、读取数据、创建节点和关系,并将它们添加到数据库中。在实际应用中,我们可能需要根据具体的场景进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值