在某些情况下,维基数据中的首选排名无法正常工作?
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
结果:
+-------------+-----------+------------+----------------------+---------------------+
| 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" }
}
这是找到 "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" }
}
事实上,几乎 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。
所以我目前正在做一个项目,我使用从 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
结果:
+-------------+-----------+------------+----------------------+---------------------+
| 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" }
}
这是找到 "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" }
}
事实上,几乎 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 forP2
will be considered truthy. Otherwise, all normal-rank statements forP2
are considered truthy.
是的,大约 0.5% 的条目有 P1082
-statements 有两个或更多真实的 P1082
-statements。