浅谈知识图谱—neo4j

浅谈知识图谱—neo4j

前言

想研究行人重识别了,发现知识图谱的概念在行人重识别里面还是应用挺多的,正好听老师也谈过这个东西。

浅谈知识图谱---neo4j

; 什么是知识图谱?

知识图谱本质上是语义网络(Semantic Network)的知识库。可以简单地把知识图谱理解成 多关系图(Multi-relational Graph)。 在知识图谱里,我们通常用”实体(Entity)”来表达图里的节点、用”关系(Relation)”来表达图里的”边”。实体指的是现实世界中的事物比如人、地名、概念、药物、公司等,关系则用来表达不同实体之间的某种联系。现实世界中的很多场景非常适合用知识图谱来表达。 比如一个社交网络图谱里,我们既可以有” “的实体,也可以包含” 公司“实体。人和人之间的关系可以是” 朋友“,也可以是” 同事“关系。人和公司之间的关系可以是” 现任职“或者” 曾任职“的关系。 类似的,一个风控知识图谱可以包含”电话”、”公司”的实体,电话和电话之间的关系可以是”通话”关系,而且每个公司它也会有固定的电话。

浅谈知识图谱---neo4j

什么是neo4j?

知识图谱是基于图的数据结构,通常用图数据库进行存储,正好neo4j也是这样一个数据特别好的数据库。

neo4j安装

一、安装JDK
Neo4j是基于Java的图形数据库,运行Neo4j需要启动JVM进程,因此必须安装JAVA SE的JDK
二、下载Neo4j
安装完JDK,Neo4j安装文件
地址:https://neo4j.com/download/other-releases/ 选择windows社区版
解压 我的路径:D:\neo4j-community-4.0.3

三、配置环境变量
新建系统变量

浅谈知识图谱---neo4j
再修改变量path,增加%NEO4J_HOME%\bin

四、尝试启动

以管理员身份运行控制台(win+A+X)
在命令窗口切入到主目录%NEO4J_HOME%\bin
执行neo4j.bat console

浅谈知识图谱---neo4j

运行成功的话,此时可以打开浏览器,输入:
http://localhost:7474/browser/
默认密码:neo4j
更改密码。完成。
五、python里面安装
pip install py2neo==5.0b1

; 代码

github

https://github.com/yanjingke/new_learngraf

需求分析

为了方便大家理解,我添加点小例子。本次知识图谱的构建主要是构建购买方和销售方之间的交易构建关系。

具体步骤

1.利用pandas读取xls文件,过滤其他列,保留购买方名称,销售方名称,金额
2.创建neo4j创建购买方,购买方节点
3.创建购买方,购买方节点关系节点

数据xls

浅谈知识图谱---neo4j

; 最终效果

浅谈知识图谱---neo4j
利用pandas读取xls文件,过滤其他列,保留购买方名称,购买方名称,金额
def relation_extraction():
    """联系数据抽取"""

    links_dict = {}
    sell_list = []
    money_list = []
    buy_list = []

    for i in range(0, len(invoice_data)):
        money_list.append(invoice_data[invoice_data.columns[19]][i])
        sell_list.append(invoice_data[invoice_data.columns[10]][i])
        buy_list.append(invoice_data[invoice_data.columns[6]][i])

    sell_list = [str(i) for i in sell_list]
    buy_list = [str(i) for i in buy_list]
    money_list = [str(i) for i in money_list]

    links_dict['buy'] = buy_list
    links_dict['money'] = money_list
    links_dict['sell'] = sell_list

    df_data = pd.DataFrame(links_dict)
    print(df_data)
    return df_data

浅谈知识图谱---neo4j

创建neo4j创建购买方,购买方节点

create_data = DataToNeo4j()

create_data.create_node(data_extraction()[0], data_extraction()[1])
class DataToNeo4j(object):
    """将excel中数据存入neo4j"""

    def __init__(self):
        """建立连接"""
        link = Graph("http://localhost:7474", username="neo4j", password="1234")
        self.graph = link

        self.buy = 'buy'
        self.sell = 'sell'
        self.graph.delete_all()
        self.matcher = NodeMatcher(link)

"""
        node3 = Node('animal' , name = 'cat')
        node4 = Node('animal' , name = 'dog')
        node2 = Node('Person' , name = 'Alice')
        node1 = Node('Person' , name = 'Bob')
        r1 = Relationship(node2 , 'know' , node1)
        r2 = Relationship(node1 , 'know' , node3)
        r3 = Relationship(node2 , 'has' , node3)
        r4 = Relationship(node4 , 'has' , node2)
        self.graph.create(node1)
        self.graph.create(node2)
        self.graph.create(node3)
        self.graph.create(node4)
        self.graph.create(r1)
        self.graph.create(r2)
        self.graph.create(r3)
        self.graph.create(r4)
"""

    def create_node(self, node_buy_key,node_sell_key):
        """建立节点"""
        for name in node_buy_key:
            buy_node = Node(self.buy, name=name)
            self.graph.create(buy_node)
        for name in node_sell_key:
            sell_node = Node(self.sell, name=name)
            self.graph.create(sell_node)

浅谈知识图谱---neo4j
浅谈知识图谱---neo4j

创建购买方,购买方节点关系节点

create_data.create_relation(relation_extraction())
    def create_relation(self, df_data):
        """建立联系"""
        m = 0
        for m in range(0, len(df_data)):
            try:
                print(list(self.matcher.match(self.buy).where("_.name=" + "'" + df_data['buy'][m] + "'")))
                print(list(self.matcher.match(self.sell).where("_.name=" + "'" + df_data['sell'][m] + "'")))
                rel = Relationship(self.matcher.match(self.buy).where("_.name=" + "'" + df_data['buy'][m] + "'").first(),
                                   df_data['money'][m], self.matcher.match(self.sell).where("_.name=" + "'" + df_data['sell'][m] + "'").first())

                self.graph.create(rel)
            except AttributeError as e:
                print(e, m)

浅谈知识图谱---neo4j

Original: https://blog.csdn.net/qq_35914625/article/details/109067656
Author: My小可哥
Title: 浅谈知识图谱—neo4j

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/595454/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球