【问题标题】:Calculate variance of wikiPageLength with SPARQL on dbpedia在 dbpedia 上使用 SPARQL 计算 wikiPageLength 的方差
【发布时间】:2020-11-05 10:59:00
【问题描述】:

我想使用 dbpedia (http://live.dbpedia.org/sparql) 计算轻小说 (Light_novels) 的维基百科页面长度历史的方差(或标准差)。

SPARQL 在这里:

PREFIX dbpedia0: <http://dbpedia.org/ontology/> 
PREFIX term: <http://purl.org/dc/terms/>

SELECT DISTINCT ?item ((SUM((?n - ?mean)*(?n - ?mean)))/(COUNT(?n) - 1) AS ?variance) 
WHERE
{
    
?item term:subject dbc:Light_novels . 

  ?item dbpedia0:wikiPageLength ?n
  {
      SELECT ?item (AVG(?n) AS ?mean) WHERE {
        ?item dbpedia0:wikiPageLength ?n . 
      } 
  }

}        

这会产生错误Virtuoso 37000 Error SP031: SPARQL compiler: The name ?n is used in multiple clauses, without any logical connection 我无数次尝试盲目地修改代码,但最终不知道如何实现。

非常感谢您的帮助。谢谢。

【问题讨论】:

  • dbpedia.org/sparql为我工作
  • 您可以在live.dbpedia.org/sparql 上禁用标志“严格检查 void 变量”和“严格检查多个子句中使用但没有逻辑连接的变量名” - 我的意思是,字面意思是你的错误说。
  • 出于效率原因,我还将?item term:subject dbc:Light_novels . 放入子查询中。所以你最终会在内部和外部查询中拥有?item term:subject dbc:Light_novels .
  • 谢谢@UninformedUser 看起来错误问题已经解决了。但我仍然没有得到查询结果。你有什么想法吗?
  • 您现在使用哪个端点?在dbpedia.org/sparql 中,dbo:wikiPageLength 的数据不存在。在live.dbpedia.org/sparql 中确实如此

标签: sparql semantic-web dbpedia


【解决方案1】:

正常情况下应该可以的

PREFIX dbpedia0: <http://dbpedia.org/ontology/> 
PREFIX term: <http://purl.org/dc/terms/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>


SELECT ?item IF(?count=1,0,(SUM(?x)/(?count-1))) as ?var
{
SELECT ?item ?n xsd:integer(?n) as ?ni ?mean xsd:integer(?ni-?mean) as ?nmean ((?nmean)*(?nmean)) as ?x ?count
{
  ?item dbpedia0:wikiPageLength ?n 
  {
     SELECT ?item AVG(?n2) as ?mean (COUNT(?item)) as $count
     {
       ?item term:subject dbc:Light_novels . 
       ?item dbpedia0:wikiPageLength ?n2
     }
     GROUP BY ?item
  }
}
} GROUP BY ?item ?count

但它会抛出此错误

内部优化编译器错误:sqldf.c:2491 中的 sqlo_place_exp 中的错误 dfe

所以我把它修改成了这个:

PREFIX dbpedia0: <http://dbpedia.org/ontology/> 
PREFIX term: <http://purl.org/dc/terms/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

SELECT ?item IF(?count=1,-1,(?sx/(?count-1))) as ?var
{
SELECT ?item SUM(?x) as ?sx ?count
{
SELECT ?item ?n xsd:integer(?n) as ?ni ?mean xsd:integer(?ni-?mean) as ?nmean ((?nmean)*(?nmean)) as ?x ?count
{
  ?item dbpedia0:wikiPageLength ?n 
  {
     SELECT ?item AVG(?n2) as ?mean (COUNT(?item)) as $count
     {
       ?item term:subject dbc:Light_novels . 
       ?item dbpedia0:wikiPageLength ?n2
     }
     GROUP BY ?item
  }
}
} GROUP BY ?item ?count
}
  • 我们需要聚合一个。用于计算平均值和 b。从平均值计算每个n 的差值之和。

  • 我需要将变量xsd:integer(?ni-?mean)的类型转换为整数,否则它不会显示乘法的结果

  • 通过运行第二个内部子查询,您可以看到变量是如何修改的

【讨论】:

  • 成功了!巨大的帮助,谢谢。我现在正在计算 wikiPageModified 日期数据的方差,如果您对此也有想法,我将不胜感激。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-22
  • 1970-01-01
  • 2012-05-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多