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

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

相关推荐
只是甲10 小时前
Text2SQL 系列博客 02:技术原理深度剖析 - 从自然语言到 SQL 的完整链路
人工智能·text2sql·nl2sql·ai agent·自助数据分析·data agent·agentic 数据洞察
懷淰メ10 小时前
【AI赋能】基于PyQt+YOLO+DeepSeek水上漂浮物检测系统(详细介绍)
人工智能·yolo·目标检测·计算机视觉·pyqt·漂浮物·水上漂浮物
EQUINOX110 小时前
【论文精读】| CLIP精读
大数据·人工智能
PC2005-cloud10 小时前
博文已索引但不展示:一次 Bing SEO 问题排查记录
服务器·人工智能
weixin_4080996710 小时前
2026 图片去文字 API 实战:AI一键去除图片文字(附 Python / Java / PHP / JS 完整代码)
人工智能·api接口·图片去水印·石榴智能·ai图像修复·图片去文字
greenbbLV11 小时前
2026节日慰问品政策解读:合规标准升级与福利行业新趋势
人工智能·节日
奈斯先生Vector11 小时前
告别工具碎片化:基于 Nano Banana 全模态 AI 聚合架构搭建“文本-图像-视频”自动化协同生产线
运维·数据库·人工智能·架构·自动化·aigc·音视频
领麦微红外11 小时前
国产MEMS红外测温传感器:传感器+算法+产品级出厂标定一站式交付模式深度解读
人工智能·硬件工程·产品经理
mingo_敏12 小时前
DeepAgents : 检索(Retrieval)
人工智能·深度学习·langchain
微三云 - 廖会灵 (私域系统开发)12 小时前
消费即资产:积分增值异业联盟商业模式完整拆解(附落地逻辑、合规方案与盈利模型)
大数据·人工智能