Add new get_tags_for_isa_item function
This commit is contained in:
parent
ed56bdc767
commit
b22d4058fd
|
@ -301,17 +301,91 @@ def get_item_tags(item):
|
||||||
# item is specific enough, no need to keep walking the item hierarchy
|
# item is specific enough, no need to keep walking the item hierarchy
|
||||||
continue
|
continue
|
||||||
|
|
||||||
subclass_of = {v["numeric-id"] for v in (isa.get_claim("P279") or []) if v}
|
check = set()
|
||||||
religion = {v["numeric-id"] for v in (isa.get_claim("P140") or []) if v}
|
properties = [
|
||||||
sport = {v["numeric-id"] for v in (isa.get_claim("P641") or []) if v}
|
("P279", "subclass of"),
|
||||||
use = {v["numeric-id"] for v in (isa.get_claim("P366") or []) if v}
|
("P140", "religion"),
|
||||||
check = subclass_of | religion | sport | use
|
("P641", "sport"),
|
||||||
|
("P366", "use"),
|
||||||
|
("P1269", "facet of"),
|
||||||
|
# ("P361", "part of"),
|
||||||
|
]
|
||||||
|
|
||||||
|
for pid, label in properties:
|
||||||
|
check |= {v["numeric-id"] for v in (isa.get_claim(pid) or []) if v}
|
||||||
|
|
||||||
print(isa.qid, isa.label(), check)
|
print(isa.qid, isa.label(), check)
|
||||||
isa_list = check - seen
|
isa_list = check - seen
|
||||||
seen.update(isa_list)
|
seen.update(isa_list)
|
||||||
isa_items += [(isa, isa_path) for isa in get_items(isa_list)]
|
isa_items += [(isa, isa_path) for isa in get_items(isa_list)]
|
||||||
return {key: list(values) for key, values in osm_list.items()}
|
return {key: list(values) for key, values in osm_list.items()}
|
||||||
|
|
||||||
|
|
||||||
|
def get_tags_for_isa_item(item):
|
||||||
|
isa_list = [item.item_id]
|
||||||
|
isa_items = [(item, [])]
|
||||||
|
|
||||||
|
osm_list = defaultdict(list)
|
||||||
|
|
||||||
|
skip_isa = {row[0] for row in database.session.query(model.SkipIsA.item_id)}
|
||||||
|
|
||||||
|
tram_stop_id = 41176
|
||||||
|
airport_id = 1248784
|
||||||
|
aerodrome_id = 62447
|
||||||
|
if {tram_stop_id, airport_id, aerodrome_id} & set(isa_list):
|
||||||
|
skip_isa.add(41176) # building (Q41176)
|
||||||
|
|
||||||
|
seen = set(isa_list) | skip_isa
|
||||||
|
stop = {
|
||||||
|
"Q11799049": "public institution",
|
||||||
|
"Q7075": "library",
|
||||||
|
"Q329683": "industrial park",
|
||||||
|
}
|
||||||
|
items_checked = []
|
||||||
|
items_checked_done = set()
|
||||||
|
while isa_items:
|
||||||
|
isa, isa_path = isa_items.pop()
|
||||||
|
if not isa:
|
||||||
|
continue
|
||||||
|
isa_path = isa_path + [{'qid': isa.qid, 'label': isa.label()}]
|
||||||
|
if isa.item_id not in items_checked_done:
|
||||||
|
items_checked.append({'qid': isa.qid, 'label': isa.label()})
|
||||||
|
items_checked_done.add(isa.item_id)
|
||||||
|
osm = [v for v in isa.get_claim("P1282") if v not in skip_tags]
|
||||||
|
|
||||||
|
osm += [extra.tag_or_key
|
||||||
|
for extra in model.ItemExtraKeys.query.filter_by(item_id=isa.item_id)]
|
||||||
|
|
||||||
|
for i in osm:
|
||||||
|
osm_list[i].append(isa_path[:])
|
||||||
|
|
||||||
|
if isa.qid in stop:
|
||||||
|
# item is specific enough, no need to keep walking the item hierarchy
|
||||||
|
continue
|
||||||
|
|
||||||
|
check = set()
|
||||||
|
properties = [
|
||||||
|
("P279", "subclass of"),
|
||||||
|
("P140", "religion"),
|
||||||
|
("P641", "sport"),
|
||||||
|
("P366", "use"),
|
||||||
|
("P1269", "facet of"),
|
||||||
|
# ("P361", "part of"),
|
||||||
|
]
|
||||||
|
|
||||||
|
for pid, label in properties:
|
||||||
|
check |= {v["numeric-id"] for v in (isa.get_claim(pid) or []) if v}
|
||||||
|
|
||||||
|
print(isa.qid, isa.label(), check)
|
||||||
|
isa_list = check - seen
|
||||||
|
seen.update(isa_list)
|
||||||
|
isa_items += [(isa, isa_path) for isa in get_items(isa_list)]
|
||||||
|
return {
|
||||||
|
'tags': {key: list(values) for key, values in osm_list.items()},
|
||||||
|
'checked': items_checked,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def add_isa_filter(q, isa_qids):
|
def add_isa_filter(q, isa_qids):
|
||||||
|
|
||||||
q_subclass = database.session.query(model.Item.qid).filter(
|
q_subclass = database.session.query(model.Item.qid).filter(
|
||||||
|
|
Loading…
Reference in a new issue