2

文内の三項関係、そして最終的には文間の関係を捉えようとしています。

例: 2015 年と 2016 年の純収益は、それぞれ 200 万ドルと 300 万ドルでした。

期待される出力:(net revenues,$2.0 million,2015),(net revenues,$3.0 million,2016)

2段階のプロセスとしてこれにアプローチする

  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)

真のクリークが 1 つあります。

[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クリークは 1 つだけになります。

[8, 10, 31]

于 2019-09-10T20:23:35.737 に答える