当前位置: 首页 > news >正文

基于Grok3+NebulaGraph构建省市区乡镇街道知识图谱

1. 向Grok3提问

  • 提问:创建省份 城市 区域 乡镇街道 知识图谱,要求能够互相推理
    在这里插入图片描述
  • 提问:使用NebulaGraph构建以上知识图谱

接下来大都是GROK的回答,我们来实践一遍。AI极大加快了开发效率。

2. 创建图空间

在 NebulaGraph 中,所有数据存储在图空间(Space)中。先创建一个图空间:

CREATE SPACE `AddressGraph` (partition_num = 10, vid_type = FIXED_STRING(32)) COMMENT = "行政区划知识图谱"

3. 定义标签(Tag)

实体类型:Province(省份)、City(城市)、District(区域)、Street(乡镇街道)。
每个标签可以附加属性,例如名称。

CREATE TAG Province(name string);
CREATE TAG City(name string);
CREATE TAG District(name string);
CREATE TAG Street(name string);

4. 定义边类型(Edge Type)

关系类型:hasPart(包含)、partOf(属于)。
边可以附加属性。

CREATE EDGE hasPart (relationship_type string);
CREATE EDGE partOf (relationship_type string);

5. 插入数据

以之前提到的广东省为例,插入节点和边数据。

5.1 插入节点(Vertices)

每个实体需要一个唯一的 VID(顶点 ID),这里用字符串表示。

INSERT VERTEX Province(name) VALUES "广东省":("广东省");

INSERT VERTEX City(name) VALUES "广州市":("广州市");
INSERT VERTEX City(name) VALUES "深圳市":("深圳市");

INSERT VERTEX District(name) VALUES "天河区":("天河区");
INSERT VERTEX District(name) VALUES "越秀区":("越秀区");
INSERT VERTEX District(name) VALUES "南山区":("南山区");
INSERT VERTEX District(name) VALUES "福田区":("福田区");

INSERT VERTEX Street(name) VALUES "珠江新城街道":("珠江新城街道");
INSERT VERTEX Street(name) VALUES "天河北街道":("天河北街道");
INSERT VERTEX Street(name) VALUES "北京路街道":("北京路街道");
INSERT VERTEX Street(name) VALUES "人民街道":("人民街道");
INSERT VERTEX Street(name) VALUES "粤海街道":("粤海街道");
INSERT VERTEX Street(name) VALUES "南头街道":("南头街道");
INSERT VERTEX Street(name) VALUES "华强北街道":("华强北街道");
INSERT VERTEX Street(name) VALUES "福保街道":("福保街道");

5.2 插入边(Edges)

定义层级关系。

INSERT EDGE hasPart(relationship_type) VALUES "广东省" -> "广州市":("行政隶属");
INSERT EDGE hasPart(relationship_type) VALUES "广东省" -> "深圳市":("行政隶属");
INSERT EDGE partOf(relationship_type) VALUES "广州市" -> "广东省":("行政隶属");
INSERT EDGE partOf(relationship_type) VALUES "深圳市" -> "广东省":("行政隶属");

INSERT EDGE hasPart(relationship_type) VALUES "广州市" -> "天河区":("行政隶属");
INSERT EDGE hasPart(relationship_type) VALUES "广州市" -> "越秀区":("行政隶属");
INSERT EDGE hasPart(relationship_type) VALUES "深圳市" -> "南山区":("行政隶属");
INSERT EDGE hasPart(relationship_type) VALUES "深圳市" -> "福田区":("行政隶属");
INSERT EDGE partOf(relationship_type) VALUES "天河区" -> "广州市":("行政隶属");
INSERT EDGE partOf(relationship_type) VALUES "越秀区" -> "广州市":("行政隶属");
INSERT EDGE partOf(relationship_type) VALUES "南山区" -> "深圳市":("行政隶属");
INSERT EDGE partOf(relationship_type) VALUES "福田区" -> "深圳市":("行政隶属");

INSERT EDGE hasPart(relationship_type) VALUES "天河区" -> "珠江新城街道":("行政隶属");
INSERT EDGE hasPart(relationship_type) VALUES "天河区" -> "天河北街道":("行政隶属");
INSERT EDGE hasPart(relationship_type) VALUES "越秀区" -> "北京路街道":("行政隶属");
INSERT EDGE hasPart(relationship_type) VALUES "越秀区" -> "人民街道":("行政隶属");
INSERT EDGE hasPart(relationship_type) VALUES "南山区" -> "粤海街道":("行政隶属");
INSERT EDGE hasPart(relationship_type) VALUES "南山区" -> "南头街道":("行政隶属");
INSERT EDGE hasPart(relationship_type) VALUES "福田区" -> "华强北街道":("行政隶属");
INSERT EDGE hasPart(relationship_type) VALUES "福田区" -> "福保街道":("行政隶属");
INSERT EDGE partOf(relationship_type) VALUES "珠江新城街道" -> "天河区":("行政隶属");
INSERT EDGE partOf(relationship_type) VALUES "天河北街道" -> "天河区":("行政隶属");
INSERT EDGE partOf(relationship_type) VALUES "北京路街道" -> "越秀区":("行政隶属");
INSERT EDGE partOf(relationship_type) VALUES "人民街道" -> "越秀区":("行政隶属");
INSERT EDGE partOf(relationship_type) VALUES "粤海街道" -> "南山区":("行政隶属");
INSERT EDGE partOf(relationship_type) VALUES "南头街道" -> "南山区":("行政隶属");
INSERT EDGE partOf(relationship_type) VALUES "华强北街道" -> "福田区":("行政隶属");
INSERT EDGE partOf(relationship_type) VALUES "福保街道" -> "福田区":("行政隶属");

