2

我正在尝试捕获句子内的三元关系并最终捕获句子间的关系。

例如:截至 2015、2016 年的净收入分别为 200 万美元和 300 万美元。

预期输出:(net revenues,$2.0 million,2015),(net revenues,$3.0 million,2016)

将其视为一个两步过程

  1. 使用 bi-lstm attention network 提取二元关系,其输出为:

(net revenues,$2.0 million),(net revenues,$3.0 million),(net revenues,2016),(net revenues,2015)

  1. 如果标签存在,我试图用实体的位置编号和这些实体之间的边构建关系图。将从该图中生成派系以创建三元关系。
lines=["8 10 ","8 18","8 22 ","8 28","8 31","12 37"]
g1=nx.parse_edgelist(lines,nodetype=int)
for ab in nx.clique.find_cliques(g1):
    print(ab)

在不构建关系图的情况下,我想将边作为列表传递,看看它是否找到任何派系,但输出与输入相同。需要有关此方法或其他方法的一些建议。

4

1 回答 1

1

nx.find_cliques找到图中的所有派系,即使是size == 2. 这意味着该函数返回除图形团之外的所有边。您的图表如下所示:

在此处输入图像描述

它没有size >= 3派系,因此nx.find_cliques只返回图中的所有边。如果我们要添加这条边:

"10 31"

import networkx as nx

lines = [ 
    "8 10",
    "8 18",
    "8 22",
    "8 28",
    "8 31",
    "12 37",
    "10 31"
]
g1 = nx.parse_edgelist(lines, nodetype=int)
for ab in nx.clique.find_cliques(g1):
    print(ab)

我们将有一个真正的集团:

[8, 10, 31]
[8, 18]
[8, 28]
[8, 22]
[12, 37]

我们可以过滤掉所有派系size == 2

for ab in nx.clique.find_cliques(g1):
    if len(ab) > 2:
        print(ab)

所以我们只有一个size >= 3集团:

[8, 10, 31]

于 2019-09-10T20:23:35.737 回答