いくつかのグラフ統計 (ノードの中心性など) を計算するために、DBPedia グラフのサブセットを iGraph にロードする必要があります。Redlands libRDF python ライブラリを使用して DBPedia トリプルをロードします。各ノードには URI (一意の識別子) が関連付けられています。
グラフを iGraph にロードするのに問題があります。これが私がすることです:
1) 三行読み(主語・述語・目的語)
2)次のアルゴリズムを使用して頂点を取得または作成します(属性付き)
def add_or_find_vertex (self, g, uri):
try:
return g.vs.find(name=uri)
except (KeyError, ValueError):
g.add_vertex(name=uri)
return g.vs.find(name=uri)
subjVertex = self.add_or_find_vertex(self.g, subject)
objVertex = self.add_or_find_vertex(self.g, object)
self.g.add_edge(subjVertex, objVertex, uri=predicate)
問題は、スクリプトが非常に遅く、25M のトリプルをロードする必要があることです。各ノードは一意ですが、トリプル ファイル内で何度か見つかります。したがって、エッジを作成する前にルックアップを実行する必要があります。「find」メソッドが検索用のインデックス (Hashtable など) を使用しているかどうか教えていただけますか? 頂点ルックアップの複雑さは? あなたならどうしますか?
どうもありがとうございました