知识图谱(Knowledge Graph)- Neo4j 5.10.0 使用 - Python 操作

知识,图谱,knowledge,graph,neo4j,使用,python,操作 · 浏览次数 : 248

小编点评

## Summary of the provided content: This content describes a simple web application built using Neo4j and Flask microframework. **Key points:** * **Purpose:** Provides a list search, detailed view, and graph visualization for a movie dataset. * **Frameworks:** Flask (Web framework) and FastAPI (async framework). * **Database:** Neo4j, a graph database. * **Connectivity:** Uses Neo4j Python Driver for Cypher for data access. * **Deployment:** Can be run in both sync and async mode. **Key functionalities:** * **Search:** Allows users to search for movies by name. * **Detail view:** Shows detailed information about a movie, including id, name, generation, and number of votes. * **Visualization:** Uses Graphviz to create visual representations of the movie network. **Additional details:** * The application uses Neo4j Driver Python for Cypher for data access. * The application supports both sync and async deployment. * The application uses Flask for the web framework and FastAPI for the async framework. * The application uses the `literal_string` type for search queries to prevent cypher injection. * The application logs information for monitoring and debugging purposes. **Overall, this application provides a complete solution for movie information and visualization using Neo4j.**

正文

数据基于: 知识图谱(Knowledge Graph)- Neo4j 5.10.0 使用 - CQL - 太极拳传承谱系表
这是一个非常简单的web应用程序,它使用我们的Movie图形数据集来提供列表搜索、详细视图和图形可视化。
我们提供了两种不同的方式来运行应用程序:同步和异步(使用asyncio)。

Web framework:

  • sync: Flask (Micro-Webframework)
  • async: FastAPI (Micro-Webframework)

前端:

  • jquery
  • bootstrap
  • d3.js

Neo4j 数据连接: Neo4j Python Driver for Cypher Docs
py2neo 目前不支持 neo4j 5.X 所在使用 Neo4j Driver

Python连接Neo4j工具比较 Neo4j Driver、py2neo

依赖文件

基础依赖:requirements.txt

# common requirements for sync and async example
neo4j==5.10.0
typing_extensions==4.7.1

同步依赖:requirements-sync.txt

# common requirements
-r requirements.txt

# sync web framework
Flask==2.3.2

同步依赖:requirements-async.txt

# common requirements
-r requirements.txt

# async web framework
uvicorn==0.23.2
fastapi==0.101.1

安装依赖

同步依赖

D:\OpenSource\Neo4j\Python\dependencies> pip install -r requirements-sync.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

异步依赖

D:\OpenSource\Neo4j\Python\dependencies> pip install -r requirements-async.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

代码

#!/usr/bin/env python
import logging
import os
from json import dumps
from textwrap import dedent
from typing import cast

import neo4j
from flask import Flask, Response, request
from neo4j import GraphDatabase, basic_auth
from typing_extensions import LiteralString #这边红的波浪线,不用管

app = Flask(__name__, static_url_path="/static/")

# 获取环境变量值,如果没有就返回默认值
url = os.getenv("NEO4J_URI", "neo4j://172.16.3.64:7687")
username = os.getenv("NEO4J_USER", "neo4j")
password = os.getenv("NEO4J_PASSWORD", "password")
neo4j_version = os.getenv("NEO4J_VERSION", "5")
database = os.getenv("NEO4J_DATABASE", "neo4j")
port = int(os.getenv("PORT", 8080))

driver = GraphDatabase.driver(url, auth=basic_auth(username, password))


@app.route("/")
def get_index():
    return app.send_static_file("index.html")


def query(q: LiteralString) -> LiteralString:
    # this is a safe transform:
    # no way for cypher injection by trimming whitespace
    # hence, we can safely cast to LiteralString
    return cast(LiteralString, dedent(q).strip())


def serialize_person(person):
    return {
        "id": person["id"],
        "name": person["name"],
        "generation": person["generation"],
        "votes": person.get("votes", 0)
    }


@app.route("/search")
def get_search():
    try:
        q = request.args["q"]
    except KeyError:
        return []
    else:
        cql = query("""
                MATCH (p:Person) WHERE p.name CONTAINS $name RETURN p
            """)
        records, _, _ = driver.execute_query(
            cql,
            name=q,  #将参数 q 传给cql 变量
            database_=database,
            routing_="r",
        )

        for record in records:
            # 打印出 record 属性
            logging.info("%s, %s", record["p"]["name"], record["p"]["generation"])

        # desc = [record['p']["name"] for record in records]
        # logging.info(desc)

        return Response(
            # WEB 会显示序列化后的 JSON,汉字没有直观显示,属于正常现象
            dumps([serialize_person(record["p"]) for record in records]),
            mimetype="application/json"
        )


