无图谱不AI之三元组数据保存Neo4j

目录

  • [1. 代码学习](#1. 代码学习)
    • [1.1 源代码](#1.1 源代码)
    • [1.2 代码解读](#1.2 代码解读)

没有图谱称为弱人工智能,有图谱的称为强人工智能。

图谱可以让机器学习和人工智能具备推理能力。

1. 代码学习

1.1 源代码

python 复制代码
# -*- coding: utf-8 -*-
from py2neo import Node, Graph, Relationship


# 可以先阅读下文档:https://py2neo.org/v4/index.htm
class DataToNeo4j(object):
    """将excel中数据存入neo4j"""

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

    def create_spo(self, result):
        # 创建节点, 和关系
        start = Node('temp', name=result[0])
        end = Node('temp', name=result[2])
        self.graph.create(start)
        self.graph.create(end)
        r1 = Relationship(start, result[1], end)
        self.graph.create(r1)
python 复制代码
from ltp import LTP

ltp = LTP()


# 使用语义角色标注构建和抽取关系
def srl_AtoA(sent):
    # 句子进行分词操作
    seg, hidden = ltp.seg([sent])
    seg = seg[0]
    print(seg)
    srl = ltp.srl(hidden, keep_empty=False)[0]
    print(srl)
    results = []
    for s in srl:
        key = s[0]
        values = s[1]
        start, end = '', ''
        for value in values:
            print('value:', value)
            if value[0] == 'A0':
                start = ''.join(seg[value[1]:value[2] + 1])
            if value[0] == 'A1':
                end = ''.join(seg[value[1]:value[2] + 1])
        if start != '' and end != '':
            results.append([start, seg[key], end])
    return results
python 复制代码
# 分句操作
sents = ltp.sent_split(
    ["该僵尸网络包含至少35000个被破坏的Windows系统,攻击者和使用者正在秘密使用这些系统来开采Monero加密货币。该僵尸网络名为" VictoryGate",自2019年5月以来一直活跃。"])
spo = DataToNeo4j()
for sent in sents:
    print(sent)
    results = srl_AtoA(sent)
    print(results)
    for result in results:
        spo.create_spo(result)
    print('-' * 100)

1.2 代码解读

这段代码的主要目的是将文本信息中的实体和它们之间的关系抽取出来,并将这些信息存储到Neo4j数据库中。Neo4j是一个图形数据库,专门用于处理数据之间的关系。代码包括两个主要部分:与Neo4j交互的部分和文本处理部分。

  1. 与Neo4j交互

    • DataToNeo4j 用于连接Neo4j数据库并操作数据。
    • __init__ 方法中,通过Graph对象建立了与Neo4j数据库的连接。
    • create_spo 方法用于创建节点和关系。它接受一个包含三个元素的列表 result,分别代表起始节点、关系和终止节点。这个方法首先创建两个节点(起始和终止),然后在这两个节点之间创建一个关系。
  2. 文本处理

    • 使用了LTP(语言技术平台)库来处理文本。
    • srl_AtoA 函数接受一个句子,使用LTP库进行分词和语义角色标注。
    • 语义角色标注的结果用于识别句子中的主要实体(A0和A1标记的部分)以及这些实体之间的关系。
    • 这些识别出的实体和关系被组织成一个列表,并返回。

代码的工作流程如下:

  1. 首先,LTP库用于分句和分词,并对句子进行语义角色标注。
  2. 对于每个句子,srl_AtoA 函数被用来提取实体和它们之间的关系。
  3. 提取出的实体和关系被发送到 DataToNeo4j 对象。
  4. DataToNeo4j 对象使用这些数据在Neo4j数据库中创建相应的节点和关系。

这个过程有效地将自然语言文本中的实体和关系转换为图数据库中的节点和边,便于进行复杂的关系查询和分析。

相关推荐
week_泽4 分钟前
第4课:为什么记忆能力如此重要 - 学习笔记_4
人工智能·笔记·学习·ai agent
week_泽1 小时前
第6课:如何管理短期记忆和长期记忆 - 学习笔记_6
人工智能·笔记·学习·ai agent
之歆7 小时前
Spring AI入门到实战到原理源码-MCP
java·人工智能·spring
知乎的哥廷根数学学派7 小时前
面向可信机械故障诊断的自适应置信度惩罚深度校准算法(Pytorch)
人工智能·pytorch·python·深度学习·算法·机器学习·矩阵
且去填词8 小时前
DeepSeek :基于 Schema 推理与自愈机制的智能 ETL
数据仓库·人工智能·python·语言模型·etl·schema·deepseek
待续3018 小时前
订阅了 Qoder 之后,我想通过这篇文章分享一些个人使用心得和感受。
人工智能
weixin_397578028 小时前
人工智能发展历史
人工智能
强盛小灵通专卖员8 小时前
基于深度学习的山体滑坡检测科研辅导:从论文实验到系统落地的完整思路
人工智能·深度学习·sci·小论文·山体滑坡
OidEncoder8 小时前
从 “粗放清扫” 到 “毫米级作业”,编码器重塑环卫机器人新能力
人工智能·自动化·智慧城市
Hcoco_me8 小时前
大模型面试题61:Flash Attention中online softmax(在线softmax)的实现方式
人工智能·深度学习·自然语言处理·transformer·vllm