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

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

相关推荐
程序员陆通21 小时前
2周上线AI电商图片系统开发实战教程
人工智能
Codebee21 小时前
Ooder框架规范执行计划:企业级AI实施流程与大模型协作指南
人工智能
菜鸟冲锋号21 小时前
适配AI大模型非结构化数据需求:数据仓库的核心改造方向
大数据·数据仓库·人工智能·大模型
重生之我要成为代码大佬21 小时前
深度学习2-在2024pycharm版本中导入pytorch
人工智能·pytorch·深度学习
汽车仪器仪表相关领域21 小时前
亲历机动车排放检测升级:南华NHA-604/605测试仪的实战应用与经验沉淀
人工智能·功能测试·测试工具·安全·汽车·压力测试
凌峰的博客21 小时前
基于深度学习的图像修复技术调研总结(上)
人工智能
paopao_wu21 小时前
AI应用开发-Python:Embedding
人工智能·python·embedding
启途AI21 小时前
自由编辑+AI 赋能:ChatPPT与Nano Banana Pro的创作革命
人工智能·powerpoint·ppt
产品何同学21 小时前
情绪经济下的AI应用怎么设计?6个APP原型设计案例拆解
人工智能·ai·产品经理·交友·ai应用·ai伴侣·情绪经济
猿小猴子21 小时前
主流 AI 大模型开源平台社区之一的 ModelScope (魔搭社区) 介绍
人工智能