if __name__ == "__main__":
    logging.root.setLevel(logging.INFO)
    logging.info("Starting on port %d, database is at %s", port, url)
    try:
        app.run(port=port)
    finally:
        driver.close()

测试

http://127.0.0.1:8080/search?q=陈长兴
image

源码地址:https://gitee.com/VipSoft/VipNeo4j/tree/master/Python
参考:
https://github.com/neo4j-examples/movies-python-bolt
https://neo4j.com/developer/python/

与 知识图谱(Knowledge Graph)- Neo4j 5.10.0 使用 - Python 操作相似的内容:

知识图谱(Knowledge Graph)- Neo4j 5.10.0 使用 - Python 操作

数据基于: [知识图谱(Knowledge Graph)- Neo4j 5.10.0 使用 - CQL - 太极拳传承谱系表](https://www.cnblogs.com/vipsoft/p/17631347.html) 这是一个非常简单的web应用程序,它使用我们的Movie图形数据集来提供列

知识图谱(Knowledge Graph)- Neo4j 5.10.0 使用 - CQL - 太极拳传承谱系表

目录创建节点删除节点查询节点创建关系新节点无属性关系删除关系案例 -- 太极拳传承谱系表创建传承人创建师徒关系创建第N代传承人案例 -- 批量执行 看到后面的案例再实操作 删除数据库中以往的图 MATCH (n) DETACH DELETE n 创建节点 CREATE命令语法 Neo4j CQL“C

知识图谱(Knowledge Graph)- Neo4j 5.10.0 使用 - Java SpringBoot 操作 Neo4j

上一篇使用了 CQL 实现了太极拳传承谱,这次使用JAVA SpringBoot 实现,只演示获取信息,源码连接在文章最后 三要素 在知识图谱中,通过三元组 集合的形式来描述事物之间的关系: - 实体:又叫作本体,指客观存在并可相互区别的事物,可以是具体的人、事、物,也可以是抽象的概念或联系,实体是

知识图谱(Knowledge Graph)- Neo4j 5.10.0 CentOS 安装

[知识图谱(Knowledge Graph)- Neo4j 5.10.0 Docker 安装](https://www.cnblogs.com/vipsoft/p/17623086.html) [知识图谱(Knowledge Graph)- Neo4j 5.10.0 CentOS 安装](https

知识图谱(Knowledge Graph)- Neo4j 5.10.0 Docker 安装

[知识图谱(Knowledge Graph)- Neo4j 5.10.0 Docker 安装](https://www.cnblogs.com/vipsoft/p/17623086.html) [知识图谱(Knowledge Graph)- Neo4j 5.10.0 CentOS 安装](https

知识图谱(Knowledge Graph)- Neo4j 5.10.0 Desktop & GraphXR

下载地址:https://neo4j.com/download/ ## 安装 ![image](https://img2023.cnblogs.com/blog/80824/202308/80824-20230816104928898-1342667053.png) 下载时会产生激活码(保存下来)

知识图谱(Knowledge Graph)- Neo4j 5.10.0 Desktop & GraphXR 连接自建数据库

``` #输入查看数据库连接 neo4j$ :server status ``` ![image](https://img2023.cnblogs.com/blog/80824/202308/80824-20230816130548712-41133454.png) 添加 远程连接,输入连接地址 !

知识图谱(Knowledge Graph)根本概念

[TOC] 2012年5月17日,Google 正式提出了知识图谱(Knowledge Graph)的概念,其初衷是为了优化搜索引擎返回的结果,增强用户搜索质量及体验。 假设我们想知道 “王健林的儿子” 是谁,百度或谷歌一下,搜索引擎会准确返回王思聪的信息,说明搜索引擎理解了用户的意图,知道我们要找

知识图谱实体对齐:无监督和自监督的方法

我们在前面介绍的都是有监督的知识图谱对齐方法,它们都需要需要已经对齐好的实体做为种子(锚点),但是在实际场景下可能并没有那么多种子给我们使用。为了解决这个问题,有许多无监督/自监督的知识图谱对齐方法被提出。其中包括基于GAN的方法,基于对比学习的方法等。他们在不需要事先给定锚点的情况下将来自不同知识图谱实体embeddings映射到一个统一的空间。

Vector | Graph:蚂蚁首个开源Graph RAG框架设计解读

引入知识图谱技术后,传统RAG链路到Graph RAG链路会有什么样的变化,如何兼容RAG中的向量数据库(Vector Database)和图数据库(Graph Database)基座,以及蚂蚁的Graph RAG开源技术方案和未来优化方向。