gpt4 book ai didi

random - 如何从 SPARQL 中选择随机 DBPedia 节点?

转载 作者:行者123 更新时间:2023-12-04 13:12:16 25 4
gpt4 key购买 nike

如何使用 sparql 端点从 DBpedia 中选择随机样本?

这个查询

SELECT ?s WHERE { ?s ?p ?o . FILTER ( 1 > bif:rnd (10, ?s, ?p, ?o) ) } LIMIT 10

(找到 here )
似乎在大多数 SPARQL 端点上都可以正常工作,但在 http://dbpedia.org/sparql 上它被缓存(所以它总是返回相同的 10 个节点)。

如果我从 JENA 尝试,我会收到以下异常:
Unresolved prefixed name: bif:rnd

而且我找不到'bif'命名空间是什么。

关于如何解决这个问题的任何想法?

穆龙

最佳答案

我遇到了同样的问题,这里的解决方案都没有解决我的问题。这是我的解决方案;这是不平凡的,而且相当黑客。到目前为止,这适用于 DBPedia,并且可能适用于其他 SPARQL 端点,但不保证适用于 future 的版本。

DBPedia 使用 Virtuoso,它支持 RAND 的未记录参数。功能;该参数有效地指定了用于 PRNG 的范围。游戏是欺骗 Virtuoso 相信在计算每个结果行之前不能对输入参数进行静态评估,从而迫使程序评估 RAND()对于每个绑定(bind):

select * {
?s dbo:isPartOf ?o . # Whatever your pattern is
bind(rand(1 + strlen(str(?s))*0) as ?rid)
} order by ?rid

奇迹发生在 rand(1 + strlen(str(?s))*0)生成等价于 rand() ;但是通过利用程序无法预测涉及某些变量的表达式的值这一事实强制它在每次匹配时运行(在这种情况下,我们只是将 IRI 的长度计算为字符串)。实际的表达式并不重要,因为我们将它乘以 0完全忽略它,然后添加 1制作 rand正常执行。

这只是因为开发人员在表达式的静态代码评估中没有走这么远。他们本可以很容易地为“乘以零”编写一个分支,但可惜他们没有:)

关于random - 如何从 SPARQL 中选择随机 DBPedia 节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5677340/

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