三元关系来自二元实体关系

2024-09-28 05:28:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图捕捉句内三元关系,并最终捕捉句间关系

例如:截至20152016财年,净收入分别为200万美元和300万美元

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

将此过程分为两个步骤

  1. 使用bi lstm注意网络提取二元关系,其输出为:

(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)

在不构建关系图的情况下,我希望将边作为列表传递,并查看它是否找到任何关联,但输出与输入相同。我需要一些关于这个方法的建议


Tags: 实体netab关系过程步骤linesnx
1条回答
网友
1楼 · 发布于 2024-09-28 05:28:10

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

enter image description here

它没有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)

所以我们只有一个派系:

[8, 10, 31]

相关问题 更多 >

    热门问题