def build_candidate_priority_queue_one_entity(entity_id): candidate_priority_queue_one_entity = [] statements = wd.get_all_statements_of_entity(entity_id) # error handling if not statements: return [] for statement in statements: # entity is the object of the statement if entity_id == statement['object']['id']: entity_label = wd.wikidata_id_to_label(statement['entity']['id']) predicate_label = wd.wikidata_id_to_label(statement['predicate']['id']) candidate_priority_queue_one_entity.append({'type': 'predicate', 'predicate': statement['predicate']['id'], 'label': predicate_label, 'statement': statement}) candidate_priority_queue_one_entity.append({'type': 'entity', 'entity': statement['entity']['id'], 'label': entity_label, 'statement': statement}) # entity is the subject of the statement else: object_label = wd.wikidata_id_to_label(statement['object']['id']) predicate_label = wd.wikidata_id_to_label(statement['predicate']['id']) candidate_priority_queue_one_entity.append({'type': 'predicate', 'predicate': statement['predicate']['id'], 'label': predicate_label, 'statement': statement}) candidate_priority_queue_one_entity.append({'type': 'entity', 'entity': statement['object']['id'], 'label': object_label, 'statement': statement}) # include the qualifiers if statement['qualifiers']: for qualifier in statement['qualifiers']: qualifier_object_label = wd.wikidata_id_to_label(qualifier['qualifier_object']['id']) qualifier_predicate_label = wd.wikidata_id_to_label(qualifier['qualifier_predicate']['id']) candidate_priority_queue_one_entity.append({'type': 'qualifier_object', 'qualifier_object': qualifier['qualifier_object']['id'], 'label': qualifier_object_label, 'statement': statement}) candidate_priority_queue_one_entity.append({'type': 'qualifier_predicate', 'qualifier_predicate': qualifier['qualifier_predicate']['id'], 'label': qualifier_predicate_label, 'statement': statement}) return candidate_priority_queue_one_entity
def answer_complete_question(question, tagmeToken): entities = tagme_get_all_entities(question, tagmeToken) highest_matching_similarity = -1 for entity in entities: shortened_question = string.shorten_question_for_predicate_similarity(question, entity['spot']) statements = wd.get_all_statements_of_entity(entity['wikidata_id']) for statement in statements: # no identifier predicates if statement['predicate']['id'] in identifier_predicates: continue predicate_label = wd.wikidata_id_to_label(statement['predicate']['id']) matching_similarity = spacy.similarity_word2vec(predicate_label, shortened_question) * entity['link_probability'] if highest_matching_similarity == -1 or matching_similarity > highest_matching_similarity: answer = statement['entity']['id'] if statement['object']['id'] == entity['wikidata_id'] else statement['object']['id'] context = {'entity': {'id': entity['wikidata_id']}, 'predicate': {'id': statement['predicate']['id']}, 'object': {'id': answer}} result = {'context': context, 'answers': [{'answer': answer, 'rank': 1}] } highest_matching_similarity = matching_similarity return result