获取所有超过10种语言的维基数据项?

时间:2018-01-27 16:48:19

标签: sparql wikidata

我正试图通过SPARQL从维基数据中获取世界上最着名的电影。

我有以下查询:

SELECT ?item WHERE {
  ?item wdt:P31 wd:Q11424.
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}

返回所有电影(约214143)。

我基本上只需要在维基百科上有超过10种语言条目的电影,因为我猜这些将是最着名的。

有没有办法在查询本身内执行此操作,而不检查所有条目?

1 个答案:

答案 0 :(得分:2)

你问题的一个天真的答案是:

SELECT ?movie ?sitelinks WHERE {
   ?movie wdt:P31 wd:Q11424 .
   ?movie wikibase:sitelinks ?sitelinks .
   FILTER (?sitelinks > 10) 
} ORDER BY DESC(?sitelinks)

Try it!

或者,您可以考虑附加链接的总数。附加链接包括指向维基百科的链接以及Wikiquote,Wikivoyage等链接。优点是附加链接的总数是预先计算的。

|        title        | articles | sitelinks | labels |
|---------------------|----------|-----------|--------|
| Avatar              |       92 |       103 |     99 |
| Titanic             |       86 |       100 |    101 |
| The Godfather       |       79 |       103 |     82 |
| Slumdog Millionaire |       72 |        75 |     80 |
| Forrest Gump        |       71 |       101 |     84 |

Get Wikipedia URLs (sitelinks) in Wikidata SPARQL query

另见这些问题:

正如@TallTed和@AKSW指出的那样,不同语言的标签数量可能与不同语言的维基百科文章数量不同。以下是比较。

维基百科文章排名前5的电影

|     title     | articles | sitelinks | labels |
|---------------|----------|-----------|--------|
| Avatar        |       92 |       103 |     99 |
| The Godfather |       79 |       103 |     82 |
| Forrest Gump  |       71 |       101 |     84 |
| Titanic       |       86 |       100 |    101 |
| The Matrix    |       67 |        94 |     77 |

附加链接的前5部电影

|            title             | articles | sitelinks | labels |
|------------------------------|----------|-----------|--------|
| The 25th Reich               |        2 |         2 |    227 |
| Time Is But Brief            |        0 |         0 |    224 |
| Michael Moore in TrumpLand   |        6 |         6 |    222 |
| Magnus - The Mozart of Chess |        1 |         1 |    221 |
| Lee Chong Wei                |        1 |         1 |    196 |

按标签排名前5位的电影

public function track(Request $request) {
    // increase stored number here

    header('Content-Type: image/gif');
    return base64_decode('R0lGODlhAQABAJAAAP8AAAAAACH5BAUQAAAALAAAAAABAAEAAAICBAEAOw==');
}