在 rdflib 中批量编辑三元组的主题
Bulk edit subject of triples in rdflib
我通过使用 rdflib-jsonld 解析数据库中的记录来创建一个 rdflib 图。但是,三元组的主题从 url 中缺少 /
。要添加它,我使用以下代码:
for s,p,o in graph1:
print 'parsing to graph2. next step - run query on graph2'
pprint.pprint((s,p,o))
s = str(s)
s1 =s.replace('https:/w','https://w')
s = URIRef(s1)
graph2.add((s,p,o))
由于图表中的三元组数量很多,此步骤需要很长时间(几个小时)才能完成 运行。我怎样才能减少花费的时间?与其遍历每个元素,不如如何批量更改主题?
首先,要进行适当的时间测量,请删除与替换本身无关的任何内容,特别是普通打印和漂亮打印,您不需要它们。如果您需要一些进度指示器,请每 N 步将一条短消息(例如一个点)写入日志文件。
避免内存过度消耗。我不知道你的图在内部看起来如何,但最好在不创建并行图结构的情况下进行替换。在此过程中检查内存使用情况,如果程序用完可用 RAM,您就有麻烦了,所有进程都会减慢速度。如果您无法修改现有图形 并且 内存不足,出于测量目的,只需避免创建第二个图形,即使这样的替换丢失并因此无用。
如果没有任何帮助,请退后一步。您可以使用 python re
或 sed
等专门用于批量文本处理的文本工具在尚未解析文件的阶段执行替换。
我通过使用 rdflib-jsonld 解析数据库中的记录来创建一个 rdflib 图。但是,三元组的主题从 url 中缺少 /
。要添加它,我使用以下代码:
for s,p,o in graph1:
print 'parsing to graph2. next step - run query on graph2'
pprint.pprint((s,p,o))
s = str(s)
s1 =s.replace('https:/w','https://w')
s = URIRef(s1)
graph2.add((s,p,o))
由于图表中的三元组数量很多,此步骤需要很长时间(几个小时)才能完成 运行。我怎样才能减少花费的时间?与其遍历每个元素,不如如何批量更改主题?
首先,要进行适当的时间测量,请删除与替换本身无关的任何内容,特别是普通打印和漂亮打印,您不需要它们。如果您需要一些进度指示器,请每 N 步将一条短消息(例如一个点)写入日志文件。
避免内存过度消耗。我不知道你的图在内部看起来如何,但最好在不创建并行图结构的情况下进行替换。在此过程中检查内存使用情况,如果程序用完可用 RAM,您就有麻烦了,所有进程都会减慢速度。如果您无法修改现有图形 并且 内存不足,出于测量目的,只需避免创建第二个图形,即使这样的替换丢失并因此无用。
如果没有任何帮助,请退后一步。您可以使用 python re
或 sed
等专门用于批量文本处理的文本工具在尚未解析文件的阶段执行替换。