示例#1
0
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
示例#2
0
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