python - 二元实体关系的三元关系

标签 python networkx clique

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

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

预期产出:(净收入,200 万美元,2015 年),(净收入,300 万美元,2016 年)

分两步处理

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

(净收入,200 万美元),(净收入,300 万美元),(净收入,2016 年),(净收入,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)

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

最佳答案

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

enter image description here

它没有 size >= 3 cliques,所以 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 的 cliques:

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

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

[8, 10, 31]

关于python - 二元实体关系的三元关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57876357/

相关文章:

python - 让 random_powerlaw_tree() 生成节点数超过 10 的树的参数

algorithm - 为什么 igraph 的 cliques() 方法比 justTheCliques 慢几个数量级?

algorithm - 连通图中的 K-Clique

algorithm - 查找图形的集团覆盖

python - 最小化 Django : . 中的数据库命中 values_list() 依赖于先前的 .filter() 子句

python - 试图从 python 中的正则表达式匹配中打印一个组

python - 如何用 Python 计算网络的 Eb(k)?

python - networkx 绘制函数的图例

Python 获取 2 个日期时间对象之间的整小时值

python - 如何从 Torrent 文件中删除某些不需要的文件?