所谓知识图谱,就是把非结构化的数据,转换成结构化的三元组的一个过程。知识图谱的应用场景包括推荐系统,人机问答、知识数据的展示,以及风控等等。
数据层
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月以来一直活跃。"])
for sent in sents:
print(sent)
results = srl_AtoA(sent)
print('-' * 100)
print(results)
过程
该僵尸网络包含至少35000个被破坏的Windows系统,攻击者和使用者正在秘密使用这些系统来开采Monero加密货币。
['该', '僵尸', '网络', '包含', '至少', '35000', '个', '被', '破坏', '的', 'Windows', '系统', ',', '攻击者', '和', '使用者', '正在', '秘密', '使用', '这些', '系统', '来', '开采', 'Monero加密', '货币', '。']
[(3, [('A0', 0, 2), ('A1', 4, 11)]), (8, [('A1', 10, 11)]), (18, [('A0', 13, 15), ('ARGM-ADV', 16, 16), ('ARGM-ADV', 17, 17), ('A1', 19, 20)]), (22, [('A0', 13, 15), ('ARGM-ADV', 16, 16), ('A1', 23, 24)])]
value: ('A0', 0, 2)
value: ('A1', 4, 11)
value: ('A1', 10, 11)
value: ('A0', 13, 15)
value: ('ARGM-ADV', 16, 16)
value: ('ARGM-ADV', 17, 17)
value: ('A1', 19, 20)
value: ('A0', 13, 15)
value: ('ARGM-ADV', 16, 16)
value: ('A1', 23, 24)
----------------------------------------------------------------------------------------------------
[['该僵尸网络', '包含', '至少35000个被破坏的Windows系统'], ['攻击者和使用者', '使用', '这些系统'], ['攻击者和使用者', '开采', 'Monero加密货币']]
该僵尸网络名为“ VictoryGate”,自2019年5月以来一直活跃。
['该', '僵尸', '网络名为', '“', 'VictoryGate', '”', ',', '自', '2019年', '5月', '以来', '一直', '活跃', '。']
[(12, [('ARGM-TMP', 7, 10), ('ARGM-ADV', 11, 11)])]
value: ('ARGM-TMP', 7, 10)
value: ('ARGM-ADV', 11, 11)
----------------------------------------------------------------------------------------------------
[]