无图谱不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数据库中创建相应的节点和关系。

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

相关推荐
蹦蹦跳跳真可爱58929 分钟前
Python----OpenCV(几何变换--图像平移、图像旋转、放射变换、图像缩放、透视变换)
开发语言·人工智能·python·opencv·计算机视觉
蹦蹦跳跳真可爱58933 分钟前
Python----循环神经网络(Transformer ----Layer-Normalization(层归一化))
人工智能·python·rnn·transformer
夜阳朔37 分钟前
Conda环境激活失效问题
人工智能·后端·python
小Lu的开源日常42 分钟前
AI模型太多太乱?用 OpenRouter,一个接口全搞定!
人工智能·llm·api
mit6.8242 小时前
[Meetily后端框架] Whisper转录服务器 | 后端服务管理脚本
c++·人工智能·后端·python
Baihai IDP2 小时前
AI 系统架构的演进:LLM → RAG → AI Workflow → AI Agent
人工智能·ai·系统架构·llm·agent·rag·白海科技
沫儿笙2 小时前
弧焊机器人气体全方位节能指南
网络·人工智能·机器人
LONGZETECH2 小时前
【龙泽科技】新能源汽车维护与动力蓄电池检测仿真教学软件【吉利几何G6】
人工智能·科技·汽车·汽车仿真教学软件·汽车教学软件
jndingxin3 小时前
OpenCV 图像哈希类cv::img_hash::AverageHash
人工智能·opencv·哈希算法
Jamence3 小时前
多模态大语言模型arxiv论文略读(153)
论文阅读·人工智能·语言模型·自然语言处理·论文笔记