按照类似PageRank的方式排序的Wikidata结果

16
在Wikidata(Wikidata SPARQL终端)中,是否有一种方式可以使用类似PageRank的方法对SPARQL查询结果进行排序?

在Wikidata(Wikidata SPARQL endpoint)中,是否有一种方式可以使用类似PageRank的方法对SPARQL查询结果进行排序?

SELECT DISTINCT ?entity ?entityLabel WHERE {
    ?entity wdt:P31 wd:Q5.
    SERVICE wikibase:label {
     bd:serviceParam wikibase:language "en" .
    }
} LIMIT 100 OFFSET 0

我们能否指定一个字段来按照该字段显示结果,并且该字段表达的是排在最前面的实体比其余的更加著名/重要/易识别吗?


这里有一个类似的问题吗?https://dev59.com/7pnga4cB1Zd3GeqPgf-9 - Tomasz Pluskiewicz
并不完全相同,而且那个问题与DBpedia有关,而我的问题与Wididata有关。DBpedia有这个“pagerank”http://people.aifb.kit.edu/ath/#DBpedia_PageRank,它可以帮助按相关性对结果进行排序。我的问题是,如果Wikidata也有一个类似的等级,我能否使用它。 - jordipala
2个回答

20
似乎在与维基数据相关时,PageRank 没有太多意义。显然,大类和大聚合体将成为领导者。
此外,与 Web 链接不同,RDF 谓词可以从两侧“导航”;这只是设计问题,哪个 URI 是主题,哪个 URI 是对象。
然而,Andreas Thalhammer 继续 他的工作。维基数据前十实体如下:
Item Label Rank
Q729 animal 24996.770
Q30 USA 24772.450
Q1360 Arthropoda 16930.883
Q1390 insects 16531.822
Q35409 family 14403.091
Q756 plant 14019.927
Q142 France 13723.484
Q34740 genus 13718.484
Q16 Canada 12321.178
Q159 Russia 11707.160
很遗憾,Wikidata页面排名不在(同一)端点上发布,无法使用SPARQL查询它们。

幸运的是,人们可以自己想出某种排名。可能的选项包括:

  1. 发出语句的数量预先计算);
  2. 站点链接数量预先计算);
  3. 传入语句的数量(在下面的示例中,仅计算真实语句)。

示例查询:

SELECT ?item ?itemLabel ?outcoming ?sitelinks ?incoming {
    ?item wdt:P463 wd:Q458 .
    ?item wikibase:statements ?outcoming .
    ?item wikibase:sitelinks ?sitelinks .
       {
       SELECT (count(?s) AS ?incoming) ?item WHERE {
           ?item wdt:P463 wd:Q458 .
           ?s ?p ?item .
           [] wikibase:directClaim ?p 
      } GROUP BY ?item
  }
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" . }.  
} ORDER BY DESC (?incoming)

尝试一下!

截至2017年10月,所有这些指标或多或少相关。

scatterplot matrix

以下是欧盟成员国这些度量值的相关系数。

Pearson 出站链接 站内链接 入站链接 页面排名
出站链接 1.0000 0.6907 0.7416 0.8652
站内链接 0.6907 1.0000 0.4314 0.5717
入站链接 0.7416 0.4314 1.0000 0.8978
页面排名 0.8652 0.5717 0.8978 1.0000
Spearman outcoming sitelinks incoming pagerank
outcoming 1.0000 0.6869 0.7619 0.8736
sitelinks 0.6869 1.0000 0.7680 0.8342
incoming 0.7619 0.7680 1.0000 0.8872
pagerank 0.8736 0.8342 0.8872 1.0000
Kendall outcoming sitelinks incoming pagerank
outcoming 1.0000 0.4914 0.5661 0.7143
sitelinks 0.4914 1.0000 0.5764 0.6454
incoming 0.5661 0.5764 1.0000 0.7249
pagerank 0.7143 0.6454 0.7249 1.0000

参见:


1
你的“incoming statements”示例查询仍然有效吗?目前和现在这样,我没有得到任何结果。 - T3db0t
@T3db0t,这些P31语句已被删除,请参见此版本。在这两种情况下,请尝试使用?item wdt:P463 wd:Q458而不是?item wdt:P31 wd:Q185441。我会编辑我的答案,谢谢。我也会尝试添加一些查询性能提示。 - Stanislav Kralin
@T3db0t,你可能也对Wikidata API返回结果的顺序感兴趣,可以查看https://phabricator.wikimedia.org/T177275#4629163。 - Stanislav Kralin

4
如果你还对这个问题感兴趣,确实有一个Wikidata PageRank项目(与维基媒体基金会无关)。它托管在 https://github.com/athalhammer/danker,你可以使用任何可用的维基百科语言的Wikidata Q-ID来计算PageRank(甚至是所有语言版本链接的联合集合)。不定期地,一些计算也由项目所有者运行,并将结果得分托管在https://danker.s3.amazonaws.com/index.html
计算结果的输出可以转换为N-Triples/Turtle(首先)然后是HDT(第二)。
选项1:从托管此Wikidata PageRank HDT文件的端点 (示例参见此处),然后可以使用实时Wikidata端点运行联合查询(示例提供在链接的存储库和下面的图像中)。
选项2:将创建的Wikidata PageRank HDT文件与Wikidata最新的HDT转储结合使用,并结合HDTCat
选项3:不使用HDT,只需将N-Triples/Turtle文件加载到所选择的三元组存储器中,并与Wikidata转储N-Triples/Turtle文件一起使用。
示例联合查询:Example federated query

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接