1. 代码学习
1.1 源代码
# -*- 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)
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
# 分句操作
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交互的部分和文本处理部分。
-
与Neo4j交互:
- 首先,LTP库用于分句和分词,并对句子进行语义角色标注。
- 对于每个句子,
srl_AtoA
函数被用来提取实体和它们之间的关系。 - 提取出的实体和关系被发送到
DataToNeo4j
对象。 DataToNeo4j
对象使用这些数据在Neo4j数据库中创建相应的节点和关系。
这个过程有效地将自然语言文本中的实体和关系转换为图数据库中的节点和边,便于进行复杂的关系查询和分析。
原文地址:https://blog.csdn.net/weixin_46713695/article/details/134721337
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_18597.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。