在某些情况下,维基数据中的首选排名无法正常工作?

Prefered rank in Wikidata not working properly for population in some cases?

所以我目前正在做一个项目,我使用从 Wikidata 获取的数据,我注意到我的数据库中有很多重复的元素。原因是我收到了不同时间点的人口数量。

我读到 Wikidata 对具有多个值的语句和似乎是最新值的总体 属性 进行了排名——大约 99.9% 的条目都是如此。我不明白的是为什么它对其他 0.1% 不起作用。

一个例子是:Wikidata query

例如元素

也会发生同样的情况

我不知道为什么。

我已经尝试了 的解决方案,但它并没有改变结果。

有什么想法吗?


根据线程中的过滤器选项进行编辑:wikidata query 2

编辑 2:Full query

某些维基数据属性由 PreferentialBot (source code) 处理。

简而言之,机器人做出了最近的陈述 preferred, hence making them truthy

有时机器人不会处理 属性 的语句。例如,机器人不会处理包含没有相应限定符的语句的项目。

在您的特定情况下:

SELECT DISTINCT ?city ?cityLabel ?population ?date ?rank WHERE {
  VALUES (?settlement) {(wd:Q515) (wd:Q15284)}
  VALUES (?city) {(wd:Q1658752)}
  ?city wdt:P31/wdt:P279* ?settlement . 
  ?city p:P1082 ?statement .
  ?statement ps:P1082 ?population .
  ?statement wikibase:rank ?rank
  OPTIONAL { ?statement pq:P585 ?date }  
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" }   
} ORDER by ?date

Try it

结果:

+-------------+-----------+------------+----------------------+---------------------+
|    city     | cityLabel | population |        date          |         rank        |
+-------------+-----------+------------+----------------------+---------------------+
| wd:Q1658752 | Kagan     |      86745 |                      | wikibase:NormalRank |
| wd:Q1658752 | Kagan     |      17656 | 1939-01-01T00:00:00Z | wikibase:NormalRank |
| wd:Q1658752 | Kagan     |      21103 | 1959-01-01T00:00:00Z | wikibase:NormalRank |
| wd:Q1658752 | Kagan     |      34117 | 1970-01-01T00:00:00Z | wikibase:NormalRank |
| wd:Q1658752 | Kagan     |      41565 | 1979-01-01T00:00:00Z | wikibase:NormalRank |
| wd:Q1658752 | Kagan     |      48054 | 1989-01-01T00:00:00Z | wikibase:NormalRank |
+-------------+-----------+------------+----------------------+---------------------+

您更喜欢最近的声明还是 "eternal" 的声明?

这是找到最新人口的方法:

SELECT DISTINCT ?city ?cityLabel ?population WHERE {
  VALUES (?settlement) {(wd:Q515) (wd:Q15284)}
  VALUES (?city) {(wd:Q1658752)}
  ?city wdt:P31/wdt:P279* ?settlement . 
  ?city p:P1082 [ ps:P1082 ?population; pq:P585 ?date1 ]  
  FILTER NOT EXISTS {
    ?city p:P1082 [ pq:P585 ?date2 ]
    FILTER (?date2 > ?date1) }
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" }   
}

Try it

这是找到 "eternal" 的方法:

SELECT DISTINCT ?city ?cityLabel ?population WHERE {
  VALUES (?settlement) {(wd:Q515) (wd:Q15284)}
  VALUES (?city) {(wd:Q1658752)}
  ?city wdt:P31/wdt:P279* ?settlement . 
  ?city p:P1082 ?statement .
  ?statement ps:P1082 ?population .
  FILTER NOT EXISTS {?statement pq:P585 []}
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" }   
}

Try it


事实上,几乎 70%(不是 0.1%)带有 P1082 属性 的条目没有针对此 属性 的首选语句。您的意思应该是带有 P1082 属性 的条目对这个 属性 有不止一个真实的陈述。回想一下:

Truthy statements represent statements that have the best non-deprecated rank for given property. Namely, if there is a preferred statement for property P2, then only preferred statements for P2 will be considered truthy. Otherwise, all normal-rank statements for P2 are considered truthy.

是的,大约 0.5% 的条目有 P1082-statements 有两个或更多真实的 P1082-statements。