• 知识图谱和neo4j的基本操作


    一.知识图谱的简介

    1.知识图谱是什么

    知识图谱本质上是语义网络(Semantic Network)的知识库

      可以理解为一个关系图网络。

    2.什么是图

    图(Graph)是由节点(Vertex)和边(Edge)来构成,多关系图一般包含多种类型的节点和多种类型的边。

    3.什么是Schema

    限定待加入知识图谱数据的格式;相当于某个领域内的数据模型,包含了该领域内有意义的概念类型以及这些类型的属性

    二.知识图谱的构建

    1.数据来源

    结构化数据和非结构化数据,前者可能是本地数据库中的信息,后者主要是在网页上抓取的信息。

    2.涉及的技术

    命名实体识别,关系抽取等自然语言处理技术。

    三.知识图谱的存储

    • 一种是基于RDF的存储;
    • 另一种是基于图数据库的存储。

      RDF一个重要的设计原则是数据的易发布以及共享,图数据库则把重点放在了高效的图查询和搜索上。其次,RDF以三元组的方式来存储数据而且不包含属性信息,但图数据库一般以属性图为基本的表示形式,所以实体和关系可以包含属性,这就意味着更容易表达现实的业务场景。其中Neo4j系统目前仍是使用率最高的图数据库,它拥有活跃的社区,而且系统本身的查询效率高,但唯一的不足就是不支持准分布式。

     

     四.Neo4j的介绍

    Neo4j为常用的图数据库之一。

      Neo4j的安装很简单,先到官方网站Neo4j下载,下载完压缩包之后直接解压缩,然后配置好环境变量,可以按照这篇博客的方法https://www.cnblogs.com/jpfss/p/10874303.html。

      之后我们在浏览器内输入http://127.0.0.1:7474/browser/就进入了Neo4j的界面。

     五.Neo4j的基本操作

    //删库
    MATCH (n) DETACH DELETE n
    //创建人物结点
    CREATE (n:Person {name:'John'}) RETURN n
    //创建地区结点
     CREATE (n:Location {city:'Miami', state:'FL'})
    //创建朋友关系
    MATCH (a:Person {name:'Liz'}), 
            (b:Person {name:'Mike'}) 
      MERGE (a)-[:FRIENDS]->(b)
    //创建出生地关系
     MATCH (a:Person {name:'John'}), (b:Location {city:'Boston'}) MERGE (a)-[:BORN_IN {year:1978}]->(b);
      MATCH (a:Person {name:'Liz'}), (b:Location {city:'Boston'}) MERGE (a)-[:BORN_IN {year:1981}]->(b);
    //按照出生地查询
    MATCH (a:Person)-[:BORN_IN]->(b:Location {city:'Boston'}) RETURN a,b
    //查询所有对外有关系的结点和类型
     MATCH (a)-[r]->() RETURN a.name, type(r)
    //查询所有婚姻关系的结点
      MATCH (n)-[:MARRIED]-() RETURN n
    //查找某人朋友的朋友
    MATCH (a:Person {name:'Mike'})-[r1:FRIENDS]-()-[r2:FRIENDS]-(friend_of_a_friend) RETURN friend_of_a_friend.name AS fofName
    //增加或者修改结点属性
    MATCH (a:Person {name:'Liz'}) SET a.age=34
    //删除结点属性
      MATCH (a:Person {name:'Mike'}) SET a.test='test';
      MATCH (a:Person {name:'Mike'}) REMOVE a.test;

    六.在python中操纵neo4j

    1.neo4j模块

      # step 1:导入 Neo4j 驱动包
      from neo4j import GraphDatabase
      # step 2:连接 Neo4j 图数据库
      driver = GraphDatabase.driver("bolt://localhost:7687", auth=("neo4j", "password"))
      # 添加 关系 函数
      def add_friend(tx, name, friend_name):
          tx.run("MERGE (a:Person {name: $name}) "
                "MERGE (a)-[:KNOWS]->(friend:Person {name: $friend_name})",
                name=name, friend_name=friend_name)
      # 定义 关系函数
      def print_friends(tx, name):
          for record in tx.run("MATCH (a:Person)-[:KNOWS]->(friend) WHERE a.name = $name "
                              "RETURN friend.name ORDER BY friend.name", name=name):
              print(record["friend.name"])
      # step 3:运行
      with driver.session() as session:
          session.write_transaction(add_friend, "Arthur", "Guinevere")
          session.write_transaction(add_friend, "Arthur", "Lancelot")
          session.write_transaction(add_friend, "Arthur", "Merlin")
          session.read_transaction(print_friends, "Arthur")

     注意这里的密码要改成自己的,否则无法正常登陆。运行完上面的脚本后,就出现了如下的结点和边:

     2.py2neo模块

    # step 1:导包
    from py2neo import Graph, Node, Relationship
    
    # step 2:构建图
    g = Graph("http://localhost:7474",auth=("neo4j","password"))
    # step 3:创建节点
    tx = g.begin()
    a = Node("Person", name="Alice")
    tx.create(a)
    b = Node("Person", name="Bob")
    # step 4:创建边
    ab = Relationship(a, "KNOWS", b)
    # step 5:运行
    tx.create(ab)
    tx.commit()

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    Django和flask中使用原生SQL方法
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in
    Docker常用命令
    MySQL的压力测试
    使用docker-compose快速搭建PHP开发环境
    Docke如何配置Nginx和PHP
    Docker容器的重命名和自动重启
    docker部署MySQL、Redis和Nginx
    docker-compose的安装卸载以及如何使用
    docker如何制作自己的镜像
  • 原文地址:https://www.cnblogs.com/upuphe/p/14265131.html
Copyright © 2020-2023  润新知