【问题标题】:How do I generate a random sample of data in SPARQL?如何在 SPARQL 中生成随机数据样本?
【发布时间】:2015-07-20 16:31:13
【问题描述】:

是否可以使用 SPARQL 生成三元组的随机样本? 我认为它可能是通过 SAMPLE 函数,但这会返回一个 SAMPLE。

我的解决方法是生成一个随机数以与 OFFSET 关键字一起使用,并使用 LIMIT 关键字返回所需的样本量。我只是将偏移量的随机数硬编码为 200 以便于这样:

SELECT *
WHERE {
?s ?p ?o
} 
OFFSET 200 #random number variable
LIMIT 100

对于从 SPARQL 端点生成 100 个数据三元组的随机样本有什么更好的建议?

【问题讨论】:

标签: sparql random-sample


【解决方案1】:

接受的答案可能有效,但不是最佳的,因为建议的方法可能会导致某些三联商店出现错误(例如在 Apache Jena 上)。

正如票证和上面评论部分中的@Joshua-Taylor 所指出的,更好的答案是:

SELECT ... WHERE 
{
  ...
  BIND(RAND() AS ?sortKey)
} ORDER BY ?sortKey ...

【讨论】:

    【解决方案2】:

    在 SPARQL 1.1 中你可以尝试使用

     ...} ORDER BY RAND() LIMIT 100
    

    但这是否有效可能取决于三联商店。

    【讨论】:

    • 谢谢。它正在运行,但我认为 RAND() 返回了一个随机数。请在 ORDER BY 的上下文中做什么?
    • ps for context 它肯定会返回与简单的 OFFSET/LIMIT 方法返回的看似随机的数据不同的数据,只是不明白它在做什么。
    • @Hilary SELECT { ... } ORDER BY RAND()SELECT { ... BIND(RAND() AS ?rand) } ORDER BY ?rand 做的事情一样。它为每个结果绑定生成一个随机数,然后按该随机数对结果进行排序。它本质上是在为你改变结果。
    • 好的,谢谢约书亚。那讲得通。 LIMIT 是在 ORDER BY 之前还是之后应用的,即我是否总是使用相同的 LIMIT 获得相同的随机样本?
    • 这种方法(对数据进行排序)对于像 Wikidata 这样大的数据是否有效?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    相关资源
    最近更新 更多