gpt4 book ai didi

python rdflib 传递查询

转载 作者:行者123 更新时间:2023-12-01 03:37:27 28 4
gpt4 key购买 nike

我对使用 rdflib 相当陌生,我的问题相当简单。我有几个 n-triple 文件,其中包含相当多的数据,虽然每个文件的主题都有相同的域,但每个文件的对象中的域都不同。现在我想输入一个或多个文件,并将它们与数据集中的每个其他文件进行比较,以获得包含相同主题的三元组:

[selected file]
a owl:sameAs b

[other files]
a owl:sameAs c
a owl:sameAs d

应该产生输出:

b owl:sameAs c
b owl:sameAs d

我当前的方法非常幼稚,并且花费的时间太长,因为我遍历所选文件中的所有三元组,它会检查每个其他三元组是否包含相同的主语和谓语。

...
for mainGraph in mainGraphs:
for s,p,o in mainGraph:
for graph in graphs:
for s1,p1,o1 in graph:
if s == s1 and p == p1:
backlinks.add( (o, OWL.sameAs, o1) )
...

我尝试插入 SPARQL 查询,但也不起作用:

...
for mainGraph in mainGraphs:
for graph in graphs:
union = mainGraph + graph
qres = union.query(
"""SELECT DISTINCT ?x ?y
WHERE
{
?x owl:sameAs+ ?y .
}""")
...

我的问题是是否有一种更快、更简单的方法可以完成同样的事情。

任何帮助将不胜感激。

最佳答案

在检查了更多 rdflib 文档后,我找到了以下解决方案:

...
for mainGraph in mainGraphs:
for s,p,o in mainGraph.triples( (None, OWL.sameAs, None) ):
for graph in graphs:
for s1,p1,o1 in graph.triples( (s,p,None) ):
backlinks.add( (o1, OWL.sameAs, o) )
...

速度要快得多。如果有人有更快的解决方案,如果他们发布它,我将不胜感激。

关于python rdflib 传递查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40182210/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com