6. 查询与推理

NebulaGraph 使用 nGQL(Nebula Graph Query Language)进行查询,支持路径查找和多跳查询,非常适合实现推理。

  • 查询示例1:珠江新城街道属于哪个省份?
# AI这块生成还不行,语法错误
GO FROM "珠江新城街道" OVER partOf YIELD id($$) AS district |
GO FROM $-.district OVER partOf YIELD id($$) AS city |
GO FROM $-.city OVER partOf YIELD id($$) AS province

解释:从“珠江新城街道”开始,沿 partOf 边向上查找,经过区域(天河区)、城市(广州市),最终到达省份(广东省)。

输出:“广东省”

  • 查询示例2:广东省包含哪些乡镇街道?
GO FROM "广东省" OVER hasPart YIELD id($$) AS city | 
GO FROM $-.city OVER hasPart YIELD id($$) AS district | 
GO FROM $-.district OVER hasPart YIELD id($$) AS street

解释:从“广东省”开始,沿 hasPart 边向下查找,经过城市、区域,最终到达所有乡镇街道。
输出:“珠江新城街道”, “天河北街道”, “北京路街道”, …
在这里插入图片描述

  • 查询示例3:天河区的所有上级实体
GO 2 STEPS FROM "天河区" OVER partOf YIELD id($$)
UNION
GO 1 STEPS FROM "天河区" OVER partOf YIELD id($$)

解释:返回距离天河区一跳与二跳。
输出:“广州市”, “广东省”
在这里插入图片描述

  • 查询示例4: 获取所有顶点和边
GET SUBGRAPH WITH PROP FROM "广州市" YIELD VERTICES AS nodes, EDGES AS relationships

在这里插入图片描述

GET SUBGRAPH WITH PROP FROM "越秀区" YIELD VERTICES AS nodes, EDGES AS relationships

在这里插入图片描述

为什么要构建该知识图谱,为了后续的地址标准化~~

http://www.dtcms.com/a/36649.html

相关文章:

  • 复杂提示工程:Chain-of-Thought vs Tree-of-Thought 范式对比
  • 可重入(Reentrant)与可重入锁(Reentrant Lock)详解
  • Unity百游修炼(2)——Brick_Breaker详细制作全流程
  • kotlin 知识点一 变量和函数
  • 蓝桥杯好题推荐--多项式输出
  • Python Flask基于时间序列预测算法的智慧交通数据可视化分析系统【附源码】
  • 【算法系列】常见排序算法:冒泡排序、选择排序与插入排序
  • Unity自定义树(Tree)
  • 城电科技|会追日的智能花,光伏太阳花开启绿色能源新篇章
  • 【无标题】网络安全公钥密码体制
  • html中的元素(2)
  • 云计算相关
  • 苍穹外卖day4套餐管理新增接口个人实现及思考过程记录
  • MaxKB+Ollama+DeepSeek1.5B部署知识库
  • DeepSeek-V3 论文总结
  • React进阶之React核心源码解析(三)
  • Jtti.cc:站群服务器SEO优化建议,如何分配多IP?
  • Java进阶:SpringMVC中放行静态资源
  • Go小技巧易错点100例(二十二)
  • Spring Boot 与 MyBatis 数据库操作
  • 【Java】I/O 流篇 —— 缓冲流
  • 什么是以知识为中心的服务(KCS)?最佳实践是什么?
  • STM32+ESP8266局域网通信
  • 【Java项目】基于Spring Boot的交流互动系统
  • 【工欲善其事】2025 年实现听书自由——基于 Kokoro-82M 的开源 TTS 工具 audiblez 本地部署实战
  • AI多模态梳理与应用思考|从单文本到多视觉的生成式AI的AGI关键路径
  • msc2n修改物料有效期
  • 【算法】 ‘abb‘ 型子序列问题——前后缀分解 python
  • 【红队利器】单文件一键结束火绒6.0
  • 2025最新最全【大模型学习路线规划】零基础入门到精通_大模型 开发 学习路线