我需要将 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 三元组。每个节点都是唯一的,但在三重文件中多次找到。因此,我需要在创建边缘之前执行查找。您能告诉我“查找”方法是否使用索引进行查找(哈希表,...)?顶点查找的复杂性是多少?你会怎么做?
非常感谢