-
Notifications
You must be signed in to change notification settings - Fork 2
/
quickstatements_manufacturer.py
64 lines (50 loc) · 1.4 KB
/
quickstatements_manufacturer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import json
import csv
import mkwikidata
with open("./ships.json") as f:
SHIPS = json.load(f)
with open("./ship_builders_qids.csv") as f:
SHIP_BUILDERS = list(csv.DictReader(f))
QUERY = """
SELECT DISTINCT ?item ?itemLabel ?asid WHERE {
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
{
?item wdt:P8260 ?asid.
MINUS {
?item p:P176 _:anyValueP176.
}
}
}
"""
def main():
ships = {}
for ship in SHIPS:
ships[ship["id"]] = ship
builders = {}
for builder in SHIP_BUILDERS:
builders[builder["builder"]] = builder
out = []
result = mkwikidata.run_query(QUERY)
for res in result["results"]["bindings"]:
ship_qid = res["item"]["value"].lstrip("http://www.wikidata.org/entity/")
ship_id = res["asid"]["value"]
ship = ships.get(ship_id)
if not ship:
print(f"Unknown ship ID {ship_id}")
continue
shipbuilder = ship.get("Shipbuilder")
if not shipbuilder:
print(f"No known shipbuilder for {ship_id}")
continue
builder = builders.get(shipbuilder)
if not builder:
print(f"Unknown builder {shipbuilder}")
continue
builder_qid = builder.get("QID")
if not builder_qid:
print(f"No known QID for builder {shipbuilder}")
continue
out.append((ship_qid, "P176", builder_qid, "S143", "Q90807948"))
print("\n".join(map(lambda o: "|".join(o), out)))
if __name__ == "__main__":
